RabbitMQ的队列在我的应用我想订阅“myQueue中”队列具有绑定到它在使用下面的代码的建议“卤面”的话题交换筑底:订阅通过卤面2
async void InitializeBus()
{
var busConfigurer = Configure.With(new CastleWindsorContainerAdapter(_container))
.Logging(l => l.Log4Net())
.Transport(t => t.UseRabbitMq(_connectionString, "MyQueue")
.Declarations(false, false, false)
.ExchangeNames("RebusDirect", "Rebus")
.Prefetch(5))
.Options(o => {
o.SimpleRetryStrategy(_errorQueue);
if (_enableLegacyCompatibility)
{
o.EnableLegacyCompatibility();
}
})
.Serialization(s => s.Decorate(c => new XmlMessageSerializer()));
var bus = busConfigurer.Start();`
await bus.Advanced.Topics.Subscribe("MyQueue");
}
结果我有像
的AMQP操作被中断的异常:AMQP近距离原因,通过 位体,代码= 404发起的,文本= “NOT_FOUND - 在虚拟主机没有队列 'myQueue中' '/'”, CLASSID = 50,methodId = 20,原因=
尽管队列存在。
如果我删除.Declarations(false,false,false)并等待bus.Advanced.Topics.Subscribe(“MyQueue”);它将在RebusDirect交换中创建新的MyQueue,并开始监听它。连接字符串到兔子是正确的。
问题出在哪里?不正确的配置或不正确的订阅方式?
在此先感谢。
也许我没有理解你的观点,但如果我不想存档非凡的东西。我一直在使用Rebus 1,现在切换到2版本。我的目标是继续应用程序中已存在的消息传递方式。如果我删除'.Declarations(false,false,false)',它将在RebusDirect交换中创建新的MyQueue,并开始监听它。我需要的是让我的应用程序监听Rabbit中的现有队列,该队列在已有的主题交换中绑定并调用现有的IHandleMessages –
TakinosaJi
你想实现的是非常非凡的,绝对不支持(但你知道:)),我甚至不肯定它是可能的(你也知道)......当你删除'Declarations'行并使用'Rebus' /'RebusDirect'交换时会发生什么? – mookid8000
对不起,如果我的问题看起来很奇怪,但在我的情况下,不要打破现有的逻辑,但享受新的rebus异步方法是非常重要的。正如我所提到的,如果我删除'.Declarations(false,false,false)',它将在RebusDirect交换中创建新的MyQueue,并开始监听它。它的原因是RabbitMqTransport,因为我已经从rebus代码中看到它,因为它通过DIRECT交换建立了绑定到一个队列'.... model.QueueBind(address,this._directExchangeName,address); ....'。我设置路由键的现有交换是主题。 – TakinosaJi