介绍
本篇我们先来介绍一下Machinery一个重要的接口---Broker。故名思义,这个接口是用来实现消息的接收和发送。Machinery提供了很多种实现方式,如amqp,redis,eager,grpcpubsub,sqs等。这里,我们简单介绍amqp的实现方式
Broker接口
amqp实现
amqp broker结构
如下图,Broker继承了common.Broker。common.Broker是对Broker接口的一个默认空实现。这种设计在java中很常见。这样设计的好处之一是,如果后续对Broker接口新增一个方法,就不需要对所有的实现类,都去实现一遍,只需要commonn.Broker和需要覆盖的实现类去实现这个方法即可。
延迟队列的实现
如果问一下大家,amqp如何实现延迟队列?我想一般都会通过延迟消息+死信队列进行实现。我们来看一下Machinery是如何实现的。
1.设置延迟消息
如下图,在消息中设置ETA为一个未来的一个时间点,就会当作延迟消息来进行处理。
2.发送延迟消息
如下图,Machinery会对消息和消息队列设置过期时间,当消息过期了,会发送到指定的死信队列,而处理过期消息的死信队列正好就是我们正常处理消息的队列。
结束语
本篇主要简单地分析了一下amqp是如何实现延迟队列的。下一篇我们会简述一下Machinery是如何通过redis来实现消息队列的。