ActiveMQ: отправленная очередь содержит больше сообщений, чем размер предварительной выборки - PullRequest
0 голосов
/ 14 декабря 2018

У меня задан размер предварительной выборки 1 (jms.prefetchPolicy.all = 1 в URL).В веб-консоли я вижу, что prefetch равен 1 для всех моих потребителей.Один потребитель застрял, и в его очереди было 67 сообщений - см. Мой снимок экрана

Не могли бы вы помочь мне понять, как это могло произойти?Я прочитал множество статей по этому вопросу, и я понимаю, что размер очереди отправки должен быть до размера предварительной выборки ?!

Я использую следующую конфигурацию для приема сообщений из очереди:

ConnectionFactory getActiveMQConnectionFactory() {
    // Configure the ActiveMQConnectionFactory
    ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
    activeMQConnectionFactory.setBrokerURL(brokerUrl);
    activeMQConnectionFactory.setUserName(user);
    activeMQConnectionFactory.setPassword(password);
    activeMQConnectionFactory.setNonBlockingRedelivery(true);

    // Configure the redeliver policy and the dead letter queue
    RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
    redeliveryPolicy.setInitialRedeliveryDelay(initialRedeliveryDelay);
    redeliveryPolicy.setRedeliveryDelay(redeliveryDelay);
    redeliveryPolicy.setUseExponentialBackOff(useExponentialBackOff);
    redeliveryPolicy.setMaximumRedeliveries(maximumRedeliveries);
    RedeliveryPolicyMap redeliveryPolicyMap = activeMQConnectionFactory.getRedeliveryPolicyMap();
    redeliveryPolicyMap.put(new ActiveMQQueue(thumbnailQueue), redeliveryPolicy);
    activeMQConnectionFactory.setRedeliveryPolicy(redeliveryPolicy);
    return activeMQConnectionFactory;
}

public IntegrationFlow createThumbnailFlow(String concurrency, CreateThumbnailReceiver receiver) {
    return IntegrationFlows.from(
            Jms.messageDrivenChannelAdapter(
                    Jms.container(getActiveMQConnectionFactory(), thumbnailQueue)
                            .concurrency(concurrency)
                            .sessionTransacted(true)
                            .get()
            ))
            .transform(new JsonToObjectTransformer(CreateThumbnailRequest.class, jsonObjectMapper()))
            .handle(receiver)
            .get();
}

1 Ответ

0 голосов
/ 20 декабря 2018

Проблема была вызвана различием между версией брокера (5.14.5) и клиента (5.15.3).После обновления отправленная очередь брокера содержит не более 2 сообщений, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...