spring 兔子监听输出队列或接收
spring rabbit listen output queue or receive
我正在开发一个支持 rabbitmq 的应用程序。所以,我有一个消费者和一个生产者。我需要在两种方式之间做出决定,如何在它们之间建立通信。
第一种方式
public void send(){
//send to consumer and forget
rabbitTemplate.convertAndSend("","routing-key",my object);
//waiting for output queue and messages from consumer
while(true){
//receive something.
if(corellationID==what we need){
//do what we need
break;
}
}
}
第二种方式
public void send(){
//send to consumer and wait for result
Object o=rabbitTemplate.convertSendAndReceive("","routing-key",my object);
}
哪种方式在高负载下工作得更快更稳定?并且可能有另一种更有效的方法来做到这一点。谢谢
第二种方式与第一种方式一样,您必须实现第二种方式已经完成的工作:
- 创建关联 ID
- 维护地图
- 从回复队列中取出消息
- 将回复消息与生产者相关联
- ...
顺便说一句,最有效的方法是没有等待回复的线程。因此以异步方式工作:发送消息的线程可能不是接收回复的线程。 Have a look at the documentation
我正在开发一个支持 rabbitmq 的应用程序。所以,我有一个消费者和一个生产者。我需要在两种方式之间做出决定,如何在它们之间建立通信。
第一种方式
public void send(){
//send to consumer and forget
rabbitTemplate.convertAndSend("","routing-key",my object);
//waiting for output queue and messages from consumer
while(true){
//receive something.
if(corellationID==what we need){
//do what we need
break;
}
}
}
第二种方式
public void send(){
//send to consumer and wait for result
Object o=rabbitTemplate.convertSendAndReceive("","routing-key",my object);
}
哪种方式在高负载下工作得更快更稳定?并且可能有另一种更有效的方法来做到这一点。谢谢
第二种方式与第一种方式一样,您必须实现第二种方式已经完成的工作:
- 创建关联 ID
- 维护地图
- 从回复队列中取出消息
- 将回复消息与生产者相关联
- ...
顺便说一句,最有效的方法是没有等待回复的线程。因此以异步方式工作:发送消息的线程可能不是接收回复的线程。 Have a look at the documentation