将 Rebus 与传输 RabbitMQ 一起使用时,远程过程调用的典型实现是什么?

What is a typical implementation of Remote Procedure Call when using Rebus with transport RabbitMQ?

RPC 的不方便实现在这里:https://github.com/gaevoy/Gaev.Rpc/tree/master/Gaev.Rpc.Rebus。 这个实现有很多缺点。例如,当客户端成百上千时,他们将收到不到 1% 的有用响应,并且服务器将发送比所需数据多数百倍的数据。

使用 Rebus 和传输 RabbitMQ 时,远程过程调用的典型实现是什么?类似于 the tutorial on RabbitMQ.

中给出的 RPC 实现

理想情况下,我希望实现 returns 处理请求时服务器上可能发生的强类型任务结果或异常,类似于 WCF 中的情况。

请不要使用 Rebus 来实现 RPC(*)。

事实上,我不建议您使用任何一种基于持久消息传递的技术来实现假装同步的东西——恕我直言,使用像 RabbitMQ 这样的持久集中式代理来实现是非常愚蠢的"reliable HTTP"(但这是一个太大的讨论,无法包含在这里......)

我特别建议您不要以任何方式使用 Rebus 来实现 RPC 的原因是,Rebus 充满了异步性和持久性的思想,在需要达到 [=12] 的地方牺牲了原始性能=].

虽然肯定有可能实现基于 Task 的 request/response-type of API(这可能是具有本地代理的成熟 RPC 协议的基本构建块和编组方法调用),这几乎违反了 Rebus API 的固有意图,因此它会增加更多的开销。

总结:Rebus 是用来做异步消息的,建议使用轻量级的request/response-type通信通道(如HTTP)来实现"remote method calls".

我希望这是有道理的:)


(*) "RPC",我假设你的意思是一个程序 API 假装是函数调用,即与调用站点同步(可能仍然是 Task -based)