当一个微服务需要信息时,它会在服务总线上发布一条消息并得到满足,并发送并关联一个答复。
唯一的问题是,API管理将消息发布到服务总线并返回而无需等待答复,因此客户端无法获得响应。
是否可以让API Management等待回复?
这之间是否需要某种经纪人服务?
最好在API管理可以调用的每个微服务上都具有一个REST层,然后这些服务将使用服务总线吗?
感谢您的帮助。
更新:
我认为等待Api Management的唯一方法是使用逻辑应用程序。对此不确定。
那里有Azure专家吗?
答案 0 :(得分:1)
APIM的行为方式实际上是预期的。
Service Bus旨在解耦不同的(微)服务,尽管可以通过这种方式实现,但它固有地没有请求-响应式的操作。
这是设计/实现系统的一种方法
首先,对于Service Bus的请求-响应样式操作,一种实现方法是使用两个队列。
一个用于发送请求(连同一些唯一ID-GUID一样),另一个用于接收响应(再次包含请求中发送的唯一ID)。
不是让APIM与Service Bus一起工作,而是调用为您执行此操作的Logic App或Function。
最后,等待响应取决于您的用例。
如果您的任务运行时间很长,则最好遵循由Logic Apps和函数(using Durable Functions)实现的异步模式,这些函数会立即返回202 Accepted
响应并显示一个状态您的客户端可以轮询更新的URI。
但是,如果响应迅速(在HTTP请求超时之前),则您可以等待响应服务总线消息,然后返回响应。为此,您的Logic App或Function必须轮询/等待具有相同唯一ID的服务总线消息,然后返回响应。