rabbitmq
客户端队列的属性配置
x-message-ttl 队列存活的时间, 超出时间后,删除或者进入其他的队列, 例如经私信交换机,进入死信的队列
x-mar-length 限制队列的长度, 防止队列太长,持久导致存储挤压等问题, 少量的数据,多消费者,尽快的消费掉,使得mq 处于一个非常的健康状态,超过的数据,放不下,就会被拒绝或者进入死信队里,或者直接通过 生产者 的 confirim 模式 , 如果被拒绝了,一个时间窗口内被拒绝的太多, 就采取其他的处理方式, (例如,先将数据存储起来,过段时间,再重试, 或者重新入队重试的次数达到一定次数, 交给具体的客服人员处理 )
x-max-length-bytes 队列的最大容量
x-dead-letter-exchange 死信交换机 ,由于删除的数据 、过期的数据,超长的数据, 交给死信交换机 , 根据路由key 到 死信队列
x-dead-letter-routing-key
x-max-priorty 队列的有限机模式
x-queue-mode 队列的模式
-----
如果是rabbitmq 集群的模式, 可以设置,镜像队列
x-ha-policy 指定 节点 n ode 或者 all 所有的节点上都要做镜像队列 指定队列是否需要将数据同步到其他的队列, 同步过去 ,即使现有的队列失败了, 也可以从数据从同步的镜像队列中获取。
队列有偏移量参数的设置, 也可以从指定的队列的便宜位置, offset
官方:
AtomicInteger messageConsumed = new AtomicInteger(0);
Consumer consumer = environment.consumerBuilder()
.stream("offset-tracking-stream") // the stream to consume from
.offset(OffsetSpecification.first()) // start consuming at the beginning
.name("my-application") // the name (reference) of the consumer
.manualTrackingStrategy() // tracking is done in application code
.builder()
.messageHandler((context, message) -> {
// ... message processing ...
// condition to store the offset: every 10,000 messages
if (messageConsumed.incrementAndGet() % 10_000 == 0) {
context.storeOffset(); // store the message offset
}
// ...
})
.build();