0

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

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

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

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

4

1 回答 1

1

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

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

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

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

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

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

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

于 2011-04-25T20:52:04.110 回答