hyperf icon indicating copy to clipboard operation
hyperf copied to clipboard

add batch create consumer producer

Open Rock-520 opened this issue 5 years ago • 4 comments

增加批量创建消费者 跟批量创建生产者功能: 默认配置: 在nsq 增加 nsqlookup 相关配置文件 (nsqlookup是nsq的集群管理器) 'nsqlookup' => [ 'debug' => "false", //开启调式模式时 不会有日志消息队列进程启动,生产环境需要改为false 'host' =>"127.0.0.1", //nsqlookup host地址 'port' => 4161, 'topic' =>"demoTopic", 'channel' =>"demoChannel", 'name' => "demoConsumer", 'nums' =>2, //每个消费者开几个进程 'url' =>"/NODES", //nsqlookup获取ip 地址的接口路径 'cache_ttl' => "3600",//缓存时间, 单位为秒 'pool' =>[ 'min_connections' => 1, 'max_connections' => 10, 'connect_timeout' => 10.0, 'wait_timeout' => 3.0, 'heartbeat' => -1, 'max_idle_time' => 60.0 ]

],

1、批量创建消费者
当配置nsqlookup debug模式为false 时, 默认会从nsqlookup 上读取到集群的ip 地址后批量启动consumer

2、生产者轮询负载写入 当配置nsqlookup debug模式为false 时,默认会按照nsqlookup 上读取到集群的IP 轮询写入消息。

轮询策略 : 轮询策略是通过redis 来完成,首先把所有IP 列表放入redis key中, 取出IP 列表,发布消息后将此IP从列表中移除, 列表完全清空后重新获取整个列表 再次开始轮询,该IP列表会缓存在redis里,默认是一个小时重新从nsqlookup 获取新的IP 地址 所以该扩展需要依赖Psr\SimpleCache\CacheInterface 组件

生产者跟消费者的创建方法跟原来写法一致

Rock-520 avatar Apr 26 '20 11:04 Rock-520

nsqd 节点上的消息不会复制, 这样看来, producer+consumer 使用通一个 nsqd 节点是最简单的方案, 如果 producer 和 consumer 都可以写所有 nsqd 节点的话

  • producer 需要使用 nsqlookup 的 /nodes 接口获取所有可用 nsqd 节点, 然后选择一个发送消息
  • consumer 需要使用 nsqlookup 的 /lookup 接口获取 topic 对应的所有 nsqd 节点, 然后消费所有 nsqd 节点

daydaygo avatar May 12 '20 02:05 daydaygo

@huangzhhui 这个要不要合并到 3.0 里

还是直接合并到 2.2

limingxinleo avatar Jan 27 '22 08:01 limingxinleo

@huangzhhui 这个要不要合并到 3.0 里

还是直接合并到 2.2

我觉得在 3.0 会更合适,毕竟 BC 了

huangzhhui avatar Feb 03 '22 21:02 huangzhhui

挖坟……这个功能还会继续开发或者合并吗?

suyar avatar Jun 26 '24 11:06 suyar