站务联系

想要设计自己的微服务?看这篇文章就对了(2)

发布时间:2021-03-13   来源:网络整理    
字号:

客户端使用

只需建立具备spring-cloud-starter-config 依赖性的Spring Boot应用程序 ,自动配置将完成剩下的工作。

现在,你的应用程序中不需要任何嵌入属性。只需提供 bootstrap.yml 应用程序名称跟配置服务URL:

spring:
  application:
    name: notification-service
  cloud:
    config:
      uri: http://config:8888
      fail-fast: true

使用Spring Cloud Config,可以动态修改应用程序配置

例如, EmailService bean 使用注释 @RefreshScope。这意味着你可以修改电子邮件文本跟主题行,而无需重建跟重新启动Notification Service应用程序。

首先,在Config服务器中修改所需的属性。然后,对Notification服务执行刷新恳求: curl -H "Authorization: Bearer #token#" -XPOST :8000/notifications/refresh

你还可以使用 webhooks手动执行此过程。

注意验证服务

授权职责完全提取至多带带的服务器,该服务器 为前端资源服务追授 OAuth2兵符。Auth Server适于用户授权以及周边内部的安全机器至机器通讯。

在这个项目中,我使用 Password credentials 授权类别进行用户授权(因为它仅由本机应用程序UI使用),并且 Client Credentials 用作微服务授权的授权类别。

Spring Cloud Security提供便捷的注释跟手动配置,使服务器跟客户端都能轻松实现。你可以在文档中了解有关它的更多信息, 并检测Auth Server代码中的配置具体信息 。

从客户端来看,一切都与传统的基于会话的授权完全相同。你可以从Principal 请求中检索 对象,使用基于式子的访问控制跟@PreAuthorize 注释检测用户角色跟其他内容 。

PiggyMetrics中的每位客户端(帐户服务,统计服务,通知服务跟浏览器)都有一个范围: server适于前端服务, ui - 用于浏览器。因此,我们还可以保护控制器免受外部访问,例如:

@PreAuthorize("#oauth2.hasScope('server')")

@RequestMapping(value = "accounts/{name}", method = RequestMethod.GET)

public List getStatisticsByAccountName(@PathVariable String name) {

    return statisticsService.findByAccountName(name);

}

API网段

如你所见,有三种核心服务,它们将外部API显露给客户端。在现实世界的系统中,这个数字可以十分迅速地下降,并且整个系统的复杂性也会提高。实际上,渲染一个复杂的网页或许牵涉数百种服务。

理论上,客户端可以直接向每位微服务发出恳求。但其实这个选项存在挑战跟局限,例如应当晓得所有端点地址,分别对每位信息和平执行http请求,在客户端合并结果。另一个问题是非网路友好合同,可能在前端使用。

通常,更好的方式是使用API网段。它是踏入系统的单一入口点,用于通过将恳求路由至适当的前端服务或通过读取多个前端服务并聚合结果来处理恳求 。此外,它还可适于身分验证,压力检测,服务迁移,静态响应处理,主动流量管理。

图说天下

×
二维码生成