可以对所有goroutine使用一个RabbitMQ通道吗?

时间:2019-02-03 14:27:24

标签: go rabbitmq amqp channel goroutine

我正在与Rabbitmq队列进行消息发布和接收。 我计划使用一个Rabbitmq通道发布消息,并使用一个Rabbitmq通道获取消息,但我也希望代码是异步的,是否是在多个goroutine中使用一个Rabbitmq通道的正确方法?

2 个答案:

答案 0 :(得分:2)

我不是golang专家,因为我每天都会在.Net驱动程序中使用RabbitMq。 .Net驱动程序 channels (封装与队列/交换和消息发布/订阅的交互的抽象)与golang RabbitMq channels 非常相似,因此我认为我的回答可以为您提供帮助。 虽然连接在设计上是可安全运行的,并且应该在线程之间共享,但通道却不是:因此,如果可以运行不同的异步goroutine在不同的线程中(这取决于您:我不知道golang运行时如何工作),您不应在它们之间共享相同的通道实例。 希望对您有所帮助。

答案 1 :(得分:1)

当我在多个goroutine中仅使用一个通道时,出现错误UNEXPECTED_FRAME。 本文https://www.cloudamqp.com/blog/2018-01-19-part4-rabbitmq-13-common-errors.html有很好的技巧,有关这种情况,请参见3项。