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

如何创建自定义组件并将其添加到Spring Java dsl中的flow中?

庄星汉
2023-03-14

我想创建一个客户组件 trace() 并希望在流程中使用它。

类似于 CustomFlows.from(“”).trace().get();

你能建议我怎么做吗?似乎集成流定义是封闭的,不可扩展。

共有1个答案

何安宜
2023-03-14

这是一个有趣的技术...但是现在我不相信我们应该允许FlowBuilder进行这样的扩展......请随时就此事提出GitHub问题,我们将来会看到如何处理。

对于这样的扩展,您应该了解框架如何在后台工作。

让我们考虑最简单的组件 .bridge()!它的目标是将消息从一个通道传输到另一个通道。因此,此组件是请求-答复类型,必须与其两侧的两个通道绑定:

.channel()
.bridge()
.channel()

当然,DSL可以在那些我们没有明确定义的地方创建DirectChannel。或者,如果我们以结束 - .get() 完成流程,我们也可以依赖 replyChannel 标头。等等。

BridgeHandler 是一个开箱即用的组件,这就是我们为它提供显式 DSL 方法的原因。

但从另一边来看,它有非常简单的代码:

public class BridgeHandler extends AbstractReplyProducingMessageHandler {

    @Override
    public String getComponentType() {
        return "bridge";
    }

    @Override
    protected Object handleRequestMessage(Message<?> requestMessage) {
        return requestMessage;
    }

    @Override
    protected boolean shouldCopyRequestHeaders() {
        return false;
    }
}

如您所见,它是一个消息处理程序实现,因此我们可以直接像这样使用它:

.handle(new BridgeHandler())

从这里开始,我向您提出的问题是:如果您可以使用现有功能满足您的要求,那么给框架带来一些复杂性的原因是什么:实现MessageHandler,扩展AbstractPayloadTransformer。或者甚至只是忘记它们,并使用 POJO 方法调用执行所有操作,就像从 DSL 1.1 开始的这样:

@Override
protected IntegrationFlowDefinition<?> buildFlow() {
        return from(this, "messageSource", e -> e.poller(p -> p.trigger(this::nextExecutionTime)))
                .split(this)
                .transform(this)
                .aggregate(a -> a.processor(this, null), null)
                .enrichHeaders(Collections.singletonMap("foo", "FOO"))
                .filter(this)
                .handle(this)
                .channel(c -> c.queue("myFlowAdapterOutput"));
    }

请参阅我关于此事的文章。

所以,你应该找到很多论据来说服我以这种方式扩展框架:-)。

 类似资料:
  • 问题内容: 我已经构建了自己的自定义react-bootstrap Popover组件: 该组件的呈现方式如下: 现在,我想向组件中添加自定义道具,例如:我的文字,并使用新道具在弹出框中设置一些内容,例如- 但随后我在浏览器中收到此警告: 警告:标签上的未知道具。从元素中删除这些道具。 现在,我想我可以删除零件并逐个插入所有原始道具,而无需自定义道具,但是这样我就失去了“淡入淡出”效果,这也是处理

  • 我需要一个以编程方式插入的log4j2的自定义appender(我不想更改log4j2.xml,因为我需要默认使用该appender)。对于自定义appender,似乎有一个答案,即如何在log4j2中创建自定义appender?,但是如何在运行ti,e时添加appender呢?

  • 我目前已经在iReport中打开了一个。jasper和。jrxml文件来编辑报告。我实际上只是添加一个新字段来保存变量“email”。 我设置了字段和变量。然而,当我编译时,我得到了这些错误。

  • 问题内容: 如何添加自定义CSS文件?以下配置对我不起作用: 结果: 问题答案: 一种简单的方法是将其添加到您的: 然后将文件放入文件夹。

  • 问题内容: 我是Java的初学者,正在尝试创建自定义类的数组。假设我有一个名为car的类,并且我想创建一组称为Garage的汽车。如何将每辆车添加到车库?这就是我得到的: 问题答案: 如果要使用数组,则必须保留一个包含车库中汽车数量的计数器。最好使用而不是数组:

  • 好吧,假设我有两节课。一个顾客和一个商店。 我的问题是:

  • 我想从maven转到gradle。 在pom中。xml文件我有一个自定义存储库: 它是一个简单的超文本传输协议Web服务器,带有. jar文件。 如何将此自定义回购添加到生成中。格拉德尔? 我尝试了此代码,但不起作用: 我的定制repo不是maven repo,但我在Gradle文档中没有找到可以指定URL的其他示例。

  • 我正在学习JSwing,我发现了GridBagLayout。 我试图创建一个简单的计算器,我添加了多个JPanel设置每个首选大小,但当我调整窗框大小时,面板也不会调整大小。然后我发现了Gridbag的布局。 但我得到的是:GridBagLayout的计算器错误 } 应该是这样的:正确的计算器 我试过: 要锚定。。。但它不起作用, 创建多个JPanel(一个带有GridLayout),但不起作用