Restful API 和事件驱动的微服务

标签 rest microservices

在事件驱动的微服务系统中,微服务也是 RESTful API 是常见的还是最佳实践?

在事件驱动的微服务中,它通常被描述为一些事件被引发,一些其他微服务响应这些事件并执行一些操作。在这种情况下,似乎没有 restful API 中的“资源”概念。如果一个系统是用restful API搭建的,这个系统能不能称为微服务系统?

在事件驱动的微服务环境下,restful 的概念还适用吗?当我开始更多地了解事件驱动微观时,我发现自己对这两者有点混淆,但不确定我是否掌握了正确的概念。

最佳答案

在事件驱动架构中,微服务不通过 REST API 进行通信,而是通过消息传递框架(RabbitMQ、Kafka 等)进行通信。正如您正确指出的那样,微服务会对在它们收听的特定主题/ channel 上收到的消息使用react。

如果微服务宕机,消息会累积在消息总线中,并由同一个微服务(当它恢复时)或另一个微服务进行处理。

如果他们要通过 REST API 进行通信并且微服务已关闭,则您需要使用指数退避策略重试请求并处理许多其他事情。 This文章很好地解释了差异。

可以完全使用 REST 微服务构建微服务系统。它只是不遵循事件驱动的方法,而更像是一种同步(请求/响应)模型。您的微服务系统的设计应该与您的应用程序的需求直接相关。

通常会使用混合方法:您通过 REST API 与某些微服务通信(例如与自动授权/自动化微服务),因为您需要尽快从它们那里得到响应。对于其他人,您可以通过事件进行通信,通常是在您有即发即弃事件时,例如日志记录、指标,也许还有存储。

关于Restful API 和事件驱动的微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65679965/

相关文章:

java - 将 JPA 嵌入式实体类 id 映射到可嵌入实体类 id

微服务设计中的 ElasticSearch

azure - Service Fabric 微服务与 Azure 云服务/Web 应用程序集合的优势

node.js - 不要在 POST express.js 上重定向

java - 验证发生时 + 符号从 xml 中删除

rest - PHPStorm REST 客户端 - 基本身份验证

java - 为 Consul、网关和微服务配置 HTTPS 会导致 ZuulException : Forwarding error

java - 如何使用Java同时发送不同的Web服务请求到不同的目的地?

javascript - Node 休息客户端获取局部变量

java - Spring Boot外部api调用请求和数据库中的响应捕获