【问题标题】:Abstracting out existence of service bus/distributed messaging?抽象出服务总线/分布式消息的存在?
【发布时间】:2011-04-23 01:03:42
【问题描述】:

我现在正在开发一个位于单个进程空间中的系统;我们将其分解为几个进程,最初是在同一个机器上运行,但最终分布在几台不同的机器上。我倾向于使用 ESB(NServiceBus、Rhino ESB),或者可能会使用 WCF + 队列来处理我自己的应用程序的发布/订阅和请求/响应场景。

但是,我在抽象方面遇到了困难:我不希望各种组件知道它们正在通过总线进行通信。当前连接各种服务的 API 可以很好地转换为这种模型,但我想对客户端和服务器端隐藏它。没有为客户端和服务器编写大量自定义代理代码,有没有更好的方法来解决这个问题?我意识到 WCF 可以根据服务定义自动生成代理,但我真的很喜欢我通过(比如)rhino servicebus 获得的其他一些东西。

理想情况下,我希望能够仅使用 IoC 交换不同的实现(有和没有 ESB/消息传递层)(知道必须按照惯例对可以跨接口传递的内容施加限制) ,但我不知道该去哪里。我真的更希望不必将当前接口上的每个方法调用都更改为自己的离散消息类。

任何资源/模式/工具可以帮助我做到这一点?如果我不清楚,请提出问题。谢谢。

【问题讨论】:

    标签: c# .net soa abstraction servicebus


    【解决方案1】:

    可能没有一种解决方案/现成的组件可以帮助您。

    问题 1:
    基本问题可以通过 ESB 解决,因为它提供了位置透明度服务聚合。一个常规的 ESB 调解/代理服务使用者和服务提供者之间的请求。
    举个简单的例子:

    Service_A 依赖于 Service_B
    Service_C 依赖于 Service_B
    Service_B 依赖于 Service_D 

    在这种情况下,最好的进步方法是:

    1. Service_AService_C 和@987654325 服务中将Service_BService_D 公开的合同定义为外部依赖(可能作为Web 服务,尽管ESB 支持多种协议) @,并通过 ESB 使用。
    2. 在 ESB 中,首先在同一实例上路由这些服务 Service_BService_D
    3. 如果将Service_DService_B 迁移为不同位置的Service_DxService_Bx,则可以重新配置ESB 以路由到新位置。此外,可以将 ESB 配置为基于某些参数集路由到 Service_BService_Bx(例如,测试数据到 Service_B,生产数据到 Service_Bx

    问题 2:
    国际奥委会的问题可能很难解决;可能不需要。
    我假设客户端不是从已知位置消费,而是被注入服务位置的下落。这实际上将配置传输到客户端。有了这个,对于添加到系统中的每个新客户端,都需要一个单独的配置控件。这可能会导致后勤问题。

    请发布您的最终解决方案,非常想知道您的方法。

    【讨论】:

    • 作为后续行动——我项目的这一部分已经提交,并且仍然是这样。如果/当我们把它捡回来,我会跟进。
    • @Joe,不幸的是,每天都有越来越多的基于 SOA 工具/ESB 的大型企业项目被提交。不好的迹象:表明 IT 部门缺乏资金......
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多