服务发现变体与部署配置¶
OBPM 每个微服务通过 Maven 模块后缀支持多种部署/注册方式。本文对比四类变体的差异,给出主类清单与配置链。总览见 [[backend-architecture]]。
1. 变体总览¶
| 后缀 | 部署形态 | 注册中心依赖(starter) | 打包 |
|---|---|---|---|
*-consul |
独立 Spring Boot 进程 | spring-cloud-starter-consul-discovery |
jar |
*-eureka |
独立 Spring Boot 进程 | spring-cloud-starter-netflix-eureka-client |
jar |
*-nacos |
独立 Spring Boot 进程 | spring-cloud-starter-alibaba-nacos-discovery |
jar |
*-war |
外部 Tomcat WAR | 无强制;类路径有 Consul 时经 ConsulListener 注册 |
war |
obpm-lite |
单体(无服务发现,可开启) | 无 | jar |
- 默认服务发现是 Consul;Eureka 与 Nacos 为可选项(并非所有服务都有全部变体,如 designer 无 eureka 变体、gateway 无 war 变体,以根
pom.xml的<modules>为准)。 - 变体模块是**薄壳**:仅含主类、
application.properties/yml与注册中心依赖,业务逻辑全部在基础服务模块(如obpm-runtime)中。
2. 主类清单(Consul 变体)¶
| 模块 | 主类 |
|---|---|
| obpm-gateway-consul | cn.myapps.gateway.GatewayApp |
| obpm-runtime-consul | cn.myapps.run.RuntimeWithConsulApp |
| obpm-designer-consul | cn.myapps.run.DesignerAppWithConsul |
| obpm-signon-consul | cn.myapps.run.Signon2App |
| obpm-kms-consul | cn.myapps.run.KmsAppWithConsul |
| obpm-message-consul | cn.myapps.run.MessageApp |
| obpm-converter-consul | cn.myapps.run.ConverterApp |
| obpm-manager-consul | cn.myapps.run.ManagerApp |
| obpm-usercenter-consul | cn.myapps.run.UserCenterApp |
| obpm-job-consul | cn.myapps.run.JobApp |
| obpm-logger-consul | cn.myapps.run.LoggerApp |
| obpm-report-consul | cn.myapps.ReportApp(+ ContextPathController) |
Nacos / Eureka / WAR 变体主类命名规律一致:RuntimeWithNacosApp、DesignerAppWithNacos、KmsAppWithNacos、DesignerApp(war)、RuntimeApp(war)等,位于各变体 src/main/java/cn/myapps/ 下。
3. WAR 变体的服务注册机制¶
WAR 主类继承 SpringBootServletInitializer 并在 configure() 中先执行 Environment.init(new String[]{}).getEnvArgs() 再返回 builder(如 obpm-runtime-war 的 RuntimeApp)。
注册采用**条件化手动触发**:每个 war 模块自带 ConsulListener:
@Configuration
@ConditionalOnConsulEnabled
@ConditionalOnMissingBean(type = "org.springframework.cloud.consul.discovery.ConsulLifecycle")
@AutoConfigureAfter(ConsulAutoServiceRegistrationAutoConfiguration.class)
public class ConsulListener implements ApplicationContextAware {
@Autowired(required = false)
private ConsulAutoServiceRegistration registration;
@Override
public void setApplicationContext(ApplicationContext context) {
if (registration != null) {
registration.start(); // 容器就绪后手动注册到 Consul
}
}
}
效果:WAR 部署到外部 Tomcat 时,若类路径存在 Consul 依赖则在启动完成后注册进 Consul,仍可被网关 lb:// 路由;无 Consul 依赖时不注册。
4. 配置链¶
obpm-common/src/main/resources/application-base.properties
│ # eureka 客户端、feign/ribbon 超时(20s)、日志级别与滚动(200MB/7天)、
│ # myapps.cache.provider=redis、ActiveMQ、云能力中心 myapps.yun.host、session 等
▼ spring.config.import: optional:application-base.properties
各变体 application.yml(仅一行 import,注释"don't override any properties in this file")
▼
各变体 application.properties(本服务专属:server.port、context-path、
myapps.storage.root、spring.application.name、网关路由等)
▼
Environment.init(args)(obpm-common 的 cn.myapps.common.Environment)
# 启动参数/环境变量覆盖(如 --myapps.storage.root=...),所有主类统一先调用
要点:
- 基础配置集中在
application-base.properties,服务级差异只在变体的application.properties,**不要**在application.yml中覆盖属性。 spring.application.name是服务注册与网关lb://路由的键,必须与路由配置一致(obpm-signon、obpm-runtime、obpm-kms、obpm-message…)。- Eureka 相关默认值在 base 配置中(
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/、prefer-ip-address=true、metadata-map 携带 contextPath)。
5. Lite 模式与微服务模式的切换¶
| 关注点 | 微服务(*-consul 等) | Lite 单体 |
|---|---|---|
| 进程 | 每服务一进程 + 网关 | 单进程(LiteApp,端口 8888) |
| 服务发现 | Consul/Eureka/Nacos | 默认无(可选开启) |
| 服务间调用 | Feign + lb:// 注册中心负载均衡 |
Feign + ${myapps.feign.lite.url} 直连本进程 |
| MQ / Redis | 默认依赖 | 默认不依赖,application.properties 可开启 |
| 外部依赖入口 | 网关 8080 | 直连 8888 |
Feign 双形态适配的细节见 [[module-dependency]] §3。