RocketMQ 延时消息发送示例:基于 Spring Boot 的药品主题消息发送
RocketMQ 延时消息发送示例:基于 Spring Boot 的药品主题消息发送
发送延时消息的目的是在消息发送后延迟一定时间后再被消费者接收。但是,使用 MessageBuilder 发送的代码中使用的 MessageConst.PROPERTY_DELAY_TIME_LEVEL 属性并不能实现真正的延时消息发送,因为 MessageBuilder 并不是 RocketMQ 本身的发送方式,而是 Spring 的消息发送机制。
要发送延时消息,需要使用 RocketMQ 提供的定时消息功能。以下代码示例演示了如何在 Spring Boot 中使用 RocketMQ 的定时消息功能来发送延时消息:
import com.yimeng.shop.core.message.DrugChangeMessage;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @ClassName DrugProducer
* @Author wengjt
* @Date 2021/7/15 17:57
* @Description 药品主题消息发送者
**/
@Service
public class DrugProducer {
private static final String DRUG_CHANGE_TOPIC = 'drugChangeTopic';
private static final String DRUG_CHANGE_TAG = 'drugChange';
/**
* 发送药品信息更改的消息
*/
@Resource
private DefaultMQProducer defaultMQProducer;
public Boolean sendDrugChangeMsg(DrugChangeMessage message, long delayTimeLevel) {
try {
Message msg = new Message(DRUG_CHANGE_TOPIC, DRUG_CHANGE_TAG,
message.getDrugId().getBytes(RemotingHelper.DEFAULT_CHARSET));
// 设置消息的延时级别,单位为秒,具体延时时间根据RocketMQ的配置来确定
msg.setDelayTimeLevel((int) delayTimeLevel);
SendResult sendResult = defaultMQProducer.send(msg);
return sendResult.getSendStatus() == SendStatus.SEND_OK;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
在上述代码中,使用了 RocketMQ 提供的 DefaultMQProducer 来发送消息,并通过设置 Message 的延时级别来实现延时消息的发送。其中,delayTimeLevel 表示延时级别,具体的延时时间根据 RocketMQ 的配置来确定。
说明:
- 延时级别需要根据 RocketMQ 的配置来确定,例如,延时级别 1 表示 5 秒后投递,延时级别 2 表示 10 秒后投递,依此类推。具体配置请参考 RocketMQ 文档。
sendResult.getSendStatus()方法可以用来判断消息是否发送成功。- 上述示例代码中使用了
@Resource注解来注入DefaultMQProducer,您可以根据实际情况使用其他的注入方式。
通过使用 RocketMQ 的定时消息功能,您可以方便地实现各种需要延迟处理的消息场景,例如,订单超时自动取消、优惠券失效提醒等。
原文地址: https://www.cveoy.top/t/topic/phiy 著作权归作者所有。请勿转载和采集!