我想了解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();
}
答案 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