RocketMq消息 demo
参考 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的更多相关文章
- 程序重启RocketMQ消息重复消费
最近在调试RocketMQ消息发送与消费的Demo时,发现一个问题:只要重启程序,RocketMQ消息就会重复消费. 那么这是什么原因导致的,又该如何解决呢? 经过一番排查,发现程序使用的Rocket ...
- RocketMq消息队列使用
最近在看消息队列框架 ,alibaba的RocketMQ单机支持1万以上的持久化队列,支持诸多特性, 目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,bin ...
- RocketMQ 消息队列单机部署及使用
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...
- 关于RocketMQ消息消费与重平衡的一些问题探讨
其实最好的学习方式就是互相交流,最近也有跟网友讨论了一些关于 RocketMQ 消息拉取与重平衡的问题,我姑且在这里写下我的一些总结. ## 关于 push 模式下的消息循环拉取问题 之前发表了一篇关 ...
- RocketMQ消息轨迹-设计篇
目录 1.消息轨迹数据格式 2.记录消息轨迹 3.如何存储消息轨迹数据 @(本节目录) RocketMQ消息轨迹主要包含两篇文章:设计篇与源码分析篇,本节将详细介绍RocketMQ消息轨迹-设计相关. ...
- 源码分析RocketMQ消息轨迹
目录 1.发送消息轨迹流程 1.1 DefaultMQProducer构造函数 1.2 SendMessageTraceHookImpl钩子函数 1.3 TraceDispatcher实现原理 2. ...
- rocketMq消息的发送和消息消费
rocketMq消息的发送和消息消费 一.消息推送 public void pushMessage() { String message = "推送消息内容!"; try { De ...
- RocketMQ(消息重发、重复消费、事务、消息模式)
分布式开放消息系统(RocketMQ)的原理与实践 RocketMQ基础:https://github.com/apache/rocketmq/tree/rocketmq-all-4.5.1/docs ...
- RocketMQ消息丢失解决方案:同步刷盘+手动提交
前言 之前我们一起了解了使用RocketMQ事务消息解决生产者发送消息时消息丢失的问题,但使用了事务消息后消息就一定不会丢失了吗,肯定是不能保证的. 因为虽然我们解决了生产者发送消息时候的消息丢失问题 ...
随机推荐
- 通过镜像下载最新Android源码
参考了这两篇博客: http://blog.sina.com.cn/s/blog_70b9730f01016peg.html http://www.cnblogs.com/act262/p/41790 ...
- spring的基础面试内容
1.什么是spring? Spring 是个Java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java ...
- Java源码赏析(六)Class<T> 类
目的 Class 类是每一个程序员都必须了解的,也是使用反射机制的基础. 这篇文章将Class 类的公共方法大致介绍了一遍(省略了安全.枚举.断言.注解相关代码). 代码 package java.l ...
- 中小学生的噩梦:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束
本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互 ...
- exp(cos(t)) - 2*cos(4.*t) + (sin(t./12)).^5;图形
clc; clear all; close all; t = linspace(0,24*pi,1000); r = exp(cos(t)) - 2*cos(4.*t) + (sin(t./12)). ...
- linux中搭建phpmyadmin详细流程
一.phpmyadmin部署流程 1.1介绍 phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库. ...
- Java日常开发的21个坑,你踩过几个?
前言 最近看了极客时间的<Java业务开发常见错误100例>,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~ 1. 六类典型空指针问题 包装类型的空指针问题 级联调用的空 ...
- easyui框架 jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 【转】PANDAS 数据合并与重塑(concat篇)
转自:http://blog.csdn.net/stevenkwong/article/details/52528616 1 concat concat函数是在pandas底下的方法,可以将数据根据不 ...
- JavaDailyReports10_20
1 package varycode; 2 class Grandparent 3 { 4 public Grandparent() 5 { 6 7 System.out.println(" ...