Esb 使用asp.net的rebus最佳实践?

Esb 使用asp.net的rebus最佳实践?,esb,servicebus,rebus,Esb,Servicebus,Rebus,我有以下问题 [1] 。有一个管理系统需要最频繁的CRUD操作。 例如int GetUserLimit()、List GetUserList()、int AddNewUser(用户用户)、bool DeleteUser()、IsAuthenticated(字符串用户名、字符串密码) 对于上面列出的函数,web应用程序可能需要等待一些返回 在这种情况下,是直接为web应用程序提供web服务更好,还是我们不公开这些web服务,而是web应用程序通过请求/应答模式与EBS通信更好 解决方案1: 解决

我有以下问题

[1] 。有一个管理系统需要最频繁的CRUD操作。 例如int GetUserLimit()、List GetUserList()、int AddNewUser(用户用户)、bool DeleteUser()、IsAuthenticated(字符串用户名、字符串密码)

对于上面列出的函数,web应用程序可能需要等待一些返回

在这种情况下,是直接为web应用程序提供web服务更好,还是我们不公开这些web服务,而是web应用程序通过请求/应答模式与EBS通信更好

解决方案1:

解决方案2:

如果web应用程序向一个组件a“发送”一个命令,那么组件a会将一条消息回复到一个名为“webmsgqueue”的队列,或者将一条消息推送到nosql服务器。web应用程序使用ajax轮询方法检查“webmsgqueue”或nosql服务器中的mssage


[2] 如果我们正在查询或上传的数据很大,那么选择web服务是否更好

如果我正确理解了您的问题,那么您是在问使用服务总线实现CRUD API是否合适,可能需要传输相当大的数据,并包括确定是否可以对某些用户的凭据进行身份验证的能力

我不认为我会这样做-在我看来,你最好使用一个善于传输数据的同步API(“同步”)从某种意义上说,所有操作都具有1:1的请求/响应相关性,即使您的客户端库可能仍然具有异步方式来进行同步调用—它甚至可以提供高效的
async
/
wait

另一个问题是,实际上是否最好将远程处理全部抛弃,让web应用程序能够直接对数据库执行CRUD操作。通过将实现隐藏在接口后面,仍然可以使应用程序解耦

如果您担心时态解耦,我会说,当您决定公开一个返回类型不同于
void
;)的API时,您已经失去了时态解耦


这有意义吗?

对不起,我想让你明白这一点,所以我更新了我的问题。从您的回复中,最好是为这些CRUD操作公开web服务,因为大多数用例可能希望web应用程序等待一些回报。我今天听到一个术语——“CQRS”,您能和rebus谈谈吗?好的,CQRS是一个很大的主题-我建议您用谷歌搜索它,并阅读Udi Dahan、Greg Young、,Rinad Abdullin谈到了这一点——实现CQR有不同的方法,例如,您可能/可能不以异步(也称为“最终一致”)方式进行,您可能/可能不使用事件源,等等。