最近开发的业务有使用到rocketMq技术,整体过程及拓展知识记录一下以便学习。
项目流程
在项目中使用的话,大概是分为两层,一层为调用层也可以认为生产者,还有一层为执行层可以为消费者。因为我们的消费者是部署在多台服务器上。所以为了并发消费,提高消费效率,就使用rocketMq向各消费者发送需要消费的消息。每台消费者收到消息去执行自己的一部分业务。
上学习代码(简略代码)
生产者:
@Autowired
RocketMQTemplate rocketMQTemplate;
public void send(){
//...省略 在数据库为未执行的业务添加未执行状态0
rocketMQTemplate.covertAndSend("tipic:tag",参数体)
}
rocketMQTemplate是用于发送消息到RocketMQ的模板类。convertAndSend方法用于将消息对象进行转换,并发送到指定的RocketMQ主题(Topic)中。
注意 在这里第一个参数可以只写主题Topic
,或者是主题:tag
,只写主体的话,消费者只需要订阅相应的Topic就可以,如果带Tag,那么消费者也需要对应上相应的Tag才能获取到消息。
rocketMqTemplate.convertAndSend中的参数
destination
:目标消息主题或者队列的名称。
payload
:要发送的消息内容,可以是任意 Java 对象,RocketMqTemplate
会自动将其序列化为消息内容。
messagePostProcessor
:消息后处理器,可以对消息进行进一步的处理操作,例如设置消息属性、延迟发送等。
sendCallback
:发送消息的回调接口,用于异步发送消息后的处理。
timeout
:发送消息的超时时间,单位为毫秒。
delayLevel
:消息的延迟级别,用于设置消息的延迟发送时间。
mqMessageConverter
:消息转换器,用于将 Java 对象转换为 RocketMQ 的 Message 对象。
示例:
rocketMqTemplate.convertAndSend("myTopic", "Hello, RocketMQ!", message -> {
// 设置消息属性
message.putUserProperty("key", "value");
return message;
}, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("消息发送成功:" + sendResult);
}
@Override
public void onException(Throwable e) {
System.err.println("消息发送失败:" + e.getMessage());
}
}, 3000, 3<