【问题标题】:Working example for Spring Integration + Amazon SQS queueSpring Integration + Amazon SQS 队列的工作示例
【发布时间】:2019-03-28 19:37:04
【问题描述】:

我正在寻找一个 Spring 应用程序的工作示例,该应用程序使用 Spring Integration + Amazon SQS 服务接收消息并将消息发送到队列。

【问题讨论】:

  • 他们 github 页面上的自述文件是一个非常好的起点 (github.com/spring-projects/spring-integration-aws)。您需要帮助吗?
  • “双向消息交换”是什么意思?请求/回复?入站和出站网关?然后就没有了。没有这样的实现。
  • 我想看看如何配置 Spring 集成以使用 sqs 队列发送和接收消息。我在使用 spring-integration-aws github wiki 中的代码 sn-ps 时遇到问题。

标签: java amazon-web-services spring-integration amazon-sqs spring-integration-aws


【解决方案1】:

这是一个如何使用 XML 配置 outbound channel adapter 的示例:

 <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

【讨论】:

  • 我不需要定义默认轮询器吗?如果我不添加此 bean,我可能会出现错误“没有为基于注释的端点定义轮询器,...” 带有新 PeriodicTrigger(200) 的 PollerMetadata 是否适合此队列的配置?
猜你喜欢
  • 2017-04-12
  • 2016-01-18
  • 2019-04-11
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多