Java 在使用基于拉的方式检索消息时,两个使用者能否获得相同的消息集?
因此,我有一个基于单客户端服务器的生态系统,在这个生态系统中,我使用RabbitMQ作为持久中间件 现在,单个消息的流是这样的Java 在使用基于拉的方式检索消息时,两个使用者能否获得相同的消息集?,java,rabbitmq,messaging,Java,Rabbitmq,Messaging,因此,我有一个基于单客户端服务器的生态系统,在这个生态系统中,我使用RabbitMQ作为持久中间件 现在,单个消息的流是这样的 步骤1:客户端A向服务器发送带有目标的消息 在该消息的元数据中设置为客户端B 步骤2:服务器在收到消息后将消息推送到 RabbitMQ并向客户端B发送一个通知,告知他有一些消息 去拿 步骤3:客户机B在收到通知后调用获取消息API 从服务器获取消息 步骤4:在服务器上,从客户端B调用后 使用基于拉的方法从RabbitMQ发送消息 (channel.basicGet(q
- 步骤1:客户端A向服务器发送带有目标的消息 在该消息的元数据中设置为客户端B
- 步骤2:服务器在收到消息后将消息推送到 RabbitMQ并向客户端B发送一个通知,告知他有一些消息 去拿
- 步骤3:客户机B在收到通知后调用获取消息API 从服务器获取消息
- 步骤4:在服务器上,从客户端B调用后
使用基于拉的方法从RabbitMQ发送消息
(
)并交出 信息channel.basicGet(queueName,false)
long currentMessageCount = channel.messageCount(QUEUE_NAME);
while (currentMessageCount-- > 0) {
GetResponse getResponse = channel.basicGet(QUEUE_NAME, false);
if (getResponse == null) {
break;
}
AMQP.BasicProperties props = getResponse.getProps();
Envelope envelope = getResponse.getEnvelope();
int messageCount = getResponse.getMessageCount();
byte[] body = getResponse.getBody();
/*
Do some logic
*/
channel.basicAck(envelope.getDeliveryTag(), false);
}
TIA
basicGet
很少是正确的解决方案。在步骤2中,客户端应该使用RabbitMQ。无需通知消息已准备就绪。RabbitMQ将在消息进入队列后立即将其发送到客户端B。步骤3和步骤4变得不必要
注意:RabbitMQ团队监视并有时只回答有关StackOverflow的问题。我有一个消息传递应用程序。。从服务器获取通知的。。然后它从服务器上拉过来。。。除了基于拉的机制,我别无选择。。否则我应该使用基于推的机制。“除了基于拉的机制之外,我别无选择”——根据你的描述,我不同意。