SpringBoot集成RocketMq
RocketMq是一种方便好用的消息中间件,是后端开发者比较熟悉的MQ之一。rocketmq不知生于何年何月,但是可以确定的是由阿里巴巴团队开发一直沿用至今,历经双十一大促销的亿万级流量,稳定可靠,可谓无数开发者居家旅行必备!还不了解的同学可以点击下方充实下: 原来你是这样的RocketMQ
我本机是window环境,Linux大致相同只是服务的启动命令不同
一.创建新项目
像往常一样打开你的开发利器:IDEA 1.先新建一个简单的SpringBoot项目:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.rocketmq</groupId>
<artifactId>rocketmq</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rocketmq</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<rocketmq.version>4.4.0</rocketmq.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- RocketMq客户端相关依赖 -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>${rocketmq.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意:引入的rocketmq依赖的版本需要和你服务器上的版本一致,以免发生不必要的错误。
3.application.peroperties文件配置
server.port=8081
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=localhost:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
二:消息的生产者
注意:正确的引入依赖包
package com.rocketmq.rocketmq.mq.quickstart;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.apache.rocketmq.remoting.exception.RemotingException;
import java.io.UnsupportedEncodingException;
/**
* author wyt 2019-12-06
*/
public class Producer {
public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, InterruptedException, MQBrokerException {
//1.创建消息生产者
DefaultMQProducer defaultMQProducer=new DefaultMQProducer("demo_producer_group");//指定消息发送组
//2.设置Nameser 的地址
defaultMQProducer.setNamesrvAddr("localhost:9876");
//3.开启defaultMQProducer
defaultMQProducer.start();//此处有异常需要抛出
//4.创建新消息
//注意选择 导入这个包的:org.apache.rocketmq.common.message.Message;
//public Message(String topic, String tags, String keys, byte[] body)
//body:就是你需要发送的消息
//RemotingHelper.DEFAULT_CHARSET 设置UTF_8的编码格式
Message message =new Message(
"Topic_Demo",//topic:主题
"Tags_Demo",//tags:标签(主要用于消息过滤作用)
"Keys_1",//消息的唯一值
"hello!".getBytes(RemotingHelper.DEFAULT_CHARSET)); //body:就是你需要发送的消息
//5.发送消息
SendResult result = defaultMQProducer.send(message);
System.out.println("消息发送结果 :"+result);
//6.关闭消息发送对像
defaultMQProducer.shutdown();
}
}
二:消息的消费者
package com.rocketmq.rocketmq.mq.quickstart;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class Consumer {
public static void main(String[] args) throws MQClientException {
// 1.创建一个DefaultMQPushConsumer
DefaultMQPushConsumer defaultMQPushConsumer=new DefaultMQPushConsumer("Demo_Consumer_Group");
// 2.设置NameSerADD地址
defaultMQPushConsumer.setNamesrvAddr("127.0.0.1:9876");
// 3.设置subscribe ,这里要读取主题信息
defaultMQPushConsumer.subscribe(
"Topic_Demo",//指定要消费的消息主题
"Tags_Demo" //过滤规则
);
// 4.创建消息监听MessageListener
// 设置消息拉去上限
defaultMQPushConsumer.setConsumeMessageBatchMaxSize(2);
defaultMQPushConsumer.setMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
// 5.获取消息信息
//迭代消息信息
for (MessageExt mes:list
) {
try {
//获取主题
String Topic=mes.getTopic();
//获取标签
String tags=mes.getTags();
//获取消息
byte[] body=mes.getBody();
String message=new String(body, RemotingHelper.DEFAULT_CHARSET);
System.out.println("Consumer消费信息---topic : "+Topic+"tags : "+tags+" message: "+message);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
//发生消费消息异常 进行从事机制
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
}
// 6.返回消息读取状态
//说明完成消息消费
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 开启消息
defaultMQPushConsumer.start();
}
}
三:开启RocketMq服务
windows 环境下: 找到RocketMQ的安装目录,如果不清楚如何安装点击下方: 先后双击打开mqnamesrv.cmd 和mqbroker.cmd



四:运行测试
启动消息生产者:Producer 启动后如下:消息发送成功

