ActiveMQ之慢消费者处理

本文介绍了ActiveMQ中处理慢消费者的问题,重点讨论了Pending Message Limit Strategy,包括ConstantPendingMessageLimitStrategy和PrefetchRatePendingMessageLimitStrategy。通过配置,可以在内存中保留一定数量的消息,防止慢消费者影响整体性能。同时,提供了配置驱逐策略和监测慢消费者状况的方法。
摘要由CSDN通过智能技术生成

简介

慢消费者在非持久性主题上会出现问题,因为它们会强制broker为它们在内存保留旧消息。一旦填满,就会导致broker放慢生产者的速度,导致快的消费者也会变慢。

目前,有一个策略可以让你配置broker除了prefect bufer之外还将为消费者保留的最大匹配的消息数。在达到此最大值后,当新消息进入时,旧消息将被丢弃。这将允许你在内存中保留当前消息并继续向慢消费者发送消息,但会丢弃旧消息。

Pending Message Limit Strategy

你可以在Destination map配置PendingMessageLimitStrategy的实现类,以便不同topic有不用的策略来处理慢速消费者。例如,你可能希望将此策略引用于价格非常高的,但对于交易和订单而言,你可能不希望丢弃旧的消息。

该策略计算消费者在内存中保留的最大待处理消息数(高于prefetch size)。值为0意味着除了prefect size外不保留任何消息。大于0的值将保留该数量的消息,在新消息进入时丢弃旧的消息。值为-1表示禁止丢弃消息。

目前有两种不同的策略实现:

  • ConstantPendingMessageLimitStrategy
  • PrefetchRatePendingMessageLimitStrategy

ConstantPendingMessageLimitStrategy

此策略对所有使用者使用常量限制(高于其预取大小)。

示例:

<constantPendingMessageLimitStrategy limit="50"/>

PrefetchRatePendingMessageLimitStrategy

此种策略是将prefect size 乘以一个你配置的数来计算待处理消息的最大数量。比如,你可以为每个消费者保留大约2.5倍的prefect size的消息。

示例:

<prefetchRatePendingMessageLimitStrategy multiplier="2.5"/>

使用Prefect策略来配置限制

在JMS客户端,您可以为持久性的和非持久性的queue和topic配置prefect策略。prefect策略还允许为每个连接/消费者指定最大的预处理消息的数量。

prefect 策略参考:http://activemq.apache.org/what-is-the-prefetch-limit-for.html

配置驱逐策略

ActiveMQ有一个MessageEvictionStrategy,用于决定哪个消息应该在慢速消费者身上被驱逐。 默认实现是:

<oldestMessageEvictionStrategy/>

这表示丢弃最旧的消息。

你还可以根据JMS消息属性来丢弃给定属性的消息。

示例:

<uniquePropertyMessageEvictionStrategy propertyName="STOCK"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值