rocketmq学习笔记 六 流程之拉消息
来源:互联网 发布:手办数据库 编辑:程序博客网 时间:2024/05/19 16:34
其实rocketmq的推消息,也是长轮询的方式去拉去消息
拉消息包括 按id拉消息 按key拉消息 按下标拉消息
其实大同小异
流程图
核心代码
DefaultMQPullConsumerImpl
private PullResult pullSyncImpl(MessageQueue mq, String subExpression, long offset, int maxNums, boolean block, long timeout) throws MQClientException, RemotingException, MQBrokerException, InterruptedException { this.makeSureStateOK(); if (null == mq) { throw new MQClientException("mq is null", null); } if (offset < 0) { throw new MQClientException("offset < 0", null); } if (maxNums <= 0) { throw new MQClientException("maxNums <= 0", null); } this.subscriptionAutomatically(mq.getTopic()); int sysFlag = PullSysFlag.buildSysFlag(false, block, true, false); SubscriptionData subscriptionData; try { subscriptionData = FilterAPI.buildSubscriptionData(this.defaultMQPullConsumer.getConsumerGroup(), // mq.getTopic(), subExpression); } catch (Exception e) { throw new MQClientException("parse subscription error", e); } long timeoutMillis = block ? this.defaultMQPullConsumer.getConsumerTimeoutMillisWhenSuspend() : timeout; PullResult pullResult = this.pullAPIWrapper.pullKernelImpl(// mq, // 1 subscriptionData.getSubString(), // 2 0L, // 3 offset, // 4 maxNums, // 5 sysFlag, // 6 0, // 7 this.defaultMQPullConsumer.getBrokerSuspendMaxTimeMillis(), // 8 timeoutMillis, // 9 CommunicationMode.SYNC, // 10 null// 11 ); this.pullAPIWrapper.processPullResult(mq, pullResult, subscriptionData); if (!this.consumeMessageHookList.isEmpty()) { ConsumeMessageContext consumeMessageContext = null; consumeMessageContext = new ConsumeMessageContext(); consumeMessageContext.setConsumerGroup(this.groupName()); consumeMessageContext.setMq(mq); consumeMessageContext.setMsgList(pullResult.getMsgFoundList()); consumeMessageContext.setSuccess(false); this.executeHookBefore(consumeMessageContext); consumeMessageContext.setStatus(ConsumeConcurrentlyStatus.CONSUME_SUCCESS.toString()); consumeMessageContext.setSuccess(true); this.executeHookAfter(consumeMessageContext); } return pullResult; }
0 0
- rocketmq学习笔记 六 流程之拉消息
- rocketmq学习笔记 六 流程之发消息
- rocketmq学习笔记 六 流程之存消息
- rocketmq学习笔记 六 流程之取消息
- rocketmq学习笔记 五 源码之rocketmq-namesrv
- rocketmq学习笔记 五 源码之rocketmq-tools
- rocketmq学习笔记 五 源码之rocketmq-store
- rocketmq学习笔记 五 源码之rocketmq-broker
- rocketmq学习笔记 五 源码之rocketmq-filtersrv
- rocketmq学习笔记 五 源码之rocketmq-remoting
- rocketmq之事物消息
- RocketMQ入门(3)拉取消息
- RocketMQ入门(3)拉取消息
- RocketMQ-- 建议去 slave 拉取消息
- rocketmq学习笔记 二 官方实例<消息过滤>
- rocketmq学习笔记 二 官方实例<消息顺序>
- java学习笔记(六)流程控制之选择语句
- rocketmq consume学习笔记
- 文字溢出处理
- cocos-Lua加载plist文件
- 关于C#委托的一些学习笔记(代码word打的未对齐)
- halcon标定代码注解
- Storm——1、Storm简介与环境搭建
- rocketmq学习笔记 六 流程之拉消息
- gearman的安装与使用示例
- mac下安装软件
- iOS7上leftBarButtonItem无法实现滑动返回的完美解决方案
- 对文件操作的指令
- yii-besic (七)model 的使用
- 数据结构实验之排序七:选课名单
- JPA映射关联关系-双向一对多
- jsp有哪些内置对象,作用分别是什么?