首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多队列订阅的GO lang NATS队列

使用多队列订阅的GO lang NATS队列
EN

Stack Overflow用户
提问于 2017-03-20 11:33:22
回答 1查看 1.8K关注 0票数 2

我正在创建NATS go lang队列订阅服务器客户端,如下所示,

代码语言:javascript
复制
nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) {
        log.Printf("Message :%s", string(msg.Data))
})

因此,每当我向"foo“主题发布任何消息时,它都会收到一些时间,而有些时候则不会。

例如,假设我向上面的"foo“主题发送了10条消息,那么它将收到最多2或3条消息。

我的要求如下,

  • 应该有队列订阅。
  • 应处理所有输入事件。
  • 如何在并发模式下实现队列订阅。

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

发布于 2017-04-04 23:12:15

如果您以相同的名称启动多个队列订阅者(在您的示例my_queue中),那么在"foo“上发布的消息只会发送给其中一个队列订阅者。

从您的声明中,我不确定您是否暗示队列订阅服务器有时遗漏消息。记住一件事: NATS中没有持久性( NATS流中有)。因此,如果在创建订阅服务器之前发布消息,并且在该主题上没有其他订阅服务器,则消息将丢失。

如果您从一个连接尝试并启动队列订阅服务器,然后在同一个应用程序中从另一个连接发送消息,则可能在服务器开始接收消息之前没有注册队列订阅(同样,如果您正在使用两个连接)。如果是这样的话,您需要在创建订阅之后并在开始发送:nc.Flush()之前刷新连接。

最后,在并发模式下使用队列订阅服务器没有什么特别之处。这就是它们的目的:为属于同一组的订阅者对同一主题的消息进行负载平衡处理。如果要在同一个应用程序中创建多个队列订阅服务器,唯一需要注意的是要么不共享消息处理程序,要么使用锁定,因为如果消息到达得足够快,则会同时调用消息处理程序。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42902515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档