3

我们的应用程序由微服务组成。在我这边,在删除某个东西之前,它可能会在另一个微服务中使用。因此,我需要询问另一个微服务,该东西在您身边使用。为此,我使用 spring-cloud-event-bus 发送一个事件,我需要等到响应到来,所以我无法返回任何响应 tu UI。另外,我可以在侦听器类中进行响应。如何将消息转发给控制器。我该如何管理这个过程。

我有一个想法,但我认为这是不明智的,当删除请求到来时,我将事件发送到另一个微服务,我正在等待响应。我将其他微服务的响应保存到 mongodb 中,对象的 id 将被删除。顺便说一句,控制器检查数据库以获取响应

4

1 回答 1

4

你有一个更大的问题:一个微服务必须根据它不拥有的一段数据做出决定。

该数据最终是一致的。例如,微服务 A 会从微服务 B 获得删除某些内容的权限,但与此同时,微服务 B 的情况会发生变化:您将根据过期信息删除某些内容。

我建议您从整体上看一下您的设计,也许您错过了一些重要的概念,或者将单体拆分为错误的微服务。

如果您仍想保留当前架构,那么我建议保留远程资源使用情况的本地缓存。您将在删除资源之前询问此本地缓存,而无需与其他微服务同步通信。这将使您的系统更简单,也更有弹性。

本地缓存可以使用事件保持最新。每当微服务 B 开始使用资源时,它都会通知微服务 A;当它不再使用该资源时也是如此。使用事件是首选方式。在这里,您可以使用您的事件总线。

或者您可以使用定期运行的后台任务;这样做的优点是微服务 B 保持不变,但缺点是同步之间可能存在很大的时间间隔。

于 2019-01-27T09:41:50.813 回答