我有预设置的RabbitMQ配置:Exchange-1,Queue-1,并且使用路由键“ notifications.info”进行绑定。我想使用MassTransit连接到现有的Queue-1。
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("rabbitmq://guest:guest@localhost");
cfg.ReceiveEndpoint("Queue-1", e =>
{
e.ConfigureConsumeTopology = false;
e.Consumer<EventConsumer>();
e.Bind("Exchange-1", x =>
{
x.Durable = false;
x.AutoDelete = false;
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创建交换`Queue-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
答案 0 :(得分:1)
没有任何选项可以禁用它,这是MassTransit为接收端点(交换和具有相同名称的队列)配置拓扑的方式。
错误实际上是因为交换已经存在并且与您的接收端点配置不匹配。
此较小的更改应可修复错误:
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";
});
});