领域驱动设计传递事件以分离限界上下文
MVC 中的用户操作应生成一个事件,该事件将传递给远程(同一 LAN)事件处理程序。
我测试过的:
- MVC:触发并忘记服务调用(异步)->
- (IIS 托管)收集数据并填充消息的 WCF ->
- 通过 EasyNetQ/RabbitMQ ServiceBus 发送 ->
- 该事件由处理事件及其数据的订阅者(使用从 WCF 服务端点初始化的 DI 容器)使用。
如果通过在 MVC 端循环来相当快地调用服务,我做了一些测试以了解它是如何工作的
for (int i = 0; i < 200; i++)
{
...
client.MyServiceMethod(someId, startDate);
...
}
MessageQueue 部分很快,基于它被发送到队列并在同一秒内被订阅者接收的时间戳。循环通过 WCF 服务调用非常慢。循环通过它们需要几秒钟。我尝试从 wsHttpBinding 切换到 netTcpBinding,并在 WCF 中使用 serviceThrottling。
WCF 不是强制性的,但似乎一个单独的事件处理项目(在发布者端)将是有益的,并且可以物理地位于 MVC 应用程序的其他位置(减少负载等)。WCF 是否适用于这种情况,或者我应该尝试使用 Windows 服务或其他一些自托管的控制台应用程序等,或者可能使用 MVC 中的线程来生成事件数据,还是有更好的场景?这种事件处理系统的最佳实践是什么?基本上,让某些东西生成事件数据似乎是有益的,因为它必须在某处进行处理,同时又不会减慢最终用户正在使用的 UI。