Spring Cloud Stream RabbitMQ 延迟消息实现

在rabbitmq中不存在延时队列,但是我们可以通过设置消息的过期时间和死信队列来模拟出延时队列。消费者监听死信交换器绑定的队列,而不要监听消息发送的队列。

消息会进入死信队列的情况:

  1. 消息被拒绝(Basic.Reject或Basic.Nack)并且设置 requeue 参数的值为 false
  2. 消息过期了
  3. 队列达到最大的长度

我们使用第二种方式实现延时队列

如何设置过期时间:

在 rabbitmq 中存在2种方可设置消息的过期时间,第一种通过对队列进行设置,这种设置后,该队列中所有的消息都存在相同的过期时间,第二种通过对消息本身进行设置,那么每条消息的过期时间都不一样。如果同时使用这2种方法,那么以过期时间小的那个数值为准。当消息达到过期时间还没有被消费,那么那个消息就成为了一个 死信 消息。

    队列设置:在队列申明的时候使用 x-message-ttl 参数,单位为 毫秒

    单个消息设置:是设置消息属性的 expiration 参数的值,单位为 毫秒
 

配置

spring:
	cloud:
	    stream:
              #RabbitMQ服务器地址配置
	      binders:
	        windrabbit:
	          type: rabbit
	          environment:
	            spring:
	              rabbitmq:
	                addresses: localhost
	                port: 15672
	            

你可能感兴趣的:(spring,cloud,rabbitmq,队列,spring)