Что точно делает @serviceactivator? - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу понять, что делает аннотация serviceactivator?Потому что я хочу изменить сообщение, когда я получил его через serviceactivator.Например, я видел, что нет параметра сообщения, которым я могу управлять.Почему handle может получить сообщение, даже если я не вижу ни одного переданного параметра сообщения, каков принцип?

@Bean
@ServiceActivator(inputChannel="requests")
public MessageHandler jmsMessageHandler((ActiveMQConnectionFactory connectionFactory) {
   JmsSendingMessageHandler handler = new JmsSendingMessageHandler(new 
   JmsTemplate(connectionFactory));
   handler.setDestinationName("requests");
   return handler;
}

Хотел бы я сделать

@Bean
@ServiceActivator(inputChannel="requests")
public MessageHandler jmsMessageHandler(Message message) {
   String new_message = message.split();

}

1 Ответ

0 голосов
/ 25 февраля 2019

@ServiceActivator переводит вызов в конечную точку потребителя.В случае MessageHandler он используется как есть, и ему передается сообщение от inputChannel.Но если ваш код не основан на MessageHandler, а представляет собой простой вызов метода POJO, то все основано на сигнатуре вашего метода.В конце концов, вызов метода POJO переносится на MethodInvokingMessageHandler.

. В вашем случае это должно быть примерно так:

@ServiceActivator(inputChannel="requests", outputChannel="toJms")
public String jmsMessageHandler(Message message) {
   return message.split();
}

Итак, нет @Bean, потому что мы имеем делотолько с вызовом метода POJO.message - это что-то, поступающее из сообщения запроса, и возвращаемое String превратится в payload из выходного сообщения для обработки где-то вниз по течению на канале toJms.

См. Дополнительную информацию в Справочном руководстве.: https://docs.spring.io/spring-integration/docs/current/reference/html/#annotations

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...