В моем приложении я пытаюсь подписаться очередь «MyQueue», которая имеет привязки к нему в «Ребус» тема обмена базирование на ваши советы, используя следующий код:Подписавшись очереди RabbitMQ через Ребус 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 крупных причины, инициированное Peer, код = 404, текст = "NOT_FOUND - без очереди 'MyQueue' в виртуальном хосте '/'", ClassID = 50, methodId = 20, cause =
хотя очередь существует.
Если я удаляю .Основные (ложные, ложные, ложные) и ждут bus.Advanced.Topics.Subscribe («MyQueue»); он создаст новый MyQueue у кролика в обмене RebusDirect и начнет слушать его. Правильная строка подключения к кролику.
Где проблема? Неправильная настройка или неправильный способ подписки?
Заранее спасибо.
Возможно, я не поймал вашу точку зрения, но если я не хочу архивировать что-то необыкновенное. Я использовал Rebus 1 и теперь переключился на 2 версии. Моя цель - продолжить способ обмена сообщениями, который уже существует в приложении. Если я удалю '.Declarations (false, false, false)', он создаст новый MyQueue у кролика в Exchange Rebel и начнет его слушать.Все, что мне нужно, это заставить мое приложение прослушивать существующую очередь в Rabbit, которая имеет привязки в существующем обмене темами и вызывать существующие IHandleMessages. –
TakinosaJi
То, что вы хотите достичь, довольно необычно и определенно не поддерживается (но вы знаете это :)), и я даже не что это возможно (вы также знаете это) ... что происходит, когда вы удаляете строку 'Declarations' и используете обмены Rebus' /' RebusDirect'? – mookid8000
Извините, если мой вопрос кажется странным, но в моем случае крайне важно не нарушать существующую логику, а пользоваться новым асинхронным подходом ребуса. Как я упоминал, если я удаляю '.Declarations (false, false, false)', он создаст новый MyQueue у кролика в Exchange Rebel и начнет его слушать. И причина этого - RabbitMqTransport, как я видел из кода ребуса, потому что он устанавливает привязку к очереди через DIRECT-обмен. ... model.QueueBind (адрес, this._directExchangeName, address); .... '. Мой существующий обмен, где установлены ключи маршрутизации, - это тема. – TakinosaJi