写在前面
作者一直想深入的去研究一款消息队列MQ,例如 延迟消费,广播消息,失败重试等机制.
奈何市面上的MQ中间件太多了,如kafka,activeMQ,rocketMQ....所以也一直在纠结该以哪款为入手点,对新人友好?
想起作者曾深入的研究了xuxueli大佬的分布式调度系统(XXL-JOB),然后进入XXL社区,刚好发现了的另一个开源项目,即分布式消息队列(XXL-MQ).
简而言之四个字,以小见大,懂得都懂
突发奇想
今日灵光乍现,如果MQ消费端的部署模式如果是以下形式,会造成什么后果呢?
即消费端是单机部署,但是内部topic的消费方法却有多个,如methdA(),methodB(),methodC()
@topic=test
methodA:(方法A消费)
@topic=test
methodB:(方法B消费)
@topic=test
methodC:(方法C消费)
个人思考
1 如果我往队列发送一条消息hello world 那么methodA,methodB,methodC 三个方法都会执行吗?,即消息只能被消费一次?
2 这样会保证消息的顺序性消费吗?即methodA-->methodB-->methodC 这样的消费过程?
3 这种部署模式一般允许吗?或者规范这样做吗?
实际操作验证
1 启动一个单机消费端,但是对于topic=topic_1的消费实现方法写了两个,DemoAMqConsumer,DemoBMqConsumer
2 向topic=topic_1 顺序性发送五条消息测试消费1,测试消费2,测试消费3,测试消费4,测试消费5,来看一下具体消费情况,如下图
问题解答
1 一条消息,只会被其中一个方法执行消费,
(ps底层通过数据库乐观锁进行,如methodA正消费消息时,会将消息status更新成 消费中,对于methodB,methodC来说不可消费)
2 不可保证消息的顺序性
(ps methodA,methodB,methodC 底层会有三个对应的线程去不断轮询获取MQ中心消息,线程存在竞争关系,因为导致不是顺序性,或者说是无序的)
3 个人觉得这种模式一般不允许,否则会造成问题1,2,编码不规范等,属实是骚操作了!