目录
1.1、pom依赖引入
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.3</version>
</dependency>
1.2、生产者配置
package com.zdxlz.rocketmq;
import com.alibaba.fastjson.JSON;
import groovy.util.logging.Slf4j;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@Slf4j
public class RocketMQProduce {
private static final Logger log = LoggerFactory.getLogger(RocketMQProduce.class);
@Resource
private RocketMQTemplate rocketMQTemplate;
/**
* 异步发送
*/
public void asyncSend(String topic, Object message) {
rocketMQTemplate.asyncSend(topic, message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
log.info("异步消息发送成功,message = {}, SendStatus = {}", JSON.toJSONString(message), sendResult.getSendStatus());
}
@Override
public void onException(Throwable e) {
log.error("异步消息发送异常,exception = {}", e.getMessage());
}
});
}
/**
* 顺序发送异步消息
*
* @param topic topic
* @param message 消息体
*/
public void asyncSendMessageOrderly(String topic, Object message, String hashKey) {
rocketMQTemplate.asyncSendOrderly(topic, message, hashKey, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
log.info("异步消息发送成功,message = {}, SendStatus = {}", JSON.toJSONString(message), sendResult.getSendStatus());
}
@Override
public void onException(Throwable e) {
log.error("异步消息发送异常,exception = {}", e.getMessage());
}
});
}
}
1.3、消费者配置
package com.zdxlz.rocketmq;
import org.apache.rocketmq.spring.annotation.ConsumeMode;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@RocketMQMessageListener(
topic = "${rocketmq.workorder-topic:test-topic}",
consumerGroup = "${rocketmq.workorder-group:test-group}",
consumeMode = ConsumeMode.ORDERLY
)
@Component
public class RocketMQConsumer implements RocketMQListener<String> {
private static final Logger log = LoggerFactory.getLogger(RocketMQConsumer.class);
/**
* 消费逻辑
* @param message
*/
@Override
public void onMessage(String message) {
log.info("接受到消息:{}, 处理业务逻辑",message);
}
}
1.4、yml配置文件
# 修改真实的mq地址, 集群就用分号隔开ip:port
# 其它按需配置,或者使用默认
rocketmq:
name-server: *.*.*.*:9999;*.*.*.*:8888
# Producer 配置项
producer:
# 生产者分组
group: test-group
# 发送消息超时时间,单位:毫秒。默认为 3000 。
send-message-timeout: 3000
# 消息压缩阀值,当消息体的大小超过该阀值后,进行消息压缩。默认为 4 * 1024B
compress-message-body-threshold: 4096
# 消息体的最大允许大小。。默认为 4 * 1024 * 1024B
max-message-size: 4194304
# 同步发送消息时,失败重试次数。默认为 2 次。
retry-times-when-send-failed: 2
# 异步发送消息时,失败重试次数。默认为 2 次。
retry-times-when-send-async-failed: 2
# 发送消息给 Broker 时,如果发送失败,是否重试另外一台 Broker 。默认为 false
retry-next-server: false
# Access Key
# access-key:
# Secret Key
# secret-key:
# 是否开启消息轨迹功能。默认为 true 开启。
enable-msg-trace: false
# 自定义消息轨迹的 Topic 。默认为 RMQ_SYS_TRACE_TOPIC
customized-trace-topic: RMQ_SYS_TRACE_TOPIC
workorder-topic: test-topic
workorder-group: test-group
1.5、测试消息发送
package com.zdxlz.rocketmq;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class RocketMQTestController {
@Resource
private RocketMQProduce rocketMQProduce;
@Value("${rocketmq.workorder-topic:test-topic}")
private String TOPIC;
@GetMapping("rocketMQTest")
public String rocketMQTest(@RequestParam String msg){
# 这里的hashKey写死了,一般按message的唯一标识生成唯一key,这样保证相同的key会被发送到同一个队列进行顺序消费
rocketMQProduce.asyncSendMessageOrderly(TOPIC,msg,"12345");
return "success";
}
}
查看控制台日志