ActiveMQ多个队列的prefetchSize问题
创始人
2024-07-24 15:01:19
0

如果在您的应用程序中使用多个队列来处理消息,您可能会发现通过设置prefetchSize属性以限制一次从队列中取出消息的数量时遇到问题。这是因为默认情况下,ActiveMQ使用了一种称为“循环调度”的算法,该算法将prefetchSize除以队列数,从而平均分配在每个队列中。这可能会导致队列中的一些消息堆积,而另一些队列则没有。要解决这个问题,您可以使用以下代码作为参考,通过手动更改所需的预取数来设置每个队列的预取大小。

public class MultiQueueConsumer {
    private static final Logger LOG = LoggerFactory.getLogger(MultiQueueConsumer.class);
    private static final String BROKER_URL = "tcp://localhost:61616";
     private static final String QUEUE_1_NAME = "queue1";
    private static final String QUEUE_2_NAME = "queue2";
    private static final int PREFETCH_SIZE = 5;

    public static void main(String[] args) throws Exception {

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        Queue queue1 = session.createQueue(QUEUE_1_NAME);
        Queue queue2 = session.createQueue(QUEUE_2_NAME);

        MessageConsumer consumer1 = session.createConsumer(queue1, null, getPREFETCH_SIZE(QUEUE_1_NAME, PREFETCH_SIZE));
        MessageConsumer consumer2 = session.createConsumer(queue2, null, getPREFETCH_SIZE(QUEUE_2_NAME, PREFETCH_SIZE));

        consumer1.setMessageListener(new MessageListenerImpl());
        consumer2.setMessageListener(new MessageListenerImpl());

    }

    private static int getPREFETCH_SIZE(String queueName, int prefetchSize) {
        DestinationStatistics destinationStatistics = null;
        try {
            destinationStatistics = getDestinationStatistics(queueName);
        } catch (Exception e) {
            LOG.error("Unable to get prefetch size for queue " + queueName + ", returning default size

相关内容

热门资讯

安装了Anaconda之后找不... 在安装Anaconda后,如果找不到Jupyter Notebook,可以尝试以下解决方法:检查环境...
安卓系统怎么连不上carlif... 安卓系统无法连接CarLife的原因及解决方法随着智能手机的普及,CarLife这一车载互联功能为驾...
iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
oppo手机安卓系统换成苹果系... OPPO手机安卓系统换成苹果系统:现实吗?如何操作?随着智能手机市场的不断发展,用户对于手机系统的需...
iphone系统与安卓系统更新... 最近是不是你也遇到了这样的烦恼?手机更新系统总是失败,急得你团团转。别急,今天就来给你揭秘为什么iP...
安卓平板改windows 系统... 你有没有想过,你的安卓平板电脑是不是也能变身成Windows系统的超级英雄呢?想象在同一个设备上,你...
安卓系统连接耳机模式,蓝牙、有... 亲爱的手机控们,你们有没有遇到过这种情况:手机突然变成了“耳机模式”,明明耳机没插,声音却只从耳机孔...
安卓系统上滑按键,便捷生活与高... 你有没有发现,现在手机屏幕越来越大,操作起来却越来越方便了呢?这都得归功于安卓系统上的那些神奇的上滑...
避免在粘贴双引号时向VS 20... 在粘贴双引号时向VS 2022添加反斜杠的问题通常是由于编辑器的自动转义功能引起的。为了避免这个问题...
希沃系统怎么装安卓系统,解锁更... 亲爱的读者们,你是否也像我一样,对希沃一体机上的安卓系统充满了好奇呢?想象在教室里,你的希沃一体机不...