我现在有个专门消费消息的系统,怎么动态控制,让不同的机器(容器、节点、pod)消费不同的队列呢?

2021-09-26 21:37:27 +08:00
 xiaokongwu

我现在有个专门消费消息的系统,跑在 k8s 集群里。怎么动态控制,让不同的机器(容器、节点、pod )消费不同的队列呢?

逻辑都是通用的,但可能会有很多渠道的消息送过来。不同渠道消息可以用一个队列,也可以用多个队列。

但是不通渠道的消息流量大小也不同,某些渠道的流量可能会比较大,消息也很多,需要更多的节点去处理。

那我想指定某些 pod 去消费某个队列的消息,有什么好办法呢?

比如我这个应用一个创建了 20 个副本,我想让其中 10 副本个消费 A 队列,5 个消费 B 队列,5 个消费 C 队列。

而且这个副本数可以动态控制,随时增加(重启生效也可以)。

1858 次点击
所在节点    程序员
5 条回复
fkdog
2021-09-26 21:45:40 +08:00
把队列名称配置成启动参数。
配置不同的名称参数则启动后消费不同的队列。
参数化的配置还能方便你随时扩容。
xiaokongwu
2021-09-26 22:04:35 +08:00
@fkdog 也是,回头去咨询下运维的同事。能不能在发布的时候指定动态环境变量、jvm 启动参数之类的,把队列的参数放进去
joesonw
2021-09-26 23:16:48 +08:00
有状态的就上 StatefulSet,每个 pod 是一个顺序的 index 。但是与横向扩展相斥。最好是在队列 broker 层面解决。
jorneyr
2021-09-27 09:07:14 +08:00
@xiaokongwu k8s yaml 的 container 里可以使用 env 设置环境变量的 (不同的需求生成 yaml 时在 env 里创建不同的环境变量)。
xiaokongwu
2021-09-27 09:09:42 +08:00
@jorneyr 明白,k8s 还不太熟悉,那配合 jenkins 加个构建参数也就能解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/804467

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX