java - 删除对象时微服务的通信

标签 java spring-boot microservices spring-cloud-bus

我们的应用程序由微服务组成。在我这边,在删除某个东西之前,它可能会在另一个微服务中使用。因此,我需要询问另一个微服务,您这边使用了 something。为此,我使用 spring-cloud-event-bus 发送一个事件,我需要等到响应到来,这样我就无法返回任何响应 tu UI。另外,我可以在听众课上做出回应。我怎样才能将消息转发给 Controller 。我如何管理流程。

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

最佳答案

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

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

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

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

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

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

关于java - 删除对象时微服务的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377624/

相关文章:

javascript - 将任何 Nodejs 请求转发到其他服务器

node.js - 将 Express.js 与 React.js 结合使用的推荐方式?

amazon-web-services - 批量工作负载与微服务调用

java - 当应用程序在后台时 Android 服务停止

java - 具有内部对象实例化的组合最佳实践

spring - Jackson 将日期序列化为时间戳

java - 从命令行运行 Spring Boot 应用程序时出错

java - 名称后菜单循环,Java

java - 为什么这个对象在没有组合类的情况下仍然存在,即使它是组合的

java - Spring Boot + 集成测试