【问题标题】:Apache Camel asynchronus two way messagingApache Camel 异步双向消息传递
【发布时间】:2018-12-16 21:17:28
【问题描述】:

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

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

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

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

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

问题和初步调查结果

  • 无法直接在“from”语句中找到处理器。一世 仅以“从”的方式找到了一些解决方法 (direct:somemessages)" 在处理器中由 to(direct:somemessages)

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

进站路线示例(第一行

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

示例路线传出(我想要)(第二行

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

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

Example of schematic workflow

【问题讨论】:

    标签: java apache-camel enterprise-integration


    【解决方案1】:

    您可以编写一个作为消费者的“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 组件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多