详解RocketMQ中的consumer
上述就是MQ中有关Consumer的类图,下面来介绍一下每个类
1.MQAdmin:底层类,上篇博客已经提过,就不再此重提
2.MQConsumer:Consumer公共的接口,常用的方法如下
如果消费失败的话,消息将会返回到broker中,并且延迟一会消费的时间
void sendMessageBack(final MessageExt msg, final int delayLevel, final String brokerName) throws RemotingException, MQBrokerException, InterruptedException, MQClientException;
3.MQPushConsumer:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消息,Consumer对象立刻回调Listener接口方法
4.MQPullConsumer:Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权由应用控制
在上图中出现了两类的消费者分别是PushConsumer和PullConsumer,下面来看一下
PushConsumer:通过注册监听的方式来消费信息
- <span style="font-family:Comic Sans MS;font-size:18px;">/**
- * @FileName: Consumer.java
- * @Package:com.test
- * @Description: TODO
- * @author: LUCKY
- * @date:2015年12月28日 下午2:43:23
- * @version V1.0
- */
- package com.test;
- import java.util.List;
- import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
- import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
- import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
- import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
- import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
- import com.alibaba.rocketmq.common.message.Message;
- import com.alibaba.rocketmq.common.message.MessageExt;
- /**
- * @ClassName: Consumer
- * @Description: 模拟消费者
- * @author: LUCKY
- * @date:2015年12月28日 下午2:43:23
- */
- public class ConsumerTest {
- public static void main(String[] args) {
- DefaultMQPushConsumer consumer=new DefaultMQPushConsumer("broker-a");
- consumer.setNamesrvAddr("100.66.154.81:9876");
- try {
- // 订阅PushTopic下Tag为push的消息,都订阅消息
- consumer.subscribe("PushTopic", "push");
- // 程序第一次启动从消息队列头获取数据
- consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
- //可以修改每次消费消息的数量,默认设置是每次消费一条
- // consumer.setConsumeMessageBatchMaxSize(10);
- //注册消费的监听
- consumer.registerMessageListener(new MessageListenerConcurrently() {
- //在此监听中消费信息,并返回消费的状态信息
- public ConsumeConcurrentlyStatus consumeMessage(
- List<MessageExt> msgs,
- ConsumeConcurrentlyContext context) {
- // msgs中只收集同一个topic,同一个tag,并且key相同的message
- // 会把不同的消息分别放置到不同的队列中
- for(Message msg:msgs){
- System.out.println(new String(msg.getBody()));
- }
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
- });
- consumer.start();
- Thread.sleep(5000);
- //5秒后挂载消费端消费
- consumer.suspend();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- </span>
PullConsumer:通过拉去的方式来消费消息
- <span style="font-family:Comic Sans MS;font-size:18px;">/**
- * @FileName: Consumer.java
- * @Package:com.test
- * @Description: TODO
- * @author: LUCKY
- * @date:2015年12月28日 下午2:43:23
- * @version V1.0
- */
- package com.test;
- import java.util.Set;
- import com.alibaba.rocketmq.client.consumer.DefaultMQPullConsumer;
- import com.alibaba.rocketmq.client.consumer.MessageQueueListener;
- import com.alibaba.rocketmq.common.message.MessageQueue;
- /**
- * @ClassName: Consumer
- * @Description: 模拟消费者
- * @author: LUCKY
- * @date:2015年12月28日 下午2:43:23
- */
- public class ConsumerPullTest {
- public static void main(String[] args) {
- DefaultMQPullConsumer consumer=new DefaultMQPullConsumer();
- consumer.setNamesrvAddr("100.66.154.81:9876");
- consumer.setConsumerGroup("broker");
- try {
- consumer.start();
- Set<MessageQueue> messageQueues= consumer.fetchSubscribeMessageQueues("PushTopic");
- for(MessageQueue messageQueue:messageQueues){
- System.out.println(messageQueue.getTopic());
- }
- //消息队列的监听
- consumer.registerMessageQueueListener("", new MessageQueueListener() {
- @Override
- //消息队列有改变,就会触发
- public void messageQueueChanged(String topic, Set<MessageQueue> mqAll,
- Set<MessageQueue> mqDivided) {
- // TODO Auto-generated method stub
- }
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- </span>
一般在应用中都会采用push的方法来自动的消费信息
详解RocketMQ中的consumer的更多相关文章
- jQuery:详解jQuery中的事件(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- 【转】详解C#中的反射
原帖链接点这里:详解C#中的反射 反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内 ...
- 详解Webwork中Action 调用的方法
详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...
- 【转】详解JavaScript中的this
ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...
- 深入详解SQL中的Null
深入详解SQL中的Null NULL 在计算机和编程世界中表示的是未知,不确定.虽然中文翻译为 “空”, 但此空(null)非彼空(empty). Null表示的是一种未知状态,未来状态,比如小明兜里 ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
- 详解Objective-C中委托和协议
Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托. AD: ...
- 举例详解Python中的split()函数的使用方法
这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下 函数:sp ...
随机推荐
- 光学字符识别OCR-5 文本切割
经过前面文字定位得到单行的文本区域之后,我们就可以想办法将单行的文本切割为单个的字符了.因为第三步的模型是针对单个的字符建立的,因此这一步也是必须的. 均匀切割 基于方块汉字的假设,事实上最简单的切割 ...
- 剑指offer算法编程题目部分汇总(解法略)
总结一下本书中遇到的大部分面试题.面试题3:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右的递增顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个整数,判断数 ...
- ogre3D学习基础10 -- 键盘控制与鼠标控制(缓冲控制)
带缓冲的鼠标.键盘操作,这里的鼠标.按键事件会被各自的监听器捕获.其中OIS中定义的两个类MouseListener,KeyListener负责对事件的处理.我们需要使用这两个类的接口. 当一个键被按 ...
- 微信小程序开发 -- 设置屏幕亮度
wx.setScreenBrightness(OBJECT) 设置屏幕亮度. OBJECT参数说明: 参数 类型 必填 说明 value Number 是 屏幕亮度值,范围 0~1,0 最暗,1 最亮 ...
- TensorFlow——交互式使用会话:InteractiveSession类
目的是在交互式环境下(如jupyter),手动设定当前会话为默认会话,从而省去每次都要显示地说明sess的繁琐,如:Tensor.ecal(session=sess)或sess.Operation.r ...
- 项目报错 java lang illegalargumentexception error at 0 can t find referenced pointcut
出现error at ::0 can't find referenced pointcut...这样的错误原因是:如果你用的JDK版本是1.6的话,而引用的aspectjrt.jar是spring-2 ...
- Golang遇到的问题记录
1,windows cmd 结束输入问题 func main() { counts := make(map[string]int) countLines(os.Stdin, counts) fmt.P ...
- 【bzoj1449/bzoj2895】[JSOI2009]球队收益/球队预算 费用流
题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 题解 费用流 由于存在一 ...
- fish shell安装和配置
sudo apt-get install fish whereis fish chsh -s /usr/bin/fish 重启:
- HTTP DNS
试用地址 https://www.dnspod.cn/httpdns/demo 哪些人适合使用HTTP DNS 1.希望降低访问延迟.减少跨网访问的资讯.游戏类APP: 2.希望降低连接失败率,提升业 ...