RabbitMQ实现延时发送消息

RabbitMQ实现延时发送消息

思路

通过设置死信队列A实现延时,设置超时时间,当消息超时后会转发到设置好的交换机,并通过设置的routing-key放入队列B。消费者消费队列B中的消息,队列A的超时时间就是队列B延时时间。

发送消息
routing-key
超时
routing-key
发送消息
生产者
死信交换机
死信队列A
正常交换机
正常队列B
消费者

java代码示例

@Autowired
RabbitAdmin rabbitAdmin;
@Autowired
RabbitTemplate rabbitTemplate;

private void sendDelayMassage(Object message){
	Map<String, Object> arguments = new HashMap<String,Object>();
	arguments.put("x-message-ttl", (Long)600000);//设置超时时间,以毫秒为单位,这里设置10分钟
	arguments.put("x-dead-letter-exchange","roundExchange");//设置死信交换机,超时后转发到该交换机
	arguments.put("x-dead-letter-routing-key","roundRoutingKey");//设置死信routing-key,绑定到对应队列
	sendMassage(message,"delayExchangeName","delayQueueName", "delayRoutingKey",true,true,arguments);
}

public void sendMassage(Object message,String exchangeName, String queueName, String routingKey,Boolean durableQueue,Boolean durableMessage,Map<String, Object> arguments){
     rabbitAdmin.declareExchange(new DirectExchange(exchangeName, durableQueue, false));
     rabbitAdmin.declareQueue(new org.springframework.amqp.core.Queue(queueName, durableQueue,false,false, arguments));
     rabbitAdmin.declareBinding(new Binding(queueName, Binding.DestinationType.QUEUE,
             exchangeName, queueName, new HashMap()));
     MessageProperties messageProperties = new MessageProperties();
     messageProperties.setDeliveryMode(durableMessage ? MessageDeliveryMode.PERSISTENT : MessageDeliveryMode.NON_PERSISTENT);//设置消息是否持久化
     Message m = new Message(JSONObject.toJSONBytes(message), messageProperties);
     rabbitTemplate.send(exchangeName, routingKey, m);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值