跳转至

服务发现变体与部署配置

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。