使用MassTransit问题连接到现有RabbitMQ队列

使用MassTransit问题连接到现有RabbitMQ队列,rabbitmq,masstransit,Rabbitmq,Masstransit,我已经预先设置了RabbitMQ配置:Exchange-1,队列-1,使用路由键“notifications.info”进行绑定。我想使用MassTransit连接到现有队列1 var-busControl=Bus.Factory.CreateUsingRabbitMq(cfg=> { 主机(“rabbitmq://guest:guest@本地主机); 接收端点(“队列-1”,e=> { e、 configureconsumertopology=false; e、 消费者(); e、 绑定(“交

我已经预先设置了RabbitMQ配置:Exchange-1,队列-1,使用路由键“notifications.info”进行绑定。我想使用MassTransit连接到现有队列1

var-busControl=Bus.Factory.CreateUsingRabbitMq(cfg=>
{
主机(“rabbitmq://guest:guest@本地主机);
接收端点(“队列-1”,e=>
{
e、 configureconsumertopology=false;
e、 消费者();
e、 绑定(“交换-1”,x=>
{
x、 持久=错误;
x、 自动删除=假;
x、 ExchangeType=ExchangeType.Topic;
x、 RoutingKey=“notifications.info”;
});
});
});
错误:

The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=406,
text='PRECONDITION_FAILED - inequivalent arg 'durable' for exchange 'Queue-1' in vhost '/':
received 'true' but current is 'false'', classId=40, methodId=10
MassTransit创建exchange“队列-1”。我不需要在RabbitMQ上创建额外的实体。有禁用它的选项吗

有用信息

bash-5.0# rabbitmqctl list_exchanges name type durable auto_delete internal arguments policy
name    type    durable auto_delete     internal        arguments       policy
Exchange-1      topic   false   false   false   []
Queue-1 fanout  false   false   false   []

bash-5.0# rabbitmqctl list_queues name durable auto_delete arguments exclusive
name    durable auto_delete     arguments       exclusive
Queue-1 false   false   [{"x-queue-type","classic"}]    false

没有禁用它的选项,这是MassTransit为接收端点(具有相同名称的exchange和队列)配置拓扑的方式

该错误实际上是因为exchange已经存在,并且与您的接收端点配置不匹配

这一小改动应该可以修复错误:

cfg.ReceiveEndpoint("Queue-1", e =>
{
    e.ConfigureConsumeTopology = false;

    // since your queue is non-durable
    e.Durable = false;

    e.Consumer<EventConsumer>();
    e.Bind("Exchange-1", x =>
    {
        x.Durable = false;
        x.AutoDelete = false;
        x.ExchangeType = ExchangeType.Topic;
        x.RoutingKey = "notifications.info";
    });
});
cfg.ReceiveEndpoint(“队列-1”,e=>
{
e、 configureconsumertopology=false;
//因为您的队列是不持久的
e、 持久=错误;
e、 消费者();
e、 绑定(“交换-1”,x=>
{
x、 持久=错误;
x、 自动删除=假;
x、 ExchangeType=ExchangeType.Topic;
x、 RoutingKey=“notifications.info”;
});
});

谢谢您的回答。那么,改变lib的最佳解决方案是什么呢?比如说EasyNetQ?更新了答案,向您展示了如何用不等价的参数来解决这个问题。至于你对图书馆的选择,那取决于你。