Несколько слушателей SQS из разных регионов AWS - PullRequest
2 голосов
/ 31 мая 2019

В настоящее время мы используем одну очередь SQS для обработки сообщений. Однако в качестве расширения функциональности нам необходимо поддерживать несколько регионов с одинаковым именем очереди.

Текущая реализация jmsListener привязана к заданной очереди SQS в заданном регионе, как показано ниже:

SQSListener.java

@Component
public class SQSListener {

    @Override
    @JmsListener(destination = "${QueueName}", concurrency = "${JmsThreadCount}")
    public void onMessage(Message message) throws JMSException {

    }

SQSConfiguration.java

@Component
@EnableJms
public class SQSConfig {
    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
         DefaultJmsListenerContainerFactory factory = null;
         try {
             factory = new DefaultJmsListenerContainerFactory();
             factory.setConnectionFactory(getSqsConnectionFactory()); //passes credentials in local method call
             factory.setDestinationResolver(new DynamicDestinationResolver());
             factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage());
         }
         return factory;
    }



}

Application.properties

QueueName=xyz
JmsThreadCount=1-5
Regions=us-east-1, us-west-2 #*(newly added region)*

Как я могу сделать универсальным создание нескольких реализаций класса слушателя по регионам, указанным в конфигурациях?

1 Ответ

0 голосов
/ 10 июня 2019

Хотя нет прямого способа использовать аннотации Spring Framework для создания прослушивателей для прослушивания нескольких очередей в нескольких регионах AWS (одно и то же имя очереди в нескольких регионах AWS), мне удалось решить вышеуказанную проблему с помощью программной конфигурации компонентов JMS Container Factoryдля каждого региона, шаблоны JMS для каждого региона и прослушиватели JMS для каждого региона.

Я опубликую пример кода в ближайшие несколько дней, что может быть полезно для сообщества.

...