user2393260
user2393260

Reputation: 11

Spring integration: how to make multi thread to poll message from a pollable channel through service activator as a paraller service

In my Code, SqsMessageDrivenChannelAdapter channel adapter configured to read message from AWS queue and push to a pollable channel(Queue). To the pollable channel,a service activator is pointing to poll message and process.

My Exact question: How to make work service activator as multithreaded to poll message from pollable channel and do some parallel task by specified thread size.

Channel Adapter:

@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;
  }

Pollable Channel:

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

Service activator:

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

Final question: If I make two service activator pointing to the same pollable channel will it work perfectly and is it good to use kind of parallel message process?

Upvotes: 0

Views: 747

Answers (1)

Artem Bilan
Artem Bilan

Reputation: 121177

See an task-executor option for the poller configuration. Exactly this one makes the same service activator to be called in parallel. See more in docs: https://docs.spring.io/spring-integration/docs/current/reference/html/endpoint.html#endpoint-namespace

Upvotes: 1

Related Questions