我已经找到了解决问题的方法,但想知道是否有更清洁的方法。
我的架构由多个服务组成,通过Rabbitmq代理发送消息。
有些工作人员会使用这些消息并从事后台工作。
问题在于,我希望能够创建不同类型的工作人员,所有人都使用相同的服务,并且能够让几个相同类型的工人通过循环来获得工作。
为此,消息由服务以pub / sub方式发布,并由在专用于一组worker的工作队列中重新分发消息的进程使用。
这样做有更优雅的方式吗?
很抱歉,如果说明不明确,我会对其进行编辑。
谢谢!
(我可以在服务中为每个工作者创建一个队列,但是使用我的解决方案,我可以根据需要订阅,而无需触及任何代码)
答案 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);
}
}
};