我们正在计划我们的系统拥有一组可公开访问的服务,这些服务调用一组内部服务,所有服务都使用ServiceStack实现。
我的问题是,这种跨服务通信的最佳方法(在性能,稳定性和代码可维护性方面)是什么?
E.g。我的公共服务应该使用ServiceStack客户端调用内部服务还是使用Rabbit / Redis消息传递系统?如果是后者,我可以异步调用两个或多个内部服务并等待两者的响应吗?
答案 0 :(得分:1)
对于单向通信Messaging offers a lot of benefits,如果选择安装Rabbit MQ Broker,Rabbit MQ可提供更多的工业强度选项。
对于请求是瞬态且两个端点都需要启动的请求/回复服务,键入的C# Service Clients允许更少的移动部件进行更直接/可调试的点对点通信。
使用客户端异步API可以轻松地并行进行多个调用,例如:
//fire off to 2 async requests simultaneously...
var task1 = client.GetAsync(new Request1 { ... });
var task2 = client.GetAsync(new Request2 { ... });
//additional processing if any...
//Continue when first response is received
var response1 = await task1;
//Continue after 2nd response, if it arrived before task1, call returns instantly
var response2 = await task1;
上述代码在Request1完成后继续,您也可以使用Task.WhenAny()来处理首先完成的请求。