【问题标题】:Integrating with a system that may or may not reply与可能会或可能不会回复的系统集成
【发布时间】:2015-08-21 10:37:55
【问题描述】:

我必须集成的一个系统涉及以下过程:

  1. 订阅来自 MegaCorp 的关于“foo”的消息。 (作为订阅的一部分,提供了一个回调方法,用于 通知。)
  2. 通过回调方法等待通知
  3. 退订关于“foo”的消息。

但是,有些情况下没有通知。处理这个问题的最佳方法是什么?我怀疑这有一个 EIP,但我还没有找到。

我们采用的方法涉及使用 Apache Camel,如下所示:

A路

  • 订阅有关“foo”的消息。 请求将通知发送到路由 B。
  • 向路由 D 发送 AddSubscription。

Route B(Happy Path - 收到通知)

  • 如果我们收到通知,请对数据执行一些有用的操作。
  • 向路由 D 发送 ReceivedNotification

C路(计时器)

  • 这会每 X 秒向路由 D 发送一个字符串,以确保我们定期退订订阅

Route D(退订)

if (payload instanceOf AddSubscription)
    // Add to ListofSubscriptions with an expiry time
elseif (payload instanceOf ReceivedNotification)
    // Remove from ListOfSubscriptions
    // Unsubscribe
elseif (payload instanceOf String)
    // Remove expired subscriptions from ListOfSubscriptions
    // Unsubscribe
    // Note that we didn't receive a notification

【问题讨论】:

  • 我有点困惑。您订阅,然后期待一条消息并再次取消订阅(="happy path")?我建议使用访问者模式来避免 if-elseif-elseif ...
  • 是的,这就是 API 的工作方式。还有其他用例,例如持续订阅更新,您可以在很长一段时间内保持订阅开放。感谢访客模式提示。

标签: java apache-camel


【解决方案1】:

听起来您可以为此使用Aggregator EIP。您可以将初始订阅交换与通知相关联。有一个 completionTimeout 选项。

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2021-06-12
    • 1970-01-01
    • 2022-11-14
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多