当微服务是控制台应用程序时,访问微服务之间的数据



假设我有微服务"UserManagement"和微服务"UserReportService"。

UserManagement是一个公开公共端点的web API项目。它用于管理用户信息。

UserReportService是一个控制台应用程序,它每天收集每个用户的信息,并生成一个报告——JSON数据和一个文件。它将其存储在自己的数据库中。由于这是一个控制台应用程序,因此任何其他服务都没有访问此数据的http端点。

如果我的UserManagement微服务需要通过API公开这些数据,我该如何实现?

我想了两种方法:

  1. 控制台应用程序通过UserManagement微服务上的http端点或某种消息队列将数据保存到UserManagement微服务器,而不是自己的数据库。

  2. 控制台应用程序将数据保存到自己的数据库中,并将数据复制到UserManagement微服务中以供使用。

微服务中一件非常重要的事情是每个微服务管理自己的数据,这些数据应该通过明确定义的API公开。

话虽如此,您的第一种方法是不正确的,因为一个微服务将绑定到另一个的数据库。出于类似的原因,不建议使用第二种方法。

建议的方法如下:

┌──────────────┐   ┌───────────────────┐
│              │   │                   │
│UserManagement│   │ UserReportService │
│              │   │                   │
└─────┬────────┘   └────────┬──────────┘
│                     │
│                     │
▼                     ▼
┌──────────────┐      ┌────────────┐
│              │      │            │
│   UsersDb    │      │  ReportDb  │
│              │      │            │
└──────────────┘      └────────────┘
  • UserManagement保持原样
  • UserReportService应转换为遵循以下方法之一的Web API:
    1. 它有一个后台服务,用于生成报告并将其保存在数据库中。这将起到Cron Job的作用
    2. 如果您不需要Cron作业,可以使用API在调用时生成并保存报告

通过这种方式,这两个微服务管理自己的数据,并可以根据需要在内部进行更改。

最新更新