赞
踩
每天多学一点点~
话不多说,这就开始吧…
平时工作中用到延迟队列的地方还是蛮多的;这里介绍下两种方式;一种通过死信队列转延迟队列;一种直接安装延迟插件实现延迟队列。
以下直接在控制台声明了
步骤:
这种还是比较麻烦的,要声明2个交换机+2个队列
下载对应版本的插件 rabbitmq_delayed_message_exchange-3.7.9.ez,
放入 RabbitMQ安装目录下的 plugins 目录。 进入RabbitMQ安装目录下的 sbin目录,在cmd窗口下执行如下命令使插件生效 如果后面发现在未失效请重启服务再查看
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
声明交换机
@Bean
public CustomExchange delayExchange() {
Map<String, Object> args = new HashMap<>();
args.put("x-delayed-type", "fanout");
return new CustomExchange(MqConst.ORDER_TO_PRODUCT_DELAY_EXCHANGE_NAME, "x-delayed-message", true, false, args);
}
发送消息
public void senderDelayCheckMsg(MsgTxtBo msgTxtBo) {
log.info("发送的消息ID:{}", msgTxtBo.getOrderNo());
//表示为延时消息 加了 _delay 后缀 普通写法
CorrelationData correlationData = new CorrelationData(msgTxtBo.getMsgId() + "_" + msgTxtBo.getOrderNo() + "_delay");
// lamada 表达式写法 延迟 发送
rabbitTemplate.convertAndSend(MqConst.ORDER_TO_PRODUCT_DELAY_EXCHANGE_NAME, MqConst.ORDER_TO_PRODUCT_DELAY_ROUTING_KEY,
msgTxtBo, message -> {
// 设置这个才有用
message.getMessageProperties().setHeader("x-delay", 10000);
return message;
},correlationData);
}
世上无难事,只怕有心人,每天积累一点点,fighting!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。