请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何通过参数配置方法监听队列

在课程中 队列监听函数 是通过一条 @RabbitListener(queues="队列名称") 注解来实现

是很简单,但这队列名称怎么通过 配置参数来实现 比如 在yml 文件中配置 而不是在代码中写死的

这其实是个通用问题 也就是 注解中的这些参数是否可以通过动态配置?

请教了,十分感谢


正在回答 回答被采纳积分+3

1回答

wirechen 2018-07-04 23:19:14

你这个问题其实我也有思考过,尝试用Springboot的@ConfigurationProperties或者@Value注解从yml配置文件中读取数据动态配置,但是像这种情况无法实现(至少我目前不能办到)因为,用读取自定义yml配置的方法都是项目启动后注入到spring容器由spring管理创建(运行时读取配置),而 @RabbitListener(queues="队列名称")这种情况是程序编译时就要固定的,所以无法做到动态读取配置。如果想要做统一配置可以创建一个全局常量类。个人见解,望采纳

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1503299742 #1
    肯定不能全局配置啊 既然是微服务 一个程序的不同实例 如果需要监听不同的队列 就没办法 难不成就为改一个参数就算一个新的程序.
    
    注解方式也许走不通 不用注解的话如何用程序 绑定一个队列到一个方法呢?
    回复 有任何疑惑可以回复我~ 2018-07-06 11:48:49
  • wirechen 回复 提问者 慕粉1503299742 #2
    同学你都想到了微服务的部署,一个服务部署多个实例,那你每个实例是不是应该一模一样?举个反例吧,你如果每个实例监听的消息队列不一样(每个实例单独监听一个消息队列),那你队列生产者那边的服务是不是还要制定策略选择多个队列中的其中一个发送消息?才能保证一条消息只能被一个消费者消费(非广播模式)
    回复 有任何疑惑可以回复我~ 2018-07-08 10:06:54
  • 提问者 慕粉1503299742 回复 wirechen #3
    生产者只管把消息发送到 交换机 至于发送打那个队列是交换机的配置.想象下这个电商场景,订单产生是消息生产者,所有 订单 都发给一个交换机.路由关键字,是" 商品类别:商品编号"这种组合,开始的时候所有的消息都配置到"总仓"这个队列,总仓有个 订单处理程序 绑定的队列是 "总仓"这个队列.所有订单都由总仓这个 订单处理程序处理了,现在 由于业务发展, 生鲜要单独处理了.其实处理程序还是相同的.其实就是原来的 订单处理程序多了一个实例而已.当然如果还是原来的队列,可以起到负载均衡,但有很多情况希望单独一个类别.这就需要绑定一个新的队列名 比如生鲜. 然后 改变交换机设置 把 key 中类别为生鲜的 发到新的队列即可,这种情况 总不能 为了一个队列名称参数的改变还要维护多一套程序代码吧
    回复 有任何疑惑可以回复我~ 2018-07-12 14:42:27
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信