【发布时间】:2015-08-21 10:37:55
【问题描述】:
我必须集成的一个系统涉及以下过程:
- 订阅来自 MegaCorp 的关于“foo”的消息。 (作为订阅的一部分,提供了一个回调方法,用于 通知。)
- 通过回调方法等待通知
- 退订关于“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