2016-03-28 1 views
1

Am нового Спринг-rabbitMQ.I имеет следующие question..Please правильно, если я ошибаюсь:Spring RabbitMQ анонимной очередь

У меня есть три экземпляра приложения именно.

Instance1 instance2 Instance3

Примечание: Эти примеры не должны быть исправлены number.All этих случаев слушать тот же exchange..As количество экземпляров не фиксируется, мое требование одно и то же сообщение shuld быть полученное всеми тремя/(число может) быть переменным .. для достижения этой цели с помощью spring-amqp

Если объявить имя очереди и связать это, чтобы обмениваться сообщениями будут разбиты по экземплярам .. но я хочу, чтобы сообщения rabbitmq (сообщения от бирж) ко всем очередям. Как мы можем достичь этого. Я слышал некоторые вещи, похожие на анонимные очереди ...

Как добиться этого программно весной не через декларации XML и использование SPEL объявить идентификатора очереди

Шаг 1: Создание фабрики соединений Шаг 2: Создание обмена Шаг 3: Создание очереди Шаг 4: Создание AMQP admin, а затем объявить, что очередь Шаг 5: Привязать очередь к обмену

Также при остановке экземпляра очередь должна получить autodeleted..если они будут предоставлены в постконструкции?

Настоящий код, как simliar следующим образом:

CachingConnectionFactory ср = новый CachingConnectionFactory ("192.168.1.10", 5672);

RabbitAdmin admin = new RabbitAdmin(cf); 

FanoutExchange testExchange = new FanoutExchange("testExchange", true, false); 
admin.declareExchange(testExchange); 

Queue testQueue = new Queue("testQueue", true, false, true); 
admin.declareQueue(testQueue); 

admin.declareBinding(BindingBuilder.bind(testQueue).to(testExchange)); 

SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
container.setConnectionFactory(cf); 
container.setRabbitAdmin(admin); 

container.setQueues(testQueue); 
container.setMessageListener(new MessageListenerAdapter() { 
    public void handleMessage(String text) { 
     System.out.println("Received : " + text); 
    } 
}); 
container.afterPropertiesSet(); 

container.start(); 

ответ

1

Идет правильный путь с autodeleted очередями, но они не могут быть anonymous, хотя может быть уникальными для каждого экземпляра.

Главная особенность здесь для вас - Fanout Exchange. Именно этот Exchange может отправлять одно и то же сообщение во все подписанные (связанные) очереди.

Дополнительную информацию можно найти на сайте RabbitMQ Tutorial.

+0

Мы уже используем обмен разветвления. Но проблема в том, что мы используем Spring amqp, в котором мы устанавливаем edscontainer.setQueueNames (queue_name); как добиться этого, используя очереди автоматического удаления –

+0

В принципе, как мы можем справиться с этим scneario ConnectionFactory connectionFactory = new CachingConnectionFactory(); AmqpAdmin admin = новый RabbitAdmin (connectionFactory); admin.declareQueue (новая очередь («myqueue»)); –

+0

??? В общем, вам не нужно делать это вручную. «RabbitAdmin» заботится обо всех «сущностях» и привязывает их автоматически. Если они объявлены как бобы, конечно. См. 'Queue' ctors. 'autoDelete' находится в одном из них. –

Смежные вопросы