参考 https://blog.csdn.net/asdf08442a/article/details/54882769 整理出来的测试 demo

1、produce 生产者

 1 package com.bwdz.sp.comm.util.test;
2
3 import org.apache.rocketmq.client.exception.MQBrokerException;
4 import org.apache.rocketmq.client.exception.MQClientException;
5 import org.apache.rocketmq.client.producer.DefaultMQProducer;
6 import org.apache.rocketmq.client.producer.SendResult;
7 import org.apache.rocketmq.client.producer.SendStatus;
8 import org.apache.rocketmq.common.message.Message;
9 import org.apache.rocketmq.remoting.exception.RemotingException;
10
11 import java.util.UUID;
12
13 /**
14 * Created by xy on 2018/11/16.
15 */
16 public class SyncProducer {
17 private static DefaultMQProducer producer = null;
18
19 public static void main(String[] args) {
20 System.out.print("[----------]Start\n");
21 int pro_count = 1;
22 if (args.length > 0) {
23 pro_count = Integer.parseInt(args[0]);
24 }
25 boolean result = false;
26 try {
27 ProducerStart();
28 for (int i = 1; i < pro_count; i++) {
29 String msg = "hello rocketmq "+ i+"".toString();
30 SendMessage("qch_20170706", //topic
31 "Tag"+i, //tag
32 "Key"+i, //key
33 msg); //body
34 System.out.print(msg + "\n");
35 }
36 }finally {
37 producer.shutdown();
38 }
39 System.out.print("[----------]Succeed\n");
40 }
41
42 private static boolean ProducerStart() {
43 producer = new DefaultMQProducer("pro_qch_test");
44 producer.setNamesrvAddr("192.168.69.173:9876");
45 producer.setInstanceName(UUID.randomUUID().toString());
46 try {
47 producer.start();
48 } catch(MQClientException e) {
49 e.printStackTrace();
50 return false;
51 }
52 return true;
53 }
54
55 private static boolean SendMessage(String topic,String tag,String key, String str) {
56 Message msg = new Message(topic,tag,key,str.getBytes());
57 try {
58 SendResult result = producer.send(msg);
59 SendStatus status = result.getSendStatus();
60 System.out.println("___________________________SendMessage: "+status.name());
61 } catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) {
62 e.printStackTrace();
63 return false;
64 }
65 return true;
66 }
67 }

2、consumer 消费者

 1 package com.bwdz.sp.comm.util.test;
2
3 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
4 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
5 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
6 import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
7 import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
8 import org.apache.rocketmq.common.message.MessageExt;
9
10 import java.util.List;
11 import java.util.UUID;
12
13 /**
14 * Created by xy on 2018/11/16.
15 */
16 public class ConsumerTest {
17 public static void main(String[] args) {
18 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("con_qch_test");
19 consumer.setInstanceName(UUID.randomUUID().toString());
20 consumer.setConsumeMessageBatchMaxSize(32);
21 consumer.setNamesrvAddr("192.168.69.173:9876");
22 consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
23 consumer.registerMessageListener(new MessageListenerConcurrently() {
24 @Override
25 public ConsumeConcurrentlyStatus consumeMessage(
26 List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
27 for(MessageExt me : list) {
28 if("Tag1".equals(me.getTags())){
29 System.out.println("处理 Tag1 业务");
30 System.out.println(new String(me.getBody()) + "消费成功" + "\n");
31 }else if("Tag2".equals(me.getTags())){
32 System.out.println("处理 Tag2 业务");
33 System.out.println(new String(me.getBody()) + "消费成功" + "\n");
34 }else if("Tag3".equals(me.getTags())){
35 System.out.println("处理 Tag3 业务");
36 System.out.println(new String(me.getBody()) + "消费失败" + "\n");
37 return ConsumeConcurrentlyStatus.RECONSUME_LATER;
38 }else{
39 //consumer.subscribe("qch_20170706", "Tag1||Tag2||Tag3");
40 System.out.println("过滤掉的业务"+ me.getKeys());
41 }
42 }
43 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
44 }
45 });
46 try {
47 consumer.subscribe("qch_20170706", "Tag1||Tag2||Tag3");
48 consumer.start();
49 } catch (Exception e) {
50 e.printStackTrace();
51 }
52 }
53 }

先运行produce,控制台输出结果:

[----------]Start
___________________________SendMessage: SEND_OK
hello rocketmq 1
___________________________SendMessage: SEND_OK
hello rocketmq 2
___________________________SendMessage: SEND_OK
hello rocketmq 3
___________________________SendMessage: SEND_OK
hello rocketmq 4
[----------]Succeed

再运行consumer,控制台输出结果:

注:消息 ”hello rocketmq 4“ 被consumer里47行代码过滤掉了,所以不会被消费;消息 “hello rocket 3” 在消费的时候被指定失败ConsumeConcurrentlyStatus.RECONSUME_LATER,表示消费失败,如果被指定失败,表明此消息下次还可以继续发送到consumer被继续消费处理,其他消息则不会被再一次消费

处理 Tag2 业务
hello rocketmq 2消费成功 处理 Tag3 业务
hello rocketmq 3消费失败 处理 Tag1 业务
hello rocketmq 1消费成功

consumer再次运行,控制台输出结果(直到被指定成功ConsumeConcurrentlyStatus.CONSUME_SUCCESS,Broker服务才不会继续发送消息):

处理 Tag3 业务
hello rocketmq 3消费失败

RocketMq消息 demo的更多相关文章

  1. 程序重启RocketMQ消息重复消费

    最近在调试RocketMQ消息发送与消费的Demo时,发现一个问题:只要重启程序,RocketMQ消息就会重复消费. 那么这是什么原因导致的,又该如何解决呢? 经过一番排查,发现程序使用的Rocket ...

  2. RocketMq消息队列使用

    最近在看消息队列框架 ,alibaba的RocketMQ单机支持1万以上的持久化队列,支持诸多特性, 目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,bin ...

  3. RocketMQ 消息队列单机部署及使用

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...

  4. 关于RocketMQ消息消费与重平衡的一些问题探讨

    其实最好的学习方式就是互相交流,最近也有跟网友讨论了一些关于 RocketMQ 消息拉取与重平衡的问题,我姑且在这里写下我的一些总结. ## 关于 push 模式下的消息循环拉取问题 之前发表了一篇关 ...

  5. RocketMQ消息轨迹-设计篇

    目录 1.消息轨迹数据格式 2.记录消息轨迹 3.如何存储消息轨迹数据 @(本节目录) RocketMQ消息轨迹主要包含两篇文章:设计篇与源码分析篇,本节将详细介绍RocketMQ消息轨迹-设计相关. ...

  6. 源码分析RocketMQ消息轨迹

    目录 1.发送消息轨迹流程 1.1 DefaultMQProducer构造函数 1.2 SendMessageTraceHookImpl钩子函数 1.3 TraceDispatcher实现原理 2. ...

  7. rocketMq消息的发送和消息消费

    rocketMq消息的发送和消息消费 一.消息推送 public void pushMessage() { String message = "推送消息内容!"; try { De ...

  8. RocketMQ(消息重发、重复消费、事务、消息模式)

    分布式开放消息系统(RocketMQ)的原理与实践 RocketMQ基础:https://github.com/apache/rocketmq/tree/rocketmq-all-4.5.1/docs ...

  9. RocketMQ消息丢失解决方案:同步刷盘+手动提交

    前言 之前我们一起了解了使用RocketMQ事务消息解决生产者发送消息时消息丢失的问题,但使用了事务消息后消息就一定不会丢失了吗,肯定是不能保证的. 因为虽然我们解决了生产者发送消息时候的消息丢失问题 ...

随机推荐

  1. (byte & 0xff)操作

    先看一段代码: @Test public void test(){ byte a = -5; byte b = 12; System.out.println(a); System.out.printl ...

  2. js下 Day07、DOM案例

    一.折叠菜单 效果图: 功能思路分析: 功能一:数据渲染 \1. 模拟数据,一级数据为数组套对象的形式,二级数据为数组: \2. 先渲染一级数据,然后再嵌套渲染二级数据(map().join('')) ...

  3. CSRF学习

    前提环境:网站存在CSRF漏洞(也就是过于相信访问请求,只判断了用户是否存在cookie,并未判断请求的发起者) CSRF攻击原理,用户A需要转账,用户A正常向银行网站发送请求登录,登录成功后银行网站 ...

  4. 持久层之 MyBatis: 第三篇 :缓存 And 高级查询

    MyBatis入门到精通3 缓存机制 Mybatis一级缓存测试 Mybatis二级缓存测试 高级查询 表关系说明 一对一查询 一对多查询 多对多查询 缓存机制 正如大多数持久层框架一样,MyBati ...

  5. element ui 左侧导航栏

    <el-menu class="left-menu" :default-active="$route.name" :unique-opened=" ...

  6. 使用NPOI读取Word文档内容并进行修改

    前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...

  7. Dovecot邮件服务器的正确安装方法

    Dovecot邮件服务器的正确安装方法 apt remove dovecot-coredpkg -P dovecot-core sudo apt install dovecot-imapd dovec ...

  8. Flutter低版本迁移到高版本

    记录一次Flutter v1.12.13+hotfix.8 升级到1.22.4(当前最新) 后 ,旧项目的适配过程 工具:Android Studio 4.1.1 1.android 的MainAct ...

  9. 10天,从.Net转Java,并找到月薪2W的工作(三)

    放弃Offer之后,压力一天比一天打 好点的公司,除了技术追根问底,还对你平时代码实践问的很多.比如问你,redis缓存一般设置多大.问你项目内容的细节,业务流程. 集合.锁.Jvm.多线程高并发.微 ...

  10. CentOS7 实战部署tomcat网站服务器

    简介:实战演练tomcat网站服务器的搭建 Tomcat:是一个开源免费的Web应用服务器,性能稳定,是目前比较流行的Web应用服务器   tomcat官网下载: https://tomcat.apa ...