@serviceactivator到底做什么?

时间:2019-02-25 14:28:50

标签: spring-integration

我想了解serviceactivator注释的作用?因为我想在通过serviceactivator获得消息时修改消息。例如,我已经看到,没有可以控制的消息参数。为什么句柄可以接收消息,甚至看不到传入的任何消息参数,原理是什么?

@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 :(得分:1)

@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