rabbitMq实现支付消息通知

作支付平台的时候。须要实现接受上游支付消息,通知给下游渠道。 针对下游渠道:要实现 按通知次数 递进 延时通知 下游渠道的支付/签约/代扣的状态html

可参考微信按照 15/15/30/180/1800/1800/1800/1800/3600 单位s 等5个level去通知下游业务端微信

当时采用rabbitmq死信队列实现延时消息的通知当一个消息过时后,会自动变成死信。若是消息绑定了dead letter change,那么消息过时后会被转发到相应队列。从而实现消息延迟消费post

     

     具体能够参考相关文章
性能

 

rabbitmq的延时消息分为两类(https://www.rabbitmq.com/ttl.html)spa

  •     per queue message TTL: 队列中全部消息过时时间同样,能够经过建立mq时候增长 message-ttl。设置过时时间
  •     per message TTL:能够为每一个消息设置过时时间,能够经过发送消息时候增长 expires。设置过时时间

  当两种都设置的时候,过时时间按照小的生效。最开始采用  per message TTL即每一个消息的过时时间不一致。可是发现这样一个现象3d

 

  问题:当delay_queue中的消息的过时时间不一致的时候,rabbitmq处理机制从性能角度考虑按照FIFO,当queue头元素未过时时候,后面即便有已通过期的消息时候,htm

             消息也不会立刻变成死信队列。而被consumer消费,从而致使了delay_queue消息堆积,消息长时间不被消费的现象。blog

 

   解决: 采用相似于rocketmq的解决方案。不能级别的延时放在不一样queue,即delayMs=1000 一个queue,delayMs=2000 一个queue。这样保证同一个queue中的消息过时时间一致。rabbitmq

               从而解决消息堆积问题。  具体实现很简单:队列

    1.  预先建立5个level的queue
    2. 照延时时间,选择对应queue投递便可
相关文章
相关标签/搜索