在我们公司中,我们在Go中构建了一个推服务,我们将其放在四台机器上以确保传输速度,当我们需要发送通知时,我们会将消息发送到RabbitMQ,然后推服务将从队列中获取消息,但是有时我们会在那找到只有一台机器收到消息。
这是rabbitMQ使用者的配置:
msgs, err := ch.Consume(
q.Name, // queue
consumerTag, // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
如何设置配置以确保每个使用者都收到相同数量的消息?
最佳答案
RabbitMQ只是将消息发送给订户,而无需检查未确认的消息。要获取fair
和Round-Robin
分发,您可以执行以下操作
QOS
err = ch.Qos(
1, // prefetch count
0, // prefetch size
false, // global
)
msgs, err := ch.Consume(
q.Name, // queue
"", // consumer
false, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
msg.Ack(false)
此模式称为工作队列,这也避免了消息丢失,如果使用者在发送
ack
之前关闭,则这些消息将被重新排队并传递给另一个使用者进行处理。有关此的更多信息,您可以查看this链接关于go - 如何确保邮件平均发送给所有消费者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50873566/