【发布时间】:2021-09-19 07:07:18
【问题描述】:
对于我正在构建的应用程序,我需要能够发送松弛消息,指示已处理文件的进度和成功/失败。
我没有找到一种完全直接的方法,所以我正在做以下事情:
声明一个队列通道来接收需要发送的消息
@Bean
MessageChannel slackChannel() {
return MessageChannels.queue(SLACK_CHANNEL).get();
}
发送到该频道的每条消息都将作为 Slack 消息发送。为了在那里推送消息,我正在做一个wireTap,比如:
@Bean
IntegrationFlow startFlow() {
return IntegrationFlows
...
.wireTap(sendSlack("A nice message describing what's happening")
...
}
private IntegrationFlow sendSlack(String message) {
return sf -> sf
.transform(Message.class, m -> MessageBuilder.createMessage(message, m.getHeaders()))
.channel(SLACK_CHANNEL);
}
最后,松弛的流程:
@Bean
IntegrationFlow slackFlow() {
return IntegrationFlows.from(SLACK_CHANNEL)
.handle(slackService, "send")
.get();
}
SlackService 类具有发送消息的所有逻辑。我喜欢这种方法,因为我可以从不同的地方将消息发送到松弛通道并以相同的方式进行处理,但我不确定是否可以让私有方法 sendSlack 返回一个 IntegrationFlow 并拥有那个订阅了频道。简化成会更好吗?
private IntegrationFlow sendSlack(String message) {
return sf -> sf
.transform(Message.class, m -> MessageBuilder.createMessage(message, m.getHeaders()))
.handle(slackService, "send");
}
我不需要这个选项的队列通道,但我不确定是否正确使用了wireTap。
【问题讨论】:
标签: java spring spring-integration spring-integration-dsl