我在RabbitMQ中使用massTransit。使用massTransit发布消息将为我的消息类型创建一个交换。而masstransit使用者将创建到交换的队列和绑定。太好了,让事情变得简单。
在介绍massTransit之前,我使用rabbitMQ的api来创建队列、交换和绑定。我会让发布者和消费者运行相同的设置代码。因此,无论谁先运行所有队列,无论应用程序的哪一部分先运行,都将创建交换和绑定。当在开发环境中运行时,这是非常棒的。
我想知道是否可以用massTransit实现类似的事情?
发布于 2016-12-24 23:26:44
与MassTransit应该相同:消费者将创建绑定到他们消费的消息的交换的队列(具有与消息类型相同的名称)。发布者将创建具有与其发布的消息类型相同的名称的交换。请记住,如果发布或使用的消息具有超类或实现接口,MassTransit将创建相同的层次结构,创建和绑定与您的消息类层次结构一样多的交换。
发布于 2020-04-08 21:05:55
您可以通过下面的代码使用HareDu 2来实现这一点。这适用于Autofac和.NET核心DI。请在此处查看文档:https://github.com/ahives/HareDu2
// Create a queue
var result = _container.Resolve<IBrokerObjectFactory>()
.Object<Queue>()
.Create(x =>
{
x.Queue("fake_queue");
x.Configure(c =>
{
c.IsDurable();
c.AutoDeleteWhenNotInUse();
c.HasArguments(arg =>
{
arg.SetQueueExpiration(1000);
arg.SetPerQueuedMessageExpiration(2000);
});
});
x.Targeting(t =>
{
t.VirtualHost("fake_vhost");
t.Node("fake_node");
});
});
// Create an exchange
var result = _container.Resolve<IBrokerObjectFactory>()
.Object<Exchange>()
.Create(x =>
{
x.Exchange("fake_exchange");
x.Configure(c =>
{
c.IsDurable();
c.IsForInternalUse();
c.HasRoutingType(ExchangeRoutingType.Fanout);
c.HasArguments(arg =>
{
arg.Set("fake_arg", "fake_arg_value");
});
});
x.Targeting(t => t.VirtualHost("fake_vhost"));
});
// Create a binding
var result = _container.Resolve<IBrokerObjectFactory>()
.Object<Binding>()
.Create(x =>
{
x.Binding(b =>
{
b.Source("fake_exchange");
b.Destination("fake_queue");
b.Type(BindingType.Exchange);
});
x.Configure(c =>
{
c.HasRoutingKey("your_routing_key");
c.HasArguments(arg =>
{
arg.Set("your_arg", "your_arg_value");
});
});
x.Targeting(t => t.VirtualHost("fake_vhost"));
});https://stackoverflow.com/questions/41300430
复制相似问题