参考 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. 利用基于Go Lang的Hugo配合nginx来打造属于自己的纯静态博客系统

    Go lang无疑是目前的当红炸子鸡,极大地提高了后端编程的效率,同时有着极高的性能.借助Go语言我们 可以用同步的方式写出高并发的服务端软件,同时,Go语言也是云原生第一语言,Docker,Kube ...

  2. 【Unity游戏开发】SpriteAtlas与AssetBundle最佳食用方案

    一.简介 在Unity步入2019.4以后,新版的SpriteAtlas日趋完善,已经完全可以在商业项目中使用了.但是纵观网络平台上,许多关于SpriteAtlas的文章还停留在2018的初版时期,其 ...

  3. 理解Tomcat工作原理

    WEB服务器 只要Web上的Server都叫Web Server,但是大家分工不同,解决的问题也不同,所以根据Web Server提供的功能,每个Web Server的名字也会不一样. 按功能分类,W ...

  4. 什么是ResultSet

    概述: 在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表. ResultSet对象维护了一个游标,指向当前的数据行.开始的时候这个游标指向的是第一行. 注意: 如果调用了Re ...

  5. Java学习日报7.24

    package tem; public class Tem { public static void main(String[] args) { // TODO 自动生成的方法存根 //每隔10摄氏度 ...

  6. 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)

    错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL serve 错误1130:主机192.168.1.3& ...

  7. 使用docker制作Mysql镜像

     一.过程说明 通过Dockerfile创建mysql镜像,使用的mysql软件包为mariadb二进制分发版,最终在宿主机启动mysql容器从而能在mysql容器外部访问mysql服务. 宿主机IP ...

  8. Mysql中的语句优化

    1.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我们要重点关注的数据: type列,连接类型.一个好的SQL语句至少要 ...

  9. 手把手教你搭建SSH框架(Eclipse版)

    原文来自公众号[C you again],若需下载完整源码,请在公众号后台回复"ssh". 本期文章详细讲解了SSH(Spring+SpringMVC+Hibernate)框架的搭 ...

  10. 【Flutter】容器类组件之装饰容器

    前言 DecoratedBox可以在其子组件绘制前后绘制一些装饰,例如背景,边框,渐变等. 接口描述 const DecoratedBox({ Key key, // 代表要绘制的装饰 @requir ...