RocketMQ简单学习和使用

RocketMQ发送消息的三种方式:

同步发送(sync

在消息完全发送完成之后才返回结果,此方式存在需要同步等待发送结果的时间代价。具有内部重试机制,即在主动声明本次消息发送失败之前,内部实现将重试一定次数,默认为2次。

rocketMQTemplate.syncSend("topic-name", "send sync message !");

 

异步发送(async

消息发送后立刻返回,当消息完全完成发送后,会调用回调函数sendCallback来告知发送者本次发送是成功或者失败。异步模式通常用于响应时间敏感业务场景,即承受不了同步发送消息时等待返回的耗时代价。和同步发送一样具有内部重试机制。

rocketMQTemplate.asyncSend("topic-name", "send async message!", new SendCallback();

 

直接发送 one-way

发送端发送完消息后会立即返回,不会等待来自brokerack来告知本次消息发送是否完全完成发送。吞吐量很大,存在消息丢失的风险,所以其适用于不重要的消息发送,比如日志收集。

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下的所有数据。

 

 

posted @ 2022-01-12 16:58  都是好事  阅读(1072)  评论(0编辑  收藏  举报