2015-07-06 4 views
2

Я новичок в Spring framework и Spring Integration. Я начинаю использовать весенний ботинок с сервисом AWS. Я попытался использовать адаптер канала и активатор службы, чтобы получить сообщение из очереди SQS и периодически отправлять на другую службу внутри приложения с помощью poller.Адаптер канала и активатор обслуживания

@configuration 
public class AppConfig 
{ 

    @Bean 
    @InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000")) 
    public Message inboundAdaptor() 
    { 
    //get message from SQS queue 
    System.out.println("get message"); 
    return message; 
    } 

    @Bean 
    @ServiceActivator(inputChannel = "inputChannel") 
    public String msgActivator(Message message) 
    { 
    //call another service and pass message body to that service 
    System.out.println("This is message body" + messageBody); 
    return messageBody; 
    } 

Я ожидал, что, выполнив выше, действия внутри InboundChannelAdaptor будут периодически вызваны благодаря Poller и передавать информацию сообщения в мою службу с помощью ServiceActivator автоматически до тех пор, как у меня есть сообщение в SQS queue.

Я проверил их с System.out.println(), чтобы показать, что у меня есть. Однако System.out.println() печатается только один раз для каждого метода. Означает ли это, что подольчик только что опросил только один раз и остановился, или я не могу проверить периодический вызов с System.out.println()?

Любое предложение о правильном способе реализации этого рабочего процесса приветствуется.

ответ

1

При использовании @InboundChannelAdapter на @Bean, фасоль должна быть типа MessageSource. Аналогично, для @ServiceActivator на компоненте должно быть MessageHandler.

Для методов POJO, как ваши, аннотированные методы должны быть методы в @Bean ...

@Bean 
public MyBean myBean() { 
    return new MyBean(); 
} 

@MessageEndpoint 
public static class MyBean { 

    @InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000")) 
    public Message inboundAdaptor() { 
     //get message from SQS queue 
     System.out.println("get message"); 
     return message; 
    } 

    @ServiceActivator(inputChannel = "inputChannel", outputChannel="out") 
    public String msgActivator(Message message) { 
     //call another service and pass message body to that service 
     System.out.println("This is message body" + messageBody); 
     return messageBody; 
    } 

} 

Вы также должны выходной канал при возвращении ответа от службы.

Смежные вопросы