当配置非持久消息时,MassTransit会发送持久消息

时间:2018-03-12 20:53:52

标签: masstransit

我正在尝试向队列发送消息。队列已存在,并配置为非持久性。这是我的代码:

ServiceBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                sbc.PurgeOnStartup = true;
                sbc.Durable = false;
                sbc.Exclusive = false;

                sbc.Host(new Uri($"rabbitmq://{RabbitMqHost}"), cfg =>
                {
                    cfg.ConfigureRabbitMq();
                });
            });

ServiceBus.Request(
                        new Uri(serviceUri),
                        new EngineStartingMessage() { Version = ApplicationConfig.SystemVersion },
                        rCfg =>
                        {
                            rCfg.Durable = false;
                            rCfg.Timeout = new TimeSpan(0, 0, 30);
                            rCfg.Handle<EngineStartingResponse>(async hContext =>
                            {
                                //Response handling
                            });
                        });

正如您所见,Durable设置为false。在ServiceBus.Request上,我得到以下异常:

  

AMQP操作被中断:AMQP关闭原因,由...发起   同行,代码= 406,text =“PRECONDITION_FAILED - 不等效arg'持久'   交换'QUEUENAMEHERE'在vhost'/':收到'true'但是当前   是'false'“,classId = 40,methodId = 10,cause =

为什么邮件仍然以耐用方式发送的任何想法?

1 个答案:

答案 0 :(得分:0)

该Durable标志仅指定不应将特定请求消息持久保存到磁盘。

如果要解决此问题,请将?durable=false添加到serviceUri,以匹配处理请求的接收端点上指定的内容。