假设我们说的是一家网店。
如果用户希望为产品付费,则调用支付服务。服务必须同步返回成功或失败。此外,服务还必须保证使用目前的价格。
因此,当前工作流将productIds传递给支付服务。支付服务查询当前价格(来自服务1 SYNCHRON)。支付服务运行支付过程。
工作流程:
Caller (App) -> Payment service -> Product service -> Payment service -> Caller (App) 如何将这种场景优化为异步通信?还是通过rest服务进行同步通信是最好的方式?
发布于 2018-03-30 14:18:39
没有最好的编程方法。一切都取决于情况。我以为你的解释不太清楚。我假设您想说您的工作流->服务2 ->服务1,现在您想要调用服务1异步。
解决方案:如果这是正确的,那么我认为您不能使用异步,因为您需要等待服务1返回当前价格才能继续。或者你可以改变你的过程:
您可以从工作流调用您的服务1(传递productId并获取当前价格)。获得所有信息后,调用Service 2并传递参数中的所有数据。这样,您就不必担心同步和异步。
private void YourProcessFlow() //inside your workflow
{
var currentPrice = InvokeService1(12345);
InvokeService2(12345, currentPrice);
}Alternative:这里是异步代码,以防万一,如果您想在其他地方使用它:
using System.Threading.Tasks;
new Task(() => { InvokeService1(12345);}).Start();
private int InvokeService1(int productId)
{
// Invoke your Service 2 here
return price;
}这里,第1行将调用您的方法,然后转到下一行代码。这将不会等待方法返回值。就像我说的,您需要currentPrice才能继续,而这不能被异步完成。
想法:我不知道你的全部情况,但如果你的服务/工作流还有其他事情要做,而且它们不依赖于彼此的结果,那么你可以使用并行编程的概念。你可以用谷歌搜索更多信息。
https://softwareengineering.stackexchange.com/questions/368593
复制相似问题