【问题标题】:basicGet and basicAck in different threads in RabbitMQRabbitMQ 不同线程中的 basicGet 和 basicAck
【发布时间】:2016-03-25 06:30:54
【问题描述】:

我们可以调用basicGet从RabbitMQ获取消息,然后异步处理并在另一个线程中调用basicAck吗?

【问题讨论】:

    标签: java rabbitmq


    【解决方案1】:

    是的,你可以,这也是一种常见的做法。

    【讨论】:

    • 我不能使用 channel.basicConsume("queueName", false, consumer); 对吗?并在与消费者线程不同的线程中发送确认?我到处都读到通道代表工作单元,并且“强烈建议为每个线程使用不同的通道”
    • 人们不会写太多关于 basicGet 的文章。在您的书中,您只是说它可以用来查看队列。您能说出在哪些其他情况下值得使用 basicGet 吗?
    • 澄清一下,我们说的是线程,而不是频道,对吧?我认为如果问题是“频道”而不是“线程”,答案可能会有所不同?
    • 是的,我们正在谈论线程。我可以解释我的情况。我想从队列中读取消息,然后在我自己的线程池中异步处理它们,消费者将通过异步 http 客户端进一步发送消息。所以我会在另一个线程中得到响应(不是我用来从频道读取消息的线程)。在我收到异步 http 回复后,我想发送 Ack。恐怕会导致一些不可预知的错误,因为每个人都坚持使用绑定到一个常量线程的 Channels。
    • @EugeneTo 在您的情况下,最好使用basic_consume。你的情况下使用相同的通道在线程之间发送确认。请在此处阅读:stackoverflow.com/questions/30695375/…
    【解决方案2】:

    是的,你可以,但你必须传递通道引用,否则它将不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2014-12-08
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多