使用Mq实现延时队列
在实际的应用开发中,下游系统并不需要立即处理上游系统的mq,但是又不可能将消息阻塞在上有系统中。且这两个系统之间又没有接口提供出来。这个时候就需要通过Mq的死信队列来实现一个延时效果
简介
由于Mq的发送方不支持延迟发送(目前的新版本可以使用插件来支持,但是可能由于公司的其他限制,导致无法升级),这时候就需要使用Mq的死信队列来实现延时队列
一般情况下,Mq的发送流程如下:
在实际的应用开发中,下游系统并不需要立即处理上游系统的mq,但是又不可能将消息阻塞在上有系统中。且这两个系统之间又没有接口提供出来。这个时候就需要通过Mq的死信队列来实现一个延时效果
由于Mq的发送方不支持延迟发送(目前的新版本可以使用插件来支持,但是可能由于公司的其他限制,导致无法升级),这时候就需要使用Mq的死信队列来实现延时队列
一般情况下,Mq的发送流程如下:
当消费段接收到一个消息之后,会进行消费的处理。假如在业务中发现该消息是一个错误的消息,那么很显然业务方会直接拒绝此条消息。
拒绝消息一般在消费端调用reject
或者neck
,这两个Api的作用分别是:一个可以批量消息,一个则只是每一次处理一条
rabbitmq是目前使用最多的一个消息中间件,配合微服务的使用可以使业务模块化,便于之后的维护。同时使用rabbitmq可以将许多业务异步化,提高系统的性能。
但是在使用rabbitmq 的时候需要注意点就是到底是生产者
来建立队列和交换机还是由消费者
来建立交换机和队列。一般的情况是由消费者来建立队列,但是假如消费者挂掉了,导致生产者发出的消息被交换机路由到了一个不存在的队列,那么此时 rabbitmq会忽略该条消息。所以对于重要的消息。即不允许该消息丢失,那么此时最好是由生产者和消费者一起船创建一个队列。