配置
配置pom
在
发送方与接收方
首先需要导入rocketMQ
的坐标,注意版本号,在我的测试中,导入的坐标为:
<!--导入rocketMQ-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
配置application.properties
在这里可以对
rocketMQ
进行配置,有多种设置,例如每种消息的topic,tag
等,这往往需要根据业务的需要进行配置,这样在这里进行配置后,就可以实现解耦;我们首先需要将rocket服务器的nameServer地址配置上来
(前提是确保rocketMQ服务启动)
rocketmq.name-server=47.98.144.17:9876 # 根据具体配置来,这里我使用的是阿里云的服务器
简单测试
在消息发送方
@SpringBootTest(classes = {DemoApplication.class})
class DemoApplicationTests {
@Test
void contextLoads() {
}
//注入RocketTemplate
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Test
public void test1(){
rocketMQTemplate.convertAndSend("springboot-mq","hello springboot rocketmq");//发送的topic为`springboot-mq
}
}
在消息的接受方
@Component
@RocketMQMessageListener(topic = "springboot-mq",consumerGroup = "springboot-mq-consumer-1")//指定监听的topic,这里可以在配置文件中配置
public class Consumer implements RocketMQListener<String> {//实现监听器
@Override
public void onMessage(String message) { //进行监听,获取消息
System.out.println("RecieveMessage"+message);
}
}
监控平台查看
2020-05-24 11:38:51.329 INFO 7712 --- [ main] a.r.s.s.DefaultRocketMQListenerContainer : running container: DefaultRocketMQListenerContainer{consumerGroup='springboot-mq-consumer-1', nameServer='47.98.144.17:9876', topic='springboot-mq', consumeMode=CONCURRENTLY, selectorType=TAG, selectorExpression='*', messageModel=CLUSTERING}
复杂测试
发送方
配置文件
mq.test.consumer.topic = base
mq.test.consumer.tag = test
发送代码
package com.example.demo;
import com.alibaba.fastjson.JSON;
import com.example.demo.pojo.User;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest(classes = {DemoApplication.class})
class DemoApplicationTests {
//注入topic
@Value("${mq.test.consumer.topic}")
private String topic;
//注入tag
@Value("${mq.test.consumer.tag}")
private String tag;
@Test
void contextLoads() {
}
//注入RocketTemplate
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Test
public void test1(){
//构造发阿松的信息
User user = new User("周健",123);
//构造发送的信息
Message message = new Message(topic,tag, JSON.toJSONString(user).getBytes());
try {
//尝试发送消息
rocketMQTemplate.getProducer().send(message);
} catch (MQClientException e) {
e.printStackTrace();
} catch (RemotingException e) {
e.printStackTrace();
} catch (MQBrokerException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在监控端
发送端
配置文件
# 监听的消息
mq.test.consumer.topic = base
mq.test.consumer.tag = test
mq.test.consumer.group.name=order_orderTopic_cancel_group
发送端
package com.example.listener.mq;
import com.alibaba.fastjson.JSON;
import com.example.listener.pojo.User;
import org.apache.logging.log4j.message.Message;
import org.apache.rocketmq.client.consumer.listener.MessageListener;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/5/25 0025 10:12
*/
@Component
//配置监听的消息
@RocketMQMessageListener(topic="${mq.test.consumer.topic}",consumerGroup = "${mq.test.consumer.group.name}",messageModel = MessageModel.BROADCASTING)
public class ConsumerMessage implements RocketMQListener<MessageExt>{
@Override
public void onMessage(MessageExt message) {
//1. 解析消息内容
String body = null;
try {
body = new String(message .getBody(), "UTF-8");
//使用JSON解析消息
User user = JSON.parseObject(body,User.class);
System.out.println(user);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}