Как однозначно идентифицировать слушателя сообщения в методе OnMessage

Я использую несколько слушателей на одну и ту же тему. Все слушатели выполняют один и тот же код. Я имею в виду тот же метод onMessage(). Это похоже на многопоточную систему. Я хочу убедиться, что каждое сообщение обрабатывается только одним слушателем. Я хочу сохранить кэш для хранения того, какой слушатель обработал какое сообщение. Но как определить слушателя? Моя конфигурация JMS для 2 слушателей

@Bean
public ActiveMQConnectionFactory connectionFactory(){
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    connectionFactory.setBrokerURL(DEFAULT_BROKER_URL);
    return connectionFactory;
}

@Bean
public DefaultMessageListenerContainer listenerContainers() {
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    container.setConnectionFactory(connectionFactory());
    container.setClientId("consumer1");
    container.setDestinationName(COMMENT_QUEUE);
    container.setPubSubDomain(true);
    container.setSessionTransacted(true);
    container.setSubscriptionDurable(true);
    container.setMessageListener(datafileSubscriber);
    container.start();
    return container;
}

@Bean
public DefaultMessageListenerContainer listenerContainers1() {
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    container.setConnectionFactory(connectionFactory());
    container.setClientId("consumer2");
    container.setDestinationName(COMMENT_QUEUE);
    container.setPubSubDomain(true);
    container.setSessionTransacted(true);
    container.setSubscriptionDurable(true);
    container.setMessageListener(datafileSubscriber);
    container.start();
    return container;
}

Конфигурация каждого слушателя

  1. setsessionTransacted true, чтобы брокер ждал подтверждения.

  2. Долговечный, так как он долговечный, каждый должен иметь свой clientID.

Как я могу определить каждого слушателя сообщения в методе onMessage()? Одно временное решение - я могу использовать идентификатор потока, но когда система выйдет и перезапустится, идентификатор потока будет бесполезен для понимания. Поэтому я ищу "долговременное" решение для идентификации слушателя.

0 ответов

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