rest - Restful API 和事件驱动微服务
问题描述
在事件驱动的微服务系统中,微服务也是 RESTful API 是通常还是最佳实践?
在事件驱动的微服务中,它通常被描述为引发一些事件,而其他一些微服务响应这些事件并执行一些操作。在这种情况下,似乎没有RESTful API中的“资源”概念。如果一个系统是使用restful APIs构建的,这个系统可以称为微服务系统吗?
在事件驱动的微服务的上下文中,restful 的概念还适用吗?当我开始更多地了解事件驱动的微观并且不确定我是否掌握了正确的概念时,我发现自己对这两者有点混淆。
解决方案
在事件驱动架构中,微服务不通过 REST API 进行通信,而是通过消息传递框架(RabbitMQ、Kafka 等)进行通信。正如您正确指出的那样,微服务会对在他们收听的特定主题/频道上收到的消息做出反应。
如果微服务关闭,消息会在消息总线中累积,并由同一个微服务(当它恢复时)或由另一个微服务处理。
如果他们要通过 REST API 进行通信并且微服务已关闭,则您需要使用指数退避策略重试请求并处理许多其他事情。这篇文章很好地解释了这种差异。
一个微服务系统可以完全用 REST 微服务来构建。它只是不遵循事件驱动的方法,而更像是一个同步(请求/响应)模型。您的微服务系统的设计应该与您的应用程序的需求直接相关。
通常使用混合方法:您通过 REST API 与一些微服务进行通信(例如使用认证/自动化微服务),因为您需要尽快得到它们的响应。对于其他事件,您可以通过事件进行通信,通常是当您有即发即弃的事件时,例如日志记录、指标,也许还有存储。
推荐阅读
- python - JSONDecodeError:未终止的字符串开始于:第 1 行第 1531 列(字符 1530)
- typescript - 打字稿:在不使用扩展的情况下抽象/提取部分类功能
- android - 设备不适用于“main.dart”配置
- javascript - redux state 显示数据,但是 props 在 Component 的函数内部返回 null
- mysql - 如何在mysql中将两个日期作为week1,week2,week3的周数
- c# - 有没有办法让 Windows 忽略我用于特定窗口的手动 WindowStartupLocation?
- rest - 分配/取消分配数据的端点命名约定
- spring-boot - 使用 Mockito 在 Spring Boot 中测试服务层
- r - ggforce: geom_mark_ellipse - 如何移动连接器?
- java - 模拟 BindingProvider 和生成的存根类时出现问题