假设我有微服务"UserManagement"和微服务"UserReportService"。
UserManagement是一个公开公共端点的web API项目。它用于管理用户信息。
UserReportService是一个控制台应用程序,它每天收集每个用户的信息,并生成一个报告——JSON数据和一个文件。它将其存储在自己的数据库中。由于这是一个控制台应用程序,因此任何其他服务都没有访问此数据的http端点。
如果我的UserManagement微服务需要通过API公开这些数据,我该如何实现?
我想了两种方法:
-
控制台应用程序通过UserManagement微服务上的http端点或某种消息队列将数据保存到UserManagement微服务器,而不是自己的数据库。
-
控制台应用程序将数据保存到自己的数据库中,并将数据复制到UserManagement微服务中以供使用。
微服务中一件非常重要的事情是每个微服务管理自己的数据,这些数据应该通过明确定义的API公开。
话虽如此,您的第一种方法是不正确的,因为一个微服务将绑定到另一个的数据库。出于类似的原因,不建议使用第二种方法。
建议的方法如下:
┌──────────────┐ ┌───────────────────┐
│ │ │ │
│UserManagement│ │ UserReportService │
│ │ │ │
└─────┬────────┘ └────────┬──────────┘
│ │
│ │
▼ ▼
┌──────────────┐ ┌────────────┐
│ │ │ │
│ UsersDb │ │ ReportDb │
│ │ │ │
└──────────────┘ └────────────┘
UserManagement
保持原样UserReportService
应转换为遵循以下方法之一的Web API:- 它有一个后台服务,用于生成报告并将其保存在数据库中。这将起到Cron Job的作用
- 如果您不需要Cron作业,可以使用API在调用时生成并保存报告
通过这种方式,这两个微服务管理自己的数据,并可以根据需要在内部进行更改。