0

经过长时间的研究,我仍然没有可以接受的解决方案。

意图:我正在尝试使用多个端点/组件来生成与专有内容的交换。(图片中第一行第一列

因此交换应该由规范化器/翻译器规范化(图片中的第一行第二列

最后应该处理这个标准化的数据。(保存到数据库,做了一些聚合,计算一些结果)。

生成结果后,应该生成一个全新的交换并将其填充到路由中,该处理器位于“from”语句中。(第 2 行)-> 数据应转换为专有数据-> 发送到端点

问题和初步调查结果

  • 处理器无法直接位于“from”语句中。我只找到了一些“from (direct:somemessages)”方式的解决方法,它是由 to(direct:somemessages) 在处理器中创建的

  • 处理器可以是作为具有端点的组件的程序。并且异步消息可以与相应的消费者一起发布

进站路线示例(第一行

  <route id="bar">
        <from uri="mqtt"/>
        <to uri="TranslateMQTT2MyModel"/>
        <to uri="ProcessData"/>
    </route>

示例路线传出(我想拥有)(第 2 行

  <route id="out">
        <from uri="ProcessData"/>
        <to uri="TranslateMyModel2MQTT"/>
        <to uri="mqtt"/>
    </route>

那么我怎样才能达到我的目的呢?我的两个结果之一是一个好的解决方案吗?

原理图工作流示例

4

1 回答 1

0

您可以编写一个作为消费者的“ProcessData”组件,但我认为您不需要这样做。

我认为您可以使用 SEDA 组件的异步功能,所以我认为您正在寻找的是:

<route id="bar">
    <from uri="mqtt"/>
    <to uri="TranslateMQTT2MyModel"/>
    <to uri="seda:processAndReply"/>
</route>

<route id="out">
    <from uri="seda:processAndReply" />
    <to uri="ProcessData"/>
    <to uri="TranslateMyModel2MQTT"/>
    <to uri="mqtt"/>
</route>

SEDA 组件的工作方式与您描述的直接类似,但直接是同步的,而 SEDA 是异步的。(如果您需要在具有相同 JVM 的 Camel 上下文之间进行链接,还要注意 VM 和 Direct-VM 组件)。

于 2018-12-29T10:50:08.643 回答