Spring 集成 - Java DSL 中的服务激活器
Spring Integration - Service Activator in Java DSL
我在一个简单的 POJO 中配置了一个服务激活器,我想将它转换成 Java DSL。
现在,我的 Java DSL 看起来像这样,
public IntegrationFlow inputFlow() {
return IntegrationFlows.from(inputChannel())
.log(LoggingHandler.Level.DEBUG, "com.dash.messages")
.transform(Transformers.fromJson(MessageWrapper.class, customObjectMapper()))
.channel(theOtherChannel()))
.get();
}
里面有一个带有服务激活器的 POJO,
public class MessageProcessor {
private static final Logger logger = LoggerFactory.getLogger(MessageProcessor.class);
....
@ServiceActivator
public void handle(MessageWrapper message, @Headers Map<String, Object> headers) {
logger.debug("Message received: " + message);
// Send message to another system
....
}
}
在XML中对应的配置如下图,
<int:service-activator input-channel="theOtherChannel"
ref="MessageProcessor" output-channel="nullChannel" />
- 如何在 Java DSL 中调用 ServiceActivator 方法?我正在考虑使用
.handle()
,但参数应该是什么?
- 使用Java DSL 时是否有
null
频道的概念?如果是,我们如何指定它?
这个这个 handle()
变体:
/**
* Populate a {@link ServiceActivatingHandler} for the
* {@link org.springframework.integration.handler.MethodInvokingMessageProcessor}
* to invoke the discovered {@code method} for provided {@code service} at runtime.
* @param service the service object to use.
* @return the current {@link BaseIntegrationFlowDefinition}.
*/
public B handle(Object service) {
因此,您只需将 MessageProcessor
自动装配到具有 IntegrationFlow
定义的 class 或直接连接到 inputFlow()
bean 定义。那么你就这样做:
.channel(theOtherChannel()))
.handle(messageProcessor)
.get();
nullChannel
中不需要 void
return 类型的服务激活器。当遇到 void
或 null
回复时,流程无论如何都会在那个点停止。
在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl-handle
我在一个简单的 POJO 中配置了一个服务激活器,我想将它转换成 Java DSL。
现在,我的 Java DSL 看起来像这样,
public IntegrationFlow inputFlow() {
return IntegrationFlows.from(inputChannel())
.log(LoggingHandler.Level.DEBUG, "com.dash.messages")
.transform(Transformers.fromJson(MessageWrapper.class, customObjectMapper()))
.channel(theOtherChannel()))
.get();
}
里面有一个带有服务激活器的 POJO,
public class MessageProcessor {
private static final Logger logger = LoggerFactory.getLogger(MessageProcessor.class);
....
@ServiceActivator
public void handle(MessageWrapper message, @Headers Map<String, Object> headers) {
logger.debug("Message received: " + message);
// Send message to another system
....
}
}
在XML中对应的配置如下图,
<int:service-activator input-channel="theOtherChannel"
ref="MessageProcessor" output-channel="nullChannel" />
- 如何在 Java DSL 中调用 ServiceActivator 方法?我正在考虑使用
.handle()
,但参数应该是什么? - 使用Java DSL 时是否有
null
频道的概念?如果是,我们如何指定它?
这个这个 handle()
变体:
/**
* Populate a {@link ServiceActivatingHandler} for the
* {@link org.springframework.integration.handler.MethodInvokingMessageProcessor}
* to invoke the discovered {@code method} for provided {@code service} at runtime.
* @param service the service object to use.
* @return the current {@link BaseIntegrationFlowDefinition}.
*/
public B handle(Object service) {
因此,您只需将 MessageProcessor
自动装配到具有 IntegrationFlow
定义的 class 或直接连接到 inputFlow()
bean 定义。那么你就这样做:
.channel(theOtherChannel()))
.handle(messageProcessor)
.get();
nullChannel
中不需要 void
return 类型的服务激活器。当遇到 void
或 null
回复时,流程无论如何都会在那个点停止。
在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl-handle