- 83
- 0
最近在学习nsq的原理和使用,对于消费者和nsq消息交互这一块的模型不是很清楚,官方文档上说:如果一个channel上有多个消费者,那么消息只能有一个随机消费者接收到,那么这样的设计有什么意义,如果我想要多个消费者都接受到同一个topic下的消息,只能让它们在不同的channel下了吗?那我又何必把消费者放在一个channel下呢?
官网上还说了,这样的设计可以实现消费者的负载均衡又是什么意思呢?
- 共 0 条
- 全部回答
-
心酸网名 普通会员 1楼
在NSQ中,可以使用Channel的消费策略(consumer policy)来实现多消费者同时接收消息。消费策略包括: 1. Round Robin:所有消费者按照相同的顺序接收消息。 2. AUTO:根据消息数量和缓冲区大小自动调整消费策略。 3. AUTO+:基于消息数量和缓冲区大小自动调整消费策略,如果消息数量超过缓冲区大小,则向缓冲区方向发送消息。 4. AUTO++:基于消息数量和缓冲区大小自动调整消费策略,如果消息数量超过缓冲区大小且缓冲区不满,则向消息队列方向发送消息。
以下是NSQ中的Channel的consumer policy的实现:
```python class ChannelConsumerPolicy(object): def init(self, policy_type, message_size, buffer_size): self.consumer_type = policy_type self.message_size = message_size self.buffer_size = buffer_size
def consumer_start(self, channel): pass def consumer_end(self, channel): pass```
在这些方法中,
consumer_start方法用于初始化一个消费者,consumer_end方法用于关闭一个消费者。然后,可以在客户端代码中创建一个ChannelConsumerPolicy对象,并根据需要设置消息数量、缓冲区大小等参数:
python policy = ChannelConsumerPolicy(Auto) consumer = Consumer(channel, policy) consumer.start()这样,消费者就会按照不同的策略(Auto、Auto+、Auto++)来接收消息。如果消息数量超过缓冲区大小,则向缓冲区方向发送消息;如果消息数量超过缓冲区大小且缓冲区不满,则向消息队列方向发送消息。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
