首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring integration wire tap松弛通知

Spring integration wire tap松弛通知
EN

Stack Overflow用户
提问于 2021-07-09 04:01:45
回答 1查看 50关注 0票数 1

对于我正在构建的应用程序,我需要能够发送松弛消息,指示已处理文件的进度和成功/失败。

我没有找到一种完全直接的方法,所以我做了以下事情:

声明队列通道以接收需要发送的消息

代码语言:javascript
复制
@Bean
MessageChannel slackChannel() {
  return MessageChannels.queue(SLACK_CHANNEL).get();
}

发送到该通道的每条消息都将作为Slack消息发送。为了在那里推送消息,我做了一个wireTap,比如:

代码语言:javascript
复制
@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);
}

最后,松弛的流程:

代码语言:javascript
复制
@Bean
IntegrationFlow slackFlow() {
  return IntegrationFlows.from(SLACK_CHANNEL)
            .handle(slackService, "send")
            .get();
}

SlackService拥有发送消息的所有逻辑。我喜欢这种方法,因为我可以从不同的地方向松弛通道发送消息,并以相同的方式进行处理,但我不确定是否可以让私有方法sendSlack返回一个IntegrationFlow,同时拥有订阅该通道的bean。简化为是不是更好?

代码语言:javascript
复制
private IntegrationFlow sendSlack(String message) {
    return sf -> sf
            .transform(Message.class, m -> MessageBuilder.createMessage(message, m.getHeaders()))
            .handle(slackService, "send");
}

我不需要使用此选项的队列通道,但我不确定是否正确使用了wireTap。

EN

回答 1

Stack Overflow用户

发布于 2021-07-09 04:19:51

我要说的是,这不是使用电线窃听的方式,因为它是设计的。请参阅文档:https://www.enterpriseintegrationpatterns.com/patterns/messaging/WireTap.html

如何检查在点对点通道上传输的消息?

根据您当前的配置,您只需忽略发布到该wire-tap的原始消息,而是为该sendSlack()工厂方法创建自己的arg。它本质上只是一个静态值,所以让如此复杂的分布式逻辑仅仅发送一个静态字符串是没有意义的。(在这一点上我可能是错的,您对slack的消息并不像问题中的代码片段那样是静态的…)

您可以考虑使用@MessagingGateway作为契约来区分业务逻辑和隧道业务逻辑:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#gateway

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68308006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档