如何在 Spring 集成 Java DSL 中创建 MessageSelector 过滤器?
How to create MessageSelector filter in Spring Integration Java DSL?
我尝试通过 lambda 表达式创建消息过滤器,以根据 header 值评估
过滤消息
IntegrationFlows.from(inputChannel())
.filter((Message<?> m) -> { return m.getHeaders().get(...)...; })
.transform(...)
.channel(outputChannel())
.get();
但出现异常
Caused by: java.lang.ClassCastException: com.<...skipped...>.BusinessPayloadData cannot be cast to org.springframework.messaging.Message
只有这个定义对我有用
IntegrationFlows.from(inputChannel())
.filter(new MessageSelector(){
@Override
public boolean accept(Message<?>message){
return ...;
}
})
.transform(...)
.channel(outputChannel())
.get();
是否可以通过 lambda 表达式创建 MessageSelector
实例?
像这样:
.filter(Message.class, m -> m.getHeaders().get(...)...)
还有一种重载方法可以推断目标方法调用的对象类型。
查看 LambdaMessageProcessor
源代码。由于我们无法直接从 Lambda 推断参数类型 Java: get actual type of generic method with lambda parameter,我们必须像使用另一个顶级类型参数那样做。
否则它最终只会像 Object
一样,目标方法调用将其视为 payload
.
的类型
我尝试通过 lambda 表达式创建消息过滤器,以根据 header 值评估
过滤消息IntegrationFlows.from(inputChannel())
.filter((Message<?> m) -> { return m.getHeaders().get(...)...; })
.transform(...)
.channel(outputChannel())
.get();
但出现异常
Caused by: java.lang.ClassCastException: com.<...skipped...>.BusinessPayloadData cannot be cast to org.springframework.messaging.Message
只有这个定义对我有用
IntegrationFlows.from(inputChannel())
.filter(new MessageSelector(){
@Override
public boolean accept(Message<?>message){
return ...;
}
})
.transform(...)
.channel(outputChannel())
.get();
是否可以通过 lambda 表达式创建 MessageSelector
实例?
像这样:
.filter(Message.class, m -> m.getHeaders().get(...)...)
还有一种重载方法可以推断目标方法调用的对象类型。
查看 LambdaMessageProcessor
源代码。由于我们无法直接从 Lambda 推断参数类型 Java: get actual type of generic method with lambda parameter,我们必须像使用另一个顶级类型参数那样做。
否则它最终只会像 Object
一样,目标方法调用将其视为 payload
.