Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 是否存在手动将消息队列通信与请求/响应同步的模式?_Asynchronous_Design Patterns_Synchronization - Fatal编程技术网

Asynchronous 是否存在手动将消息队列通信与请求/响应同步的模式?

Asynchronous 是否存在手动将消息队列通信与请求/响应同步的模式?,asynchronous,design-patterns,synchronization,Asynchronous,Design Patterns,Synchronization,让我们想象一下,我有一个RESTAPI,其端点/API/status。访问此端点时,API向消息队列发送一条消息,请求其他服务的状态 然后作为响应,服务将一条消息及其状态发送到RESTAPI侦听的队列。因此,它是一条请求状态的消息和一条回复消息 我的问题是:是否有一种设计模式可以将这种方法的异步特性转换为API中的同步特性?换句话说:GetStatus(…)下面的伪代码中的方法可以实现通过多个消息队列甚至发布/子系统的通信来同步状态的获取 var statusRequestMsg=“获取_状态”

让我们想象一下,我有一个RESTAPI,其端点
/API/status
。访问此端点时,API向消息队列发送一条消息,请求其他服务的状态

然后作为响应,服务将一条消息及其状态发送到RESTAPI侦听的队列。因此,它是一条请求状态的消息和一条回复消息

我的问题是:是否有一种设计模式可以将这种方法的异步特性转换为API中的同步特性?换句话说:
GetStatus(…)
下面的伪代码中的方法可以实现通过多个消息队列甚至发布/子系统的通信来同步状态的获取

var statusRequestMsg=“获取_状态”;
var statusResponseMsg=GetStatus(statusRequestMsg);
我知道如何在代码中解决这个问题,但我很好奇是否有一种设计模式引入了一种通用的方法

我在谷歌上搜索了很多,但我发现的唯一想法是在本文中对实现这一点的方法进行了非常技术性的解释:

请注意我知道这不是完美的API设计,有更好的方法来实现这个示例。我创建了上面的示例来帮助我说明我的问题。此外,我还了解到一些AMQP实施。(如RabbitMQ)提供了一种将MQ通信同步到请求/响应样式的方法


提前谢谢。

您考虑过这样的事情吗:

  • 请求进来了
  • 创建相关id
  • 将相关id作为通过队列发送的消息的一部分发送到其他服务
  • 开始在某个数据存储(比如Redis)中轮询该id
  • 时间流逝

  • 将相关id与通过队列发送的消息中的请求结果一起发送回发起服务
  • 工作读取队列将数据存储中相关id的值设置为异步请求的结果
  • 轮询发现结果并作为对请求的响应返回

  • 那行吗?

    是的,建议不错。事实上,我就是这样实现的,但没有Redis atm。我的问题是,这种在服务之间同步请求响应(如消息)的方法是否真的有一个模式名。我不知道这种方法的同步端有什么名称。但是,异步位称为异步请求-响应模式:或者,您是否考虑过远程过程调用而不是异步消息?