我正在将整体式应用程序转换为微服务。 我已经在 Service Fabric 中设置了一个 API 管理层和一个服务总线。 这个想法是使用消息与微服务通信,这样它们就不知道彼此。
当一个微服务需要信息时,它会将消息发布到服务总线,该消息得到满足,并发送并关联回复。
唯一的问题是 API 管理将消息发布到服务总线并在不等待回复的情况下返回,因此客户端不会获得响应。
有没有办法让 API 管理等待回复?
这需要介于两者之间的某种经纪人服务吗?
是否最好在每个微服务上有一个 REST 层,API 管理可以调用该层,然后服务将使用服务总线?
感谢您的任何帮助。
更新:
我认为让 API 管理等待的唯一方法是使用逻辑应用程序。 不确定这一点。
有 Azure 专家吗?
APIM 的行为方式实际上是预期的。
服务总线旨在分离不同的(微)服务,并且本质上没有请求-响应操作风格,尽管可以通过这种方式实现。
这是设计/实现系统的一种方法
首先,对于使用服务总线进行请求-响应样式操作,实现该操作的一种方法是使用两个队列。
一个用于发送请求(以及一些唯一 ID - GUID 即可),另一个用于接收响应(再次包含请求中发送的唯一 ID)。
不要让 APIM 与服务总线配合使用,而是调用逻辑应用或函数来为你执行此操作。
最后,等待响应取决于您的用例。
如果任务运行时间很长,最好遵循逻辑应用和函数(使用持久函数)实现的异步模式,该模式会立即返回
202 Accepted
响应,其中包含客户端可以轮询更新的状态 URI。但是,如果是快速响应(在 HTTP 请求超时之前),则可以等待响应服务总线消息,然后返回响应。为此,逻辑应用或函数必须轮询/等待具有相同唯一 ID 的服务总线消息,然后返回响应。