【问题标题】:spring rabbit listen output queue or receivespring rabbit 监听输出队列或接收
【发布时间】:2015-04-22 10:10:31
【问题描述】:

我正在开发一个支持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);

}

在高负载下哪种方式会更快更稳定?并且可能有另一种更有效的方法来做到这一点。谢谢

【问题讨论】:

    标签: java spring rabbitmq


    【解决方案1】:

    第二种方式与第一种方式一样,您必须实现第二种方式已经完成的功能:

    • 创建关联 ID
    • 维护地图
    • 从回复队列中取出消息
    • 将回复消息与生产者关联
    • ...

    顺便说一句,最有效的方法是没有等待回复的线程。因此以异步方式工作:发送消息的线程可能不是接收回复的线程。 Have a look at the documentation

    【讨论】:

    • 谢谢尼古拉斯!换句话说,您是否说第二种方法是实现我需要的结果的最简单方法?谢谢
    • 最简单但不是更有效的方法。这取决于您的负载,请参阅我的编辑
    • 谢谢,但是为什么要启动另一个线程?无论如何,我将不得不等到它完成。我有JSON,需要尽快产生JSON,我可以等待convertSendAndReceive,可以等待线程完成,利润在哪里?
    • 在其他地方计算回复时,能够使用此线程执行其他操作。异步可能不容易实现。你应该平衡你的要求。如果需要,您可以从同步发送和接收和重构开始
    猜你喜欢
    • 2018-10-27
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2019-07-03
    相关资源
    最近更新 更多