PigCloud微服务框架优化 – yml配置
PigCloud微服务框架优化 – yml配置
pigcloud 在一些外包或者中小企业可以说是用得非常广泛。我是在2020年的时候在两家公司的同事了解到的,他们所做的项目都是外包项目。对项目的时间节点要求比较高,特别需要比较成熟全面的框架级产品来帮助企业快速的接入微服务开发。
在此之前我一直使用的SpringCloud的“乞丐”版本,所有的权限体系、字典、等等功能需要自己去搭建,而PigCloud解决了这些所有的问题。在解决问题的同时,还是存在一些细节问题,本篇主要是bootstrap.yml配置文件的相关问题。
PigCloud原始配置文件内容
这里以pigcloud的Auth服务为例,原始的bootstrap.yml配置文件如下:
server:
port: 3000
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:bimgis-register}:${NACOS_PORT:8848}
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yml
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
profiles:
active: @profiles.active@
接下来将根据PigCloud实战经验总结配置上的相关问题,以及解决方案
问题1:实例IP导致网络不可达
配置缺少对实例IP的配置,有时候在多网卡环境下IP地址需要在配置中声明。如果不声明可能会获取其中一个网卡IP(多网卡时会默认第一个),可能刚好不是局域网的IP地址导致服务不可通信。比如下面这个情况:
服务器有两个网卡:
- 172.10.0.0/24
- 192.168.1.0/24
最终项目跑起来是这样的:
局域网IP段:192.168.1.0/24
跑的微服务实例IP段:172.10.0.0/24
解决方案:
spring:
cloud:
nacos:
discovery:
# 固定实例的IP地址
ip: ${INSTANCE_IP:192.168.1.200}
环境变量:
环境变量 | 说明 |
---|---|
INSTANCE_IP | 服务的实例IP地址 |
问题2:缺少Nacos的Namespace配置
Nacos的namespace是为了隔离配置和微服务实例的,通常我们开发中团队协作开发,部分组件或者服务会部署在公用的服务器里,同时会有多环境的情况。
环境标识 | 说明 |
---|---|
dev | 测试环境 |
test | 测试环境 |
在这个开发环境基础上会有多个开发人员,每个开发人员分配不同的namespace来隔离各自的开发环境。由于开发环境大家的配置几乎是一致的,所有他们可以共用dev的配置,但注册中心需要注册不同的namespace中(这种开发模式比较消耗开发机器的内存,需要启动除了nacos以外的所有服务)。
解决方案:
通过以下配置来描述需要使用的Namespace
spring:
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:nacos-host}:${NACOS_PORT:8848}
# 服务发现的namespace请修改为自己的,避免影响dev环境。
namespace: ${NACOS_DISCOVERY_NS:50742a7d-919a-47d3-1111-51e12a1c1d9b}
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${NACOS_CONFIG_NS:50742a7d-919a-47d3-1111-51e12a1c1d9b}
这样配置我们可以通过环境变量来控制命名空间,这个在IDEA上可以很方便的切换环境,同时也便于调试。
环境变量 | 说明 |
---|---|
NACOS_HOST | Nacos地址 |
NACOS_PORT | Nacos 端口 |
NACOS_DISCOVERY_NS | Nacos服务发现命名空间 |
NACOS_CONFIG_NS | Nacos配置中心命名空间 |
搭配SwitchHosts
切换nacos-host地址,可以快速切换注册配置中心的地址。
最终得到的bootstrap.yml文件内容
这套配置并不仅仅适用于pigcloud也适用其他基于SpringCloud以Nacos作为注册配置中心的框架。
# 禁止修改配置内容,如需修改联系PM。
server:
port: 3000
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
# 固定实例的IP地址
ip: ${INSTANCE_IP:}
server-addr: ${NACOS_HOST:nacos-host}:${NACOS_PORT:8848}
# 服务发现的namespace请修改为自己的,避免影响测试。
namespace: ${NACOS_DISCOVERY_NS:50742a7d-919a-47d3-1111-51e12a1c1d9b}
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${NACOS_CONFIG_NS:50742a7d-919a-47d3-1111-51e12a1c1d9b}
file-extension: yml
shared-configs:
- application.${spring.cloud.nacos.config.file-extension}
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
profiles:
active: @profiles.active@