微服务中,消息队列要单独拆一个服务进行消费吗

查看 192|回复 11
作者:simonlu9   
如题,有两个单体项目,一个是管理后台,一个是接口服务,有一个子模块群组消息队列,管理后台应用和接口都引用了,现在是同一个消费组,同一个消费者,因为不能重复消费,消费的时候进行轮询,现在的问题是
[ol]
  • 如果接口部署了多实例,同一个消费者会争夺同一个消息进行处理,浪费了大量线程资源,也不能提高消费效率
  • 如果消费者的代码更改了,有时候没有更新到位,接口更新了,可能管理后台没更新,可能消费逻辑又不一样
    [/ol]
    大家是否会碰到这种问题,docker 多实例部署会考虑定时任务,消息队列,在多个容器运行的情况吗,
    定时任务已经通过 xxl-job 去解决这个问题,但消息队列不知道怎么处理,望赐教

    队列, 同一个, 消费, 后台

  • wangxin3   
    分成两个项目就意味着每次要打开两个 idea ,分支要高俩,发板要搞俩等等,可以先搞在一起,但是模块分开,后面请求量上来可以单独拆分保证稳定性可靠性
    mooyo   
    具体什么消息队列呢,rabbitmq 绑定在同一个队列上的消费者组是不会重复消费的
    kafka 也是同理,消费者配置为同一个消费者组也是不会重复消费的
    dolorain   
    前司分开了,现司没分开。感觉没区别。
    simonlu9
    OP
      
    看体量多大了,小打小闹肯定没必要了
    koloonps   
    @199808lanlan1111 现在就是同一个项目的,只是不同 application ,就消费队列这个问题不好处理,能不能中心化
    simonlu9
    OP
      
    @199808lanlan1111 没审题 说错了,但 op 的问题我只看懂了最后一个问题,需不需要考虑多实例问题。
    首先肯定要考虑的,这就是分布式系统的特性。消息队列你不需要考虑,消息会靠队列进行负载均衡,每个实例会会处理一个或者多个队列的消息
    wangxin3   
    “如果接口部署了多实例,同一个消费者会争夺同一个消息进行处理,浪费了大量线程资源,也不能提高消费效率” rabbitmq 在消息没有退回 /超时之前 mq 服务器不会重新推送
    colincat   
    @wangxin3 同一个消费组,是用 redis stream,只是消费者名称都是写死在代码里面,所以多实例,最终还是同时消费一条消息,除非部署多实例的时候消费者名称动态配置
    simonlu9
    OP
      
    @simonlu9 #8 原文:“@wangxin3 同一个消费组,是用 redis stream,只是消费者名称都是写死在代码里面,所以多实例,最终还是同时消费一条消息,除非部署多实例的时候消费者名称动态配置”
    ======
    回复:不理解你说的 可以画个架构图?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部