Rabbitmq订阅多种服务,但以循环方式使用它

时间:2016-04-11 14:14:55

标签: rabbitmq publish-subscribe round-robin

我已经找到了解决问题的方法,但想知道是否有更清洁的方法。

我的架构由多个服务组成,通过Rabbitmq代理发送消息。

有些工作人员会使用这些消息并从事后台工作。

问题在于,我希望能够创建不同类型的工作人员,所有人都使用相同的服务,并且能够让几个相同类型的工人通过循环来获得工作。

为此,消息由服务以pub / sub方式发布,并由在专用于一组worker的工作队列中重新分发消息的进程使用。

这样做有更优雅的方式吗?

很抱歉,如果说明不明确,我会对其进行编辑。

谢谢!

(我可以在服务中为每个工作者创建一个队列,但是使用我的解决方案,我可以根据需要订阅,而无需触及任何代码)

2 个答案:

答案 0 :(得分:0)

听起来非常适合topic exchange

答案 1 :(得分:0)

请看: https://www.rabbitmq.com/tutorials/tutorial-two-java.html

Section" Round-robin dispatching"

您必须设置参数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);
    }
  }
};