【问题标题】:Spring integration: how to make multi thread to poll message from a pollable channel through service activator as a paraller serviceSpring集成:如何使多线程通过服务激活器作为并行服务从可轮询通道轮询消息
【发布时间】:2022-01-03 17:59:58
【问题描述】:

在我的代码中,SqsMessageDrivenChannelAdapter 通道适配器配置为从 AWS 队列读取消息并推送到可轮询通道(队列)。对于可轮询通道,服务激活器指向轮询消息和进程。

我的确切问题:如何使工作服务激活器成为多线程以从可轮询通道轮询消息并按指定的线程大小执行一些并行任务。

通道适配器:

@Bean
  public MessageProducer sqsMessageDrivenChannelAdapterForFlights() {
    log.info("**** start listening to: " + ttFlightsXMLSqsName + " **** ");
    SqsMessageDrivenChannelAdapter adapter =
        new SqsMessageDrivenChannelAdapter(amazonSqs, ttFlightsXMLSqsName);
    adapter.setOutputChannelName(MessageChannelConstants.get_tt_flights);
    adapter.setMaxNumberOfMessages(5);
    return adapter;
  }

可投票频道:

@Bean(name = MessageChannelConstants.get_tt_flights)
  public PollableChannel sqsInputChannelFlights() {
    return new QueueChannel();
  }

服务激活器:

  @ServiceActivator(inputChannel = MessageChannelConstants.get_tt_flights,
      poller = @Poller(fixedRate = "5000"))
  public void processFlightData(Message<?> receive) throws PacPlusException {
    .................
   long startTime = System.currentTimeMillis();
}

最后一个问题:如果我让两个服务激活器指向同一个可轮询通道,它会完美地工作吗?使用并行消息处理是否好?

【问题讨论】:

    标签: java spring spring-integration spring-integration-aws


    【解决方案1】:

    请参阅task-executor 选项以了解轮询器配置。正是这个使相同的服务激活器被并行调用。 在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/endpoint.html#endpoint-namespace

    【讨论】:

    • 您好 Artem Bilan,感谢您的回答。我尝试了如下的任务执行器。但是在看到日志时,它似乎并没有并行执行。如果它以多线程方式运行,那么我想看到日志应该是非序列的。如何确保它以多线程方式工作。
    • maxMessagesPerPoll。 service activator 默认是无限制的。因此,队列中的所有消息都由单个线程轮询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多