我不知道这个问题是关于spring-integration、spring-integration-dsl还是两者都涉及,所以我添加了这两个标签...
今天我花费了相当多的时间,首先使用一个过滤器创建了一个简单的流程
StandardIntegrationFlow flow = IntegrationFlows.from(...)
.filter(messagingFilter)
.transform(transformer)
.handle((m) -> {
(...)
})
.get();
messagingFilter是一个非常简单的MessageSelector实现。到目前为止,一切都很好,没有花费太多时间。但是,如果MessageSelector返回false,我想记录一条消息,这就是我卡住的地方。
经过相当长的时间,我最终得到了这个:
StandardIntegrationFlow flow = IntegrationFlows.from(...)
.filter(messagingFilters, fs -> fs.discardFlow( i -> i.channel(discardChannel()))
.transform(transformer)
.handle((m) -> {
(...)
})
.get();
(...)
public MessageChannel discardChannel() {
MessageChannel channel = new MessageChannel(){
@Override
public boolean send(Message<?> message) {
log.warn((String) message.getPayload().get("msg-failure"));
return true;
}
@Override
public boolean send(Message<?> message, long timeout) {
return this.send(message);
}
};
return channel;
}
这样写既难看又啰嗦,那么问题来了,我在这里做错了什么,应该如何更好、更干净、更优雅地解决呢?
谢谢。