【问题标题】:SOA / SEDA - Cyclic ArchitectureSOA / SEDA - 循环架构
【发布时间】:2012-02-25 01:06:27
【问题描述】:

我有一个现实生活中的 SOA 问题,我似乎无法以干净的 SOA 方式解决。

我有许多分布式的“更新事物”消息生产者,这些消息被“事物管理器”使用。

“事物管理器”的功能之一是向主题发布“事物”已更改的通知。这允许其他感兴趣的服务对更改做出反应。

“更新事物”生产者之一本身就是该主题的听众。它只对来自其他系统的“事物更新”真正感兴趣。但它发现自己消耗和处理来自“事物管理器”的更新,这是它自己首先引起的(因此已经知道)。幸运的是,反馈回路在那一点上被打破了。

如何以干净的 SOA 方式最好地解决这个问题?我不会将元数据添加到指示消息源的消息中作为一个干净的解决方案;消息消费者永远不必知道消息来自哪里或要去哪里。

【问题讨论】:

    标签: architecture soa


    【解决方案1】:

    当“更新事物”订阅“事物管理器”时,它应该能够针对想要订阅的“事物”设置过滤器。所有“更新事物”都应设置的一个过滤器是不要向我发送任何源自我自己的东西。那么“更新事物”将不知道消息的来源,但“事物管理器”会。

    【讨论】:

    • 感谢 Kevin - 无论来源如何,数据的性质都是相同的。因此,数据结构本身没有任何东西可以实现选择性消费。我认为您当时的建议是让原始更新的发起者标记消息头——从 SOA 的角度来看,这对我来说是错误的。原因之一是在事件源和事物管理器之间经常有很多进程 - 每个进程都必须知道携带元数据而不是用自己的 ID 替换它......
    • 它不必放在邮件头中。 “事物管理器”必须有一个订阅列表才能知道向谁发送消息。在此列表中标识要调用的其他服务的内容。将其包含在数据结构中。如果您正在使用不受您控制的服务并且具有无法更改的明确定义的合同,那么问题与您从头开始设计的系统不同。也许我做了一个很大的假设,即您正在使用发布/订阅设计模式。
    • 啊,但这将是一个点对点架构,不幸的是我们有一个发布/订阅(基于主题,而不是基于队列)架构。事物管理者不需要知道它需要告诉谁,它只是做自己的工作,事物订阅并在他们愿意时做出反应。也许这变成了一个问题,即基于主题的发布/订阅对于大型 SOA 系统来说是好事还是坏事? P2P 变得脆弱,但可以轻松跟踪和监控工作流。 Pub/Sub 较少,但更容易发展系统。但显然,引入反馈循环也很容易......
    猜你喜欢
    • 2014-09-12
    • 2013-04-22
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2011-06-14
    • 2012-02-07
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多