当前位置: 首页 > 知识库问答 >
问题:

Spring集成线丝锥松弛通知

百里弘致
2023-03-14

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

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

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

@Bean
MessageChannel slackChannel() {
  return MessageChannels.queue(SLACK_CHANNEL).get();
}

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

@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具有发送消息的所有逻辑。我喜欢这种方法,因为我可以从不同的地方向slack通道发送消息,并以相同的方式进行处理,但我不确定让私有方法sendSlack返回IntegrationFlow并拥有订阅该通道的bean是否合适。简化为更好吗?

private IntegrationFlow sendSlack(String message) {
    return sf -> sf
            .transform(Message.class, m -> MessageBuilder.createMessage(message, m.getHeaders()))
            .handle(slackService, "send");
}

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

共有1个答案

华良平
2023-03-14

我要说的是,这不是使用电线抽头的方式,因为它是设计的。见文件:https://www.enterpriseintegrationpatterns.com/patterns/messaging/WireTap.html

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

根据您当前的配置,您只需忽略发布到该连接点的原始消息,而是为该工厂方法创建自己的参数。本质上,它只是一个静态值,所以用这样一个复杂的分布式逻辑来发送一个静态字符串是毫无意义的。(在这一点上,我可能是错的,您发送给slack的消息并不像问题中的代码片段那样静态…)

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

 类似资料:
  • 本文向大家介绍Bosun Slack Notifications 松弛通知,包括了Bosun Slack Notifications 松弛通知的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我对Spring靴不熟悉。我想在春靴中实现宽松的束缚。根据本文档https://docs . spring . io/spring-boot/docs/current/reference/html/boot-features-external-config . html # boot-features-external-config-relaxed-binding。它说,即使我们的名字中有破折号。

  • 我想了解Spring集成中如何处理消息:串行或并行。特别是我有一个带有轮询器和HTTP出站网关的入站通道适配器。我猜拆分器、变压器、标头丰富器等不会产生自己的线程。 我可能错过了,但是这些细节在留档的某个地方指定了吗? 还可以通过编程方式获取系统中的所有频道吗?

  • 时间窗口约束由 时间维度。积云(节点)。设置范围(time\u window[0]、time\u window[1]) 和时间维度 路由。添加维度(evaluator、slack\u max、capacity、fix\u start\u cumul\u to\u zero、name) 累积值(节点)的允许值与松弛最大值之间的关系是什么?例如,假设时间窗口为,松弛时间为。这是否意味着累积风险值45也

  • 我正在使用slack slash commands API,到目前为止,它在我的bot(https://github.com/jesseditson/slashbot)上运行得很顺利,除了一件事: 在其他斜杠集成(例如giphy)中,当用户键入斜杠命令时,该命令将输出到公共聊天,然后发布响应: 但是,当我使用自定义斜杠命令时,原始命令根本不会输出: 我目前正在使用传入的Webhooks API将消

  • 我试图使用Slack自定义命令,但不太确定如何使用延迟消息,因为Yoda Speak外部API需要超过3秒来响应。 我做了以下工作: 在我的例子中发送了slack命令,并收到了. 使用以下内容以下内容发送到响应URL。 null 我仍然得到相同的错误“该死-那个斜杠命令不起作用(错误消息:)。在slash-command管理命令”