zencd
@zencd

Возможно ли создать потребителя RabbitMQ без определения exchange?

Есть код создающий в рантайме потребителя сообщений из очереди rmq (взято из примера `sping-rabbitmq`).

Вопрос: можно ли избавиться от определения exchange? И если да, то как? Эксчейнджи ведь нужны только для доставки сообщения до очереди, а потребители вроде ни при чём здесь...

CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
cf.setUsername("tst");
cf.setPassword("tst");

RabbitAdmin admin = new RabbitAdmin(cf);
Queue queue = new Queue(queueName);
admin.declareQueue(queue);
TopicExchange exchange = new TopicExchange("myExchange");
admin.declareExchange(exchange);
admin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(routingKey));

SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf);
Object listener = new Object() {
    public void handleMessage(byte[] message) { ... }
};
MessageListenerAdapter adapter = new MessageListenerAdapter(listener);
container.setMessageListener(adapter);
container.setQueueNames(queueName);
container.start();
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ответы на вопрос 2
воркеров сажаю в router и не парюсь
Ответ написан
Комментировать
@yarkin
На Java не пишу, но: а Вы не пробовали убрать те три строчки, где используется exchange? Это приводит к ошибке?

Проблема будет в том, что очередь и обменник нужно будет связать (создать биндинг), это можно сделать при создании очереди или при создании обменника, ну или в какой-то третий момент времени. Если этого не сделать, то сообщения, публикуемые в обменник не попадут в очередь.
Но, если требуется просто очередь, без какой-то реальной потребности в обменнике, то при публикации можно использовать обменник по умолчанию (пустая строка) и имя очереди в качестве ключа маршрутизации и RabbitMQ закинет сообщение в эту очередь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы