请稍等 ...
×

采纳答案成功!

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

消息队列这种配置用法对吗

看了教程中几种消息队列和 交换机 以及绑定,但在应用中,实际应该这么做吗,外面看了很多教程 几乎都是这么写的,但我总感觉不对,在代码中通过注解写死了绑定什么的,以后要修改不还是要改动代码么

消息处理分3块 ,发送者,接受者,和 中间绑定的分发关系

我感觉应该是,在代码中,一个发送源就唯一对应一个交换机,而一个接受者就唯一对应的一个队列。应用中就这么写死。至于消息如何分发是在后台通过 交换机和队列直接绑定关系来实现的,这样当需要修改的时候就不需要改动代码了。直接后台配置下参数和绑定即可。当然都通过后台修改对于用户可能不友好,所以 通过编程更好的通过代码来实现这些配置。用于定制配置功能。

我觉得关于mq的培训应该 首先帮学生理解队列概念,然后 通过后台如何管理队列交换机的参数 以及他们绑定关系,然后 再通过代码管理这些参数和绑定关系。

而现在这种 在注解上写死的绑定关系其实没什么用 ,甚至有害的

我个人的一点想法,仅供参考

正在回答

1回答

同学你好,非常感谢你把问题写得这么仔细。

首先帮学生理解队列概念,然后 通过后台如何管理队列交换机的参数

因为是SpringCloud教程,重点在应用上,所以对于mq,redis这些中间件的概念是不会多讲的,默认认为学生已经懂了。当然,如果不了解,可以先去学习相关的基础知识哦。


关于是否应该在代码写上绑定,我说下我公司遇到的情况吧。

曾经遇到过,应用上线后mq忘记配置,导致程序出错。另一个原因,服务部署到一个环境,mq全部需要重新配置。后来全部改成绑定的方式。

你说的,如果不写绑定关系,可以灵活配置,不用修改代码。事实上是比较困难的,假如exchange或者queue名字变了,要考虑旧的消息如何消费掉,平滑过渡,兼容。


最后说一下结论,我是不强求写死绑定的,如果能维护好绑定关系,不出错,都是可以的。


0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1503299742 #1
    谢谢 老师回答
    其实我想问的是 如果 通过程序来修改 exchange 和queue 的 绑定关系 而不是直接注解写死了
    回复 有任何疑惑可以回复我~ 2018-06-16 17:28:17
  • 提问者 慕粉1503299742 #2
    我觉得 消息队列正确的用法 应该是一个生产者对应一个 交换机。 一个 消费者对应一个 队列, 至于 分发的逻辑 是通过各种绑定来实现的。
    
    例如 电子商务场景:产生订单的有很多 渠道 比如网站,团购,秒杀,第三方等等。每个 都 对应一个 交换机。产生的订单 数据是类似的 但key 可以是 商品类别加上id 等信息组合。比如 大类.小类.商品id 这种格式
    
    刚开始的时候 只有一个 总仓 订单处理也就一个程序 一个消费者 也就一个队列。 所有交换机都绑定这个队列。这样所有订单都到总仓去了
    
    慢慢生意大了 比如生鲜分出去了个 仓 有单独的处理程序了 也成了个新的队列 这样 在mq 后台 根据key 中大类是生鲜的绑定到新的队列就好了
    
    再过段时间 某次秒杀,预计量比较大。实现准备了个小仓库 把这个秒杀商品预先包好存放在那单独处理了。这时运行个 新的程序 产生个 新的队列 ,这时就将秒杀交换机的 按照key 中的id为此商品的 绑定到新的队列。这样就可以了 而无论是秒杀的其他产品,还是在其他渠道上这个商品订单还是 总仓处理
    
    其实 交换机还可以再绑交换机 多次分发更实现更复杂的逻辑。就是这么绑来绑去,实现 不用改代码就实现了整个信息流随着业务的变迁
    回复 有任何疑惑可以回复我~ 2018-06-16 17:57:29
  • 提问者 慕粉1503299742 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-07-04 12:42:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信