开始
一波业务过来是多长时间。比如外卖这种 TTL最好设置2到3个小时。
秒杀的TTL设置为20到30分钟。这样秒杀的过程期间都不会出现消息丢失的情况
秒杀过后,消息还要留给我们进行进一步的处理。
实战
order服务,
回复到发1条消息的情况。
看看怎么使用消息的单挑过期时间。就是下面这个参数,发送的时候给消息设置特殊的参数。
我们要设置一个。
先新建一个AMQP的
它是AMQP的内部类。内部类里面规定了消息的一些参数。
我们需要的参数。表示过期时间。
可以get到Expiration 但是没有setExpiration方法。
在构造方法里面可以传
有个构造器。
设置为15秒
我们就塞到这个参数里面
启动测试
光启动order服务测试。
这条消息有15秒的过期时间
15秒后再次getMessage
多条消息过期时间和整条队列所有消息的过期
在商家的服务里面。
我们需要一个特殊的argument
new HashMap 时,阿里的提示。
如果HashMap小于16的话,直接给16就可以 给8也行。这是为了防止什么呢?比方说我们这个args里面要塞100个,但是HashMap是会自动扩容的。它容量到了0.75倍的时候自动扩容,每一次扩容都要消耗系统很多的资源。
你要塞100个参数的,可以直接128或者256。让他初始够用,不用再扩容消耗系统资源。
队列的过期时间。队列自动清理15秒没有被消费的消息。
这里默认不让改参数
要改这个队列的参数,就需要把这个队列先删掉。
删掉队列后,重新启动商家微服务
队列的声明都建议在程序里面自动化完成。不要手动的改。在queueDeclare的时候,如果遇到参数和原来的现存的不一样 就一定会报错。所以在该队列参数的时候一定要把前面的这个队列给删掉。
为什么不建议上游的微服务和下游的微服务都声明同一个队列。上游的不能声明下游的,因为你不知道你的接收方对这个队列有什么要求。如果他用不同的参数重新声明这个队列。队列就声明的时候报异常。报异常可能就会造成别人的服务异常。
所以不要替别人去声明队列。
商家服务启动。然后把这个队列的服务 听到。如果不停掉她就会正常的把消息处理 了。 这里我们要验证的是队列里面的消息的过期机制。
手动的发一条消息。
这里我们要设置为null。这是单条消息的过期时间。
15秒后
x-expire是整个队列的过期时间。队列如果连续15秒没有消息过来。队列就会被删 了。队列里面一般不要加这个参数。队列被删,会导致路由的失败。