功能服务
PiggyMetrics被分解为三个核心微服务。这些服务都是围绕某些业务能力组织的可独立部署的应用程序。
账户服务
包含一般用户输入逻辑和验证:收入/费用项目,储蓄和帐户设置。
Method | Path | Description | User authenticated | Available from UI |
---|---|---|---|---|
GET | /accounts/{account} | 获取指定的帐户数据 | ||
GET | /accounts/current | 获取当前帐户数据 | × | × |
GET | /accounts/demo | 获取模拟账户数据(预填收入/费用项目等) | × | |
PUT | /accounts/current | 保存当前帐户数据 | × | × |
POST | /accounts/ | 注册新帐号 | × |
统计服务
对主要统计参数执行计算,并为每个帐户的时间序列。数据点包含基准货币和时间段的值。此数据用于跟踪帐户生命周期中的现金流动动态(尚未在UI中实现的花式图表)。
Method | Path | Description | User authenticated | Available from UI |
---|---|---|---|---|
GET | /statistics/{account} | 获取指定的帐户统计信息 | ||
GET | /statistics/current | 获取当前帐户统计信息 | × | × |
GET | /statistics/demo | 获取模拟帐户统计信息 | × | |
PUT | /statistics/{account} | 创建或更新指定帐户的时间序列数据点 |
通知服务
存储用户联系信息和通知设置(如提醒和备份频率)。计划工作人员从其他服务收集所需的信息,并向订阅的客户发送电子邮件。
Method | Path | Description | User authenticated | Available from UI |
---|---|---|---|---|
GET | /notifications/settings/current | 获取当前的帐户通知设置 | × | × |
PUT | /notifications/settings/current | 保存当前帐户通知设置 | × | × |
**小结:
- 每个微服务都有自己的数据库,因此没有办法绕过API和直接访问数据库。
- 在这个项目中,使用MongoDB作为每个服务的主数据库。它是支持多种编程语言持久性架构(包括最适合服务需求的数据库类型)。
- Service-to-service的通信是相当简单的:各个微服务之间的通信只使用同步的REST API。在现实世界中通常的做法是使用交互风格的组合。例如,执行同步GET请求以检索数据,并通过消息代理使用异步方法进行创建/更新操作,以便分离服务和缓冲消息,这为我们带来了一致性。
基础服务设施
在分布式系统中有一些常见的架构,这可以帮助我们理解核心服务的工作原理。Spring Cloud提供了强大的工具来增强基于Spring Boot的应用程序,以此来实现这些架构。
Config service
Spring Cloud Config是用于分布式系统的水平可扩展的集中式配置服务。支持本地存储、Git和Subversion。
在这个项目中,使用native profile
,它从本地类路径加载配置文件。可以查看shared
在Config服务资源中的目录。现在,当通知服务请求其配置时,配置服务以shared/notification-service.yml
和shared/application.yml
响应(在所有客户端应用程序之间共享)。
客户端使用
只需构建具有spring-cloud-starter-config
依赖的Spring Boot应用程序,自动配置将完成其余所有工作。
现在,不需要在应用程序中使用任何嵌入式属性。只需提供bootstrap.yml
应用程序名称和配置服务url:
-
spring:
-
application:
-
name:notification -service
-
cloud:
-
config:
-
uri:http: // config:8888
-
fail -fast: true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
使用Spring Cloud Config,可以动态地更新配置。
例如,EmailService bean已注释@RefreshScope
。这意味着,可以更改电子邮件文本和主题,而不需要重新部署启动通知服务。
首先,在Config服务器中更改所需的属性。然后,对Notification服务执行刷新请求:curl -H "Authorization: Bearer #token#" -XPOST http://127.0.0.1:8000/notifications/refresh
此外,也可以使用Repository webhooks自动执行此过程
**小结:
- 动态更新有一些限制。
@RefreshScope
不与@Configuration
类一起使用,并且不影响@Scheduled
方法 fail-fast
属性意味着Spring Boot如果它无法连接到Config
Service就将启动失败,这在批量启动时非常有用。