开始

一波业务过来是多长时间。比如外卖这种 TTL最好设置2到3个小时。
image.png

秒杀的TTL设置为20到30分钟。这样秒杀的过程期间都不会出现消息丢失的情况
秒杀过后,消息还要留给我们进行进一步的处理。

实战

order服务,
image.png
回复到发1条消息的情况。
image.png
看看怎么使用消息的单挑过期时间。就是下面这个参数,发送的时候给消息设置特殊的参数。
image.png
我们要设置一个。
先新建一个AMQP的
image.png
它是AMQP的内部类。内部类里面规定了消息的一些参数。
image.png
我们需要的参数。表示过期时间。
image.png
可以get到Expiration 但是没有setExpiration方法。
image.png
在构造方法里面可以传
image.png

有个构造器。
image.png
设置为15秒
image.png
我们就塞到这个参数里面
image.png

启动测试

光启动order服务测试。

image.png

image.png

image.png
这条消息有15秒的过期时间
image.png
15秒后再次getMessage
image.png

多条消息过期时间和整条队列所有消息的过期

在商家的服务里面。
我们需要一个特殊的argument
new HashMap 时,阿里的提示。
image.png
如果HashMap小于16的话,直接给16就可以 给8也行。这是为了防止什么呢?比方说我们这个args里面要塞100个,但是HashMap是会自动扩容的。它容量到了0.75倍的时候自动扩容,每一次扩容都要消耗系统很多的资源。
image.png
你要塞100个参数的,可以直接128或者256。让他初始够用,不用再扩容消耗系统资源。
image.png

队列的过期时间。队列自动清理15秒没有被消费的消息。
image.png

image.png
这里默认不让改参数
image.png
要改这个队列的参数,就需要把这个队列先删掉。

image.png
删掉队列后,重新启动商家微服务
image.png
队列的声明都建议在程序里面自动化完成。不要手动的改。在queueDeclare的时候,如果遇到参数和原来的现存的不一样 就一定会报错。所以在该队列参数的时候一定要把前面的这个队列给删掉。
image.png
为什么不建议上游的微服务和下游的微服务都声明同一个队列。上游的不能声明下游的,因为你不知道你的接收方对这个队列有什么要求。如果他用不同的参数重新声明这个队列。队列就声明的时候报异常。报异常可能就会造成别人的服务异常。
所以不要替别人去声明队列。
商家服务启动。然后把这个队列的服务 听到。如果不停掉她就会正常的把消息处理 了。 这里我们要验证的是队列里面的消息的过期机制。
image.png

手动的发一条消息。
image.png

image.png

这里我们要设置为null。这是单条消息的过期时间。
image.png

image.png

image.png

15秒后
image.png

image.png
x-expire是整个队列的过期时间。队列如果连续15秒没有消息过来。队列就会被删 了。队列里面一般不要加这个参数。队列被删,会导致路由的失败。
image.png

结束