幂等性
用户对于同一操作发起的一次请求或多次请求的结果是不一致的,不会因为多次点击而产生了副作用。
消息被重复消费
解决思路:一般使用全局ID或者时间戳、UUID,判断此ID是否已经被消费过
- 唯一ID + 指纹码
- Redis原子性: 天然自带幂等性
优先级队列
订单催付:按客户大小判断是否优先处理
0-255 :越大越优先
// 队列代码中添加
val arguments = mapof("x-max-priority" to 10)
// 消息代码中添加
val properties = AMQP.BasicProperties().builder().prioriry(5).build()
注意:队列需要先设置为优先级队列,消息需要设置消息的优先级,消费者需要等待消息已经发送到队列中去才消费,因为这样才有机会对消息进行排序
惰性队列
指的是消息的存放地,正常情况,消息是保存在内存中,但是在惰性队列中,消息是保存在磁盘上的。
积压消息过多,此时消费者宕机,惰性队列将其保存在磁盘上,不会造成占用系统内存过多。
队列有两种模式,defalut 和 lazy ;默认情况,使用正常队列
在声明队列处设置参数:
val arguments = mapof("x-queue-mode" to "lazy")