【RocketMQ】SpringBoot集成RocketMQ
文章目录
1. 准备工作
1.1 引依赖
引入rocketmq依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
1.2 yml配置
rocketmq:
name-server: 192.168.101.65:9876
2. API
参考文档:原生API
2.1 同步消息
生产者:
//同步消息
SendResult sendResult = rocketMQTemplate.syncSend("bootTestTopic", "我是一个boot消息");
消费者:
@Component
@RocketMQMessageListener(topic = "bootTestTopic", consumerGroup = "boot-test-consumer-group")
public class ABootSimpleMsgListener implements RocketMQListener<MessageExt> {
/**
* 没有报错,就签收
* 如果没有报错,就是拒收 就会重试
*
* @param messageExt
*/
@Override
public void onMessage(MessageExt messageExt) {
System.out.println(new String(messageExt.getBody()));
}
}
2.2 异步消息
生产者:
//异步消息
rocketMQTemplate.asyncSend("bootTestTopic", "我是一个boot异步消息", new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("成功");
}
@Override
public void onException(Throwable throwable) {
System.out.println("失败");
}
});
2.3 单向消息
生产者:
//单向消息
rocketMQTemplate.sendOneWay("bootOnewayTopic", "我是一个单向消息");
2.4 延时消息
3000ms为连接mq的超时时间,延时等级为2.
//延迟消息
Message<String> msg = MessageBuilder.withPayload("我是一个延迟消息").build();
rocketMQTemplate.syncSend("bootMsTopic", msg, 3000, 2);
2.5 顺序消息
生产者:
//顺序消息,将一组消息投递到同一个队列,消费者单线程消费
List<MsgModel> msgModels = Arrays.asList(
new MsgModel("1", 1, "下单"),
new MsgModel("1", 1, "短信"),
new MsgModel("1", 1, "物流"),
new MsgModel("2", 2, "下单"),
new MsgModel("2", 2, "短信"),
new MsgModel("2", 2, "物流")
);
msgModels.forEach(msgModel -> {
//发送一般都是以json的格式发送
rocketMQTemplate.syncSendOrderly("bootOrderlyTopic", JSON.toJSONString(msgModel), msgModel.getOrderSn());
});
消费者:
@Component
@RocketMQMessageListener(topic = "bootOrderlyTopic",
consumerGroup = "boot-orderly-consumer-group",
consumeMode = ConsumeMode.ORDERLY,//消费模式-顺序模式
maxReconsumeTimes = 5//消费重试次数
)
public class BOrderlyMsgListener implements RocketMQListener<MessageExt> {
/**
* 没有报错,就签收
* 如果没有报错,就是拒收 就会重试
*
* @param messageExt
*/
@Override
public void onMessage(MessageExt messageExt) {
MsgModel msgModel = JSON.parseObject(new String(messageExt.getBody()), MsgModel.class);
System.out.println(msgModel);
}
}
2.6 带tag的消息
生产者:
//topic:tag
rocketMQTemplate.syncSend("bootTagTopic:tagA", "我是一个带tag的消息");
消费者:
@Component
@RocketMQMessageListener(topic = "bootTagTopic",
consumerGroup = "boot-tag-consumer-group",
selectorType = SelectorType.TAG,//tah过滤模式
selectorExpression = "tagA || tagB"
)
public class CTagMsgListener implements RocketMQListener<MessageExt> {
/**
* 没有报错,就签收
* 如果没有报错,就是拒收 就会重试
*
* @param messageExt
*/
@Override
public void onMessage(MessageExt messageExt) {
System.out.println(new String(messageExt.getBody()));
}
}
2.7 带key的消息
生产者:
//key是携带在消息头上的
Message<String> message = MessageBuilder.withPayload("我是一个带key的消息")
.setHeader(RocketMQHeaders.KEYS, "key")
.build();
rocketMQTemplate.syncSend("bootKeyTopic", message);
消费者:
@Component
@RocketMQMessageListener(topic = "bootKeyTopic", consumerGroup = "boot-key-consumer-group")
public class DKeyMsgListener implements RocketMQListener<MessageExt> {
/**
* 没有报错,就签收
* 如果没有报错,就是拒收 就会重试
*
* @param messageExt
*/
@Override
public void onMessage(MessageExt messageExt) {
System.out.println(new String(messageExt.getBody())+"\tkey为:"+messageExt.getKeys());
}
}