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

Rabbitmq Subscribe to multiple services but consume it in a round robin fashion

我找到了解决问题的有效方法,但想知道是否有更简洁的方法来解决这个问题。

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

一些工作人员使用这些消息并执行后台作业。

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

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

有没有更优雅的方式来做到这一点?

抱歉,如果解释不清楚,我会编辑它。

谢谢!

(我本可以为服务中的每个工作人员创建一个队列,但使用我的解决方案,我可以在不触及任何代码的情况下尽可能多地订阅)

听起来非常适合 topic exchange

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

节"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);
    }
  }
};