本文介绍微服务项目的基本实现。
本项目源码放在 Github 上,可以检出后查看;如果想在本地运行,需要检出与本项目配套的 远程仓库。
http 和 https 端口默认是相同的,如果不同会单独说明。
peacetrue-microservice-config-center
配置中心,监听在 8888 端口,关联 peacetrue-microservice-config-repo-template 远程仓库。
peacetrue-microservice-registry-center
注册中心,监听在 8761 端口,关联配置中心。
peacetrue-microservice-gateway
接口网关,监听在 80(http) / 443(https)端口,关联配置中心和注册中心。
peacetrue-microservice-authorization-server
认证授权中心,监听在 8510 端口,关联配置中心和注册中心。此模块基于已过期的 Spring Security OAuth2 项目,新项目 spring-authorization-server 正在研发中,查看 最新进展,完成后会迁移。
peacetrue-microservice-uaa
认证授权中心,监听在 8080(http) / 8443(https)端口。因为 peacetrue-microservice-authorization-server 不支持授权码认证流程,所以实际使用该模块。
peacetrue-microservice-resource-server
资源服务,监听在 8520 端口,关联配置中心、注册中心和认证中心,提供基于 OAuth2 的访问令牌认证。包含两个接口:
GET /message
:需要 message.read 或 message.write 权限POST /message
:需要 message.write 权限peacetrue-microservice-client-inner
内部客户端,供内部系统使用,监听在 8530 端口,关联配置中心、注册中心、认证中心和资源服务,提供基于 OAuth2 的授权码认证。
peacetrue-microservice-client-outer
外部客户端,供第三方系统使用,监听在 8531 端口,关联接口网关和认证授权中心,提供基于 OAuth2 的客户端凭据认证。
配置分为 2 部分:项目内配置和远程仓库配置。为了统一配置,尽可能使用远程仓库的配置。
配置中心只能使用项目内配置,不能使用远程仓库配置。所有其他项目都使用远程仓库配置,项目内只保留最基本的配置,包括 应用名 和 远程仓库地址。
目前设计两套环境:非生产环境(!prod)和生产环境(prod)。另外,还有一些局部环境包括:协议、日志、docker。协议包括:http 和 https;日志包括:控制台和文件;docker 包括 docker 内和非 docker。非生产环境默认使用 http 协议、控制台日志和非 docker;生产环境默认使用 https 协议、文件日志和非 docker。上线前,需要在本地模拟生产环境,可手动切换为 https 协议,验证无误后部署上线。
docker 目前尚未实现,以下配置未实现 docker。
配置中心只有项目内配置。
项目内配置
spring:
application:
#应用名
name: peacetrue-microservice-config-center
security:
#访问配置中心的用户账号和密码
user:
name: ${MICROSERVICE_SECURITY_USERNAME:peacetrue}
password: ${MICROSERVICE_SECURITY_PASSWORD:password}
server.port: ${MICROSERVICE_CONFIG_PORT:8888}
management.endpoints.web.exposure.include: "*"
logging.level.org.springframework: debug
logging.level.com.github.peacetrue: debug
---
#非生产环境
spring.profiles: '!prod'
#使用本地文件需要包含 native
spring.profiles.include: native
spring:
cloud:
config:
server:
native:
#直接使用本地文件,避免检出 github 仓库
searchLocations: file:../peacetrue-microservice-config-repo-template
---
#生产环境
spring.profiles: prod
#默认激活 https 和 log
spring.profiles.include: https,log
spring:
cloud:
config:
server:
git:
#远程资源库地址
uri: https://github.com/peacetrue/peacetrue-microservice-config-repo-template
#如果是私有仓库需要提供用户名和密码
username: '${MICROSERVICE_REPO_USERNAME:peacetrue}'
password: '${MICROSERVICE_REPO_PASSWORD:password}'
logging.level.org.springframework: info
logging.level.com.github.peacetrue: info
---
#默认 http 协议,激活此配置切换到 https 协议
spring.profiles: https
server:
ssl:
key-store: file://${user.home}/peacetrue.cn.jks
key-alias: peacetrue.cn
key-store-password: ${MICROSERVICE_SSL_PASSWORD:password}
---
#默认输出到控制台,激活此配置切换到文件
spring.profiles: log
logging.file.name: logs/root.log
非配置中心配置包括项目内配置和远程仓库配置。
不同的应用,项目内配置除了应用名不同,其他都相同,因为它们都连接到同一个配置中心。
项目内配置
spring:
application:
#应用名
name: peacetrue-microservice-app
cloud:
config:
#配置中心地址
uri: ${MICROSERVICE_PROTOCOL:http}://${MICROSERVICE_SECURITY_USERNAME:peacetrue}:${MICROSERVICE_SECURITY_PASSWORD:password}@${MICROSERVICE_CONFIG_HOST:localhost}:${MICROSERVICE_CONFIG_PORT:8888}
label: master
fail-fast: true
---
#生产环境
spring.profiles: prod
spring.profiles.include: https
MICROSERVICE_CONFIG_HOST: peacetrue.cn
---
#默认 http 协议,激活此配置切换到 https 协议
spring.profiles: https
MICROSERVICE_PROTOCOL: https
不同的应用,共用同一个远程仓库配置 application.yml,然后有一个自己单独的配置 {应用名}.yml,上例为:peacetrue-microservice-app.yml。远程仓库配置目录结构如下:
Figure 1. 远程仓库配置目录结构
具体配置内容请查看 peacetrue-microservice-config-repo-template。
系统中涉及到的所有用户名和密码都默认为:peacetrue/password。为了方便配置提供了一些特殊变量:
配置中心信息(通过以下命令添加到系统环境):
export MICROSERVICE_CONFIG_HOST=localhost
export MICROSERVICE_CONFIG_PORT=8888
远程仓库账号
如果是私有仓库,需要提供账号密码,通过以下命令添加到系统环境:
export MICROSERVICE_REPO_USERNAME=peacetrue
export MICROSERVICE_REPO_PASSWORD=password
各个应用登陆账号
通过以下命令添加到系统环境:
export MICROSERVICE_SECURITY_USERNAME=peacetrue
export MICROSERVICE_SECURITY_PASSWORD=password
SSL账号
通过以下命令添加到系统环境:
export MICROSERVICE_SSL_PASSWORD=password
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。