Что эквивалентно типу назначения из jms:listener-container в JavaConfig?

Что эквивалентно destination-type от jms:listener-container в JavaConfig?

Я проверил в API эти два следующих класса без результатов.

Я пытаюсь создать потребителей для темы, многие учебники в Интернете используют destination-type="topic"

В соответствии с разделом 23.6 Поддержка пространства имен JMS есть таблица 23.2. Атрибуты таблицы элементов JMS. Где для атрибута тип назначения указано:

Тип назначения JMS для этого прослушивателя: очередь, тема или durableTopic. По умолчанию это очередь.

Для аудитории: рассмотрите две следующие ссылки, если вы пытаетесь выполнить миграцию с jms:listener-container а также jms:listener для JavaConfig.

2 ответа

Решение

Если сомневаетесь, посмотрите на парсер (в данном случае AbstractListenerContainerParser); этот атрибут не отображается на одно свойство, он отображается на pubSubDomain а также subscriptionDurable...

    String destinationType = ele.getAttribute(DESTINATION_TYPE_ATTRIBUTE);
    boolean pubSubDomain = false;
    boolean subscriptionDurable = false;
    if (DESTINATION_TYPE_DURABLE_TOPIC.equals(destinationType)) {
        pubSubDomain = true;
        subscriptionDurable = true;
    }
    else if (DESTINATION_TYPE_TOPIC.equals(destinationType)) {
        pubSubDomain = true;
    }
    else if ("".equals(destinationType) || DESTINATION_TYPE_QUEUE.equals(destinationType)) {
        // the default: queue
    }
    else {
        parserContext.getReaderContext().error("Invalid listener container 'destination-type': " +
                "only \"queue\", \"topic\" and \"durableTopic\" supported.", ele);
    }
    configDef.getPropertyValues().add("pubSubDomain", pubSubDomain);
    configDef.getPropertyValues().add("subscriptionDurable", subscriptionDurable);

Хотя это немного поздно, я бы предложил использовать следующий подход для тех, кто все еще ищет ответ.

Я создал новый класс DefaultMessageListenerContainerExtended, который расширяет DefaultMessageListenerContainer, и я добавил еще один метод как setDestinationType. Это делает трюк приятным и знакомым способом.

Ниже приведена ссылка на исходный код, который можно найти в git:

https://github.com/HVT7/spring-jms-set-destination-type/blob/master/DefaultMessageListenerContainerExtended.java

Также, чтобы добавить, попробуйте использовать весеннюю версию 4.2.5, так как в этой версии есть незначительные обновления (пришлось много копать из-за проблем с версией, так как я использовал 4.1.5, а у слушающих контейнеров не было функции для установки "ReplyPubSubDomain") имущество).

Другие вопросы по тегам