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

在Spring Integration DSL中使用带丢弃通道的滤波器

梁丘高朗
2023-03-14
StandardIntegrationFlow flow = IntegrationFlows.from(...)
                    .filter(messagingFilter)
                    .transform(transformer)
                    .handle((m) -> {
                        (...)
                    })
                    .get();
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;
}

这既难看又冗长,所以问题是,我在这里做错了什么,我应该如何以更好、更干净、更优雅的解决方案来做?

干杯。

共有1个答案

庞乐池
2023-03-14

您的问题是,您没有看到过滤器是一个EI模式实现,它所能做的最多是将丢弃的消息发送到某个通道。它不会记录任何东西,因为这种方法已经不是基于消息传递的了。

您需要的用例最简单的方式如下:

.discardFlow(df -> df
        .handle(message -> log.warn((String) message.getPayload().get("msg-failure")))))

你的逻辑就是记录。其他一些人可能会做更复杂的逻辑。因此,最终您将习惯于endpoint之间的通道抽象。

 .filter(messagingFilters, fs -> fs.discardFlow( i -> i.log(message -> (String) message.getPayload().get("msg-failure"))))
 类似资料:
  • 问题内容: 我基本上想做类似的事情: 这是一个示例,我不需要获取有关如何解决该特定问题的答案,它只是一个示例,它说明了我所追求的东西。 问题答案: 任何中间步骤都会影响整个流管道。您的愿望背后没有可识别的规则,即该步骤会影响随后链接的操作,但不会影响操作。如果要具有条件函数,则将其实现为这样会更加清晰: 这可以用作 要么 要么 请注意,在这些用例中,如何立即识别出传递给的谓词和函数属于同一作用域,

  • 如何在我当前的android代码中实现IIR带通滤波器?我有一个android应用程序,它可以录制音频(实际上是频率)并将其保存在一个文件夹中。wav文件。 我已经设法在网上找到了一个IIR过滤器库,但我不确定如何在代码中实现它。 https://github.com/ddf/Minim/blob/master/src/ddf/minim/effects/BandPass.java https:/

  • 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)[1] 来应对过拟合问题。丢弃法有一些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。 方法 回忆一下,“多层感知机”一节的图3.3描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元$h_i$($i=1, \ldots, 5$)的计算表达式为 $$h_i = \p

  • 如何配置我的以丢弃未使用的消息? 我不希望我的客户端在订阅服务器队列时收到服务器发送的所有旧消息。 这是我目前的经纪人: 目前,我的服务器首先启动并发送大约10条消息。之后,我的客户机订阅队列,并接收在没有客户机订阅时发送的所有10条消息。我不想要这种行为。 解决 然后我发出这样一条信息: 解决方案2 我创建了一个主题而不是队列。 http://Java sample approach . com

  • 问题内容: 常规语法生成器不适用于示例步骤。我已经选择,然后在字段中输入,然后什么也没有显示。 詹金斯版本:2.7 问题答案: 您可以使用嵌套在最终具有您要设置的密钥的方法。我仍然没有可靠的方法来查找每个键的正确语法。经过大量的猜测和检查: 请注意,此代码段适用于脚本语法。