Рабочий пример для интеграции Spring очередь Amazon SQS

#java #amazon-web-services #spring-integration #amazon-sqs #spring-integration-aws

#java #amazon-веб-сервисы #spring-интеграция #amazon-sqs #spring-интеграция-aws

Вопрос:

Я ищу рабочий пример приложения Spring, которое получает и отправляет сообщения в очередь, используя Spring Integration сервис Amazon SQS.

Комментарии:

1. Readme на их странице github — действительно хорошая отправная точка ( github.com/spring-projects/spring-integration-aws ). Не хватает ли чего-нибудь конкретно, с чем вам нужна помощь?

2. Что вы подразумеваете под «двусторонним обменом сообщениями»? Запрос / ответ? Входящие и исходящие шлюзы? Тогда это так, нет. Такой реализации не существует.

3. Я хотел посмотреть, как настроить интеграцию Spring для отправки и получения сообщений с использованием очереди sqs. У меня возникли проблемы с использованием фрагментов кода из spring-integration-aws github wiki.

Ответ №1:

Это пример того, как настроить outbound channel adapter с помощью XML:

  <int-aws:sqs-outbound-channel-adapter sqs="sqs"
                                      auto-startup="false"
                                      channel="errorChannel"
                                      phase="100"
                                      id="sqsOutboundChannelAdapter"
                                      queue="foo"
                                      delay-expression="'200'"
                                      message-deduplication-id="foo"
                                      message-group-id-expression="'bar'"
                                      send-timeout="202"
                                      sync="false"
                                      error-message-strategy="errorMessageStrategy"
                                      failure-channel="failureChannel"
                                      success-channel="successChannel"
                                      message-converter="messageConverter"
                                      async-handler="asyncHandler"
                                      resource-id-resolver="resourceIdResolver"/>
  

inbound channel adapter Выглядит следующим образом:

 <int-aws:sqs-message-driven-channel-adapter sqs="sqs"
                                      auto-startup="false"
                                      channel="errorChannel"
                                      error-channel="nullChannel"
                                      task-executor="taskExecutor"
                                      phase="100"
                                      id="sqsMessageDrivenChannelAdapter"
                                      queues="foo, bar"
                                      message-deletion-policy="NEVER"
                                      max-number-of-messages="5"
                                      visibility-timeout="200"
                                      wait-time-out="40"
                                      send-timeout="2000"
                                      queue-stop-timeout="11000"
                                      destination-resolver="destinationResolver"
                                      resource-id-resolver="resourceIdResolver"/>
  

И вот вариант Java для них:

     @Bean
    @ServiceActivator(inputChannel = "sqsSendChannelWithAutoCreate")
    public MessageHandler sqsMessageHandlerWithAutoQueueCreate() {
        DynamicQueueUrlDestinationResolver destinationResolver = new DynamicQueueUrlDestinationResolver(amazonSqs(), null);
        destinationResolver.setAutoCreate(true);
        return new SqsMessageHandler(amazonSqs(), destinationResolver);
    }


    @Bean
    public MessageProducer sqsMessageDrivenChannelAdapter() {
        SqsMessageDrivenChannelAdapter adapter = new SqsMessageDrivenChannelAdapter(amazonSqs(), "testQueue");
        adapter.setOutputChannel(inputChannel());
        return adapter;
    }
  

Вы можете найти больше примеров в тестах проекта: https://github.com/spring-projects/spring-integration-aws/tree/master/src/test/java/org/springframework/integration/aws

Комментарии:

1. Разве мне не нужно также определять опросник по умолчанию? Если я не добавлю этот компонент, я могу выдать ошибку «Для конечной точки на основе аннотаций не определен опросник …» Является ли PollerMetadata с новым PeriodicTrigger (200) подходящей конфигурацией для этой очереди?