2016-04-11 2 views
0

У меня есть рабочее решение для моей проблемы, но задаюсь вопросом, есть ли более чистый способ сделать это.Rabbitmq Подпишитесь на несколько сервисов, но потребляйте его круговым способом

Моя архитектура состоит из нескольких сервисов, излучающих сообщения через брокера Rabbitmq.

Некоторые работники потребляют эти сообщения и выполняют фоновые задания.

Дело в том, что я хотел иметь возможность создавать различные типы рабочих, все потребляющие одни и те же услуги, и иметь возможность иметь нескольких работников того же типа получить работу через круглый робин.

Для этого сообщения публикуются службой в режиме pub/sub и используются процессом, который перераспределяет сообщения в рабочей очереди, предназначенной для набора рабочих.

Есть ли более элегантный способ для этого?

Извините, если объяснение непонятно, я отредактирую его.

Спасибо!

(я мог бы создать одну очередь на одного работника в службах, но с моим решением, я могу подписаться столько, сколько я хочу, не касаясь кода)

ответ

0

Похоже, что идеально подходит для topic exchange.

+0

Я никогда их не понять, что путь, может быть, я не сделал читайте об этом достаточно. Похож на то, что я ищу. Я проверю и посмотрю. Спасибо! – Sirf0x

+0

Добро пожаловать. – cantSleepNow

0

Пожалуйста, смотрите: https://www.rabbitmq.com/tutorials/tutorial-two-java.html

Раздел "Циклическая диспетчеризация"

Вы должны установить параметр channel.basicQos(X):

channel.basicQos(1); 

final Consumer consumer = new DefaultConsumer(channel) { 
    @Override 
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { 
    String message = new String(body, "UTF-8"); 

    System.out.println(" [x] Received '" + message + "'"); 
    try { 
     doWork(message); 
    } finally { 
     System.out.println(" [x] Done"); 
     channel.basicAck(envelope.getDeliveryTag(), false); 
    } 
    } 
}; 
Смежные вопросы