RocketMQ简单学习和使用
RocketMQ发送消息的三种方式:
同步发送(sync)
在消息完全发送完成之后才返回结果,此方式存在需要同步等待发送结果的时间代价。具有内部重试机制,即在主动声明本次消息发送失败之前,内部实现将重试一定次数,默认为2次。
rocketMQTemplate.syncSend("topic-name", "send sync message !");
异步发送(async)
消息发送后立刻返回,当消息完全完成发送后,会调用回调函数sendCallback来告知发送者本次发送是成功或者失败。异步模式通常用于响应时间敏感业务场景,即承受不了同步发送消息时等待返回的耗时代价。和同步发送一样具有内部重试机制。
rocketMQTemplate.asyncSend("topic-name", "send async message!", new SendCallback();
直接发送 (one-way)
发送端发送完消息后会立即返回,不会等待来自broker的ack来告知本次消息发送是否完全完成发送。吞吐量很大,存在消息丢失的风险,所以其适用于不重要的消息发送,比如日志收集。
rocketMQTemplate.sendOneWay("topic-name", "message");
RocketMQ使用:
发送消息代码:
@Service
public class RocketMqService {
@Resource
private RocketMQTemplate rocketMQTemplate;
// 指定topic的同时,设置tag值,以便消费端可以根据tag值进行选择性消费
SubscribeMessage msg = new SubscriberMessage();
rocketMQTemplate.syncSend(msg.getTopic()+ ":" +msg.getTags(), msg);
}
监听消息代码:
@Service
@RocketMQMessageListener(topic = "${rocketmq.topic}",
consumerGroup = "${rocketmq.group}", selectorExpression="${rocketmq. selectorExpression}")
public class CcuMessageListener implements RocketMQListener<CcuMessage> {
@Override
public void onMessage(CcuMessage message) {
String msgBody = new String(message.getBody());
}
}
RocketMQMessageListener注解默认selectorExpression为*,表示接收当前Topic下的所有数据。