Apache ServiceComb java-chassis 3.3.0 配置参数详解

Apache ServiceComb java-chassis 3.3.0 配置参数详解:microservice.yaml 参数层级与覆盖方式、参数总览表、服务定义/注册中心(local 与 service-center sc.address)/REST 通信(rest.address 端口模型)/生产者契约导出/JVM 内存五大类逐项说明,含生产配置模板与 FAQ,全程实测。

Apache ServiceCombApache ServiceComb2026/10/12

Apache ServiceComb java-chassis 3.3.0 配置参数详解

目标:系统讲解 Apache ServiceComb java-chassis 3.3.0 的主要配置参数。java-chassis 的配置以 src/main/resources/microservice.yaml 为核心载体(配合 Spring Boot 的 application.yml 与系统属性/环境变量覆盖),按「服务定义 → 注册中心 → REST 通信 → 生产者契约 → JVM 内存」五层组织。本文对每个参数给出含义、默认取值、实测验证方式与生产建议模板。所有参数均在 Ubuntu 22.04.5 + JDK 17 + java-chassis 3.3.0 环境实测。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS
  • Java:OpenJDK 17.0.20.1
  • java-chassis 版本:3.3.0(java-chassis-bom + java-chassis-spring-boot-starter-standalone + registry-local / registry-service-center)
  • Spring Boot 版本:3.2.12
  • 注册中心(实测形态二):service-center 2.2.0(embedded_etcd,端口 30100)
  • 示例工程:/root/servicecomb-hello/
  • 演示账号:root

二、前置条件

已按《Apache ServiceComb java-chassis 3.3.0 构建并运行示例 REST 应用指南》篇完成工程构建,并能正常编译:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
cd /root/servicecomb-hello
mvn clean package -DskipTests

三、参数查看与修改方式

java-chassis 3.x 的配置加载优先级(高 → 低)与各层「查看/修改」方式如下:

优先级配置来源修改方式实测查看方式
1系统属性 -Dservicecomb.*java -Dservicecomb.rest.address=0.0.0.0:9090 -jar app.jar启动日志 rest listen success. address=0.0.0.0:9090
2环境变量 SERVICECOMB_*export SERVICECOMB_REST_ADDRESS=0.0.0.0:9090同上
3microservice.yaml(classpath 根)编辑 src/main/resources/microservice.yaml 后重新打包启动日志与 /tmp/microservices/ 契约
4application.yml(Spring Boot 标准)编辑 src/main/resources/application.yml启动行为(如 web-application-type)
5组件内置默认值不可改官方文档与源码常量

⚠️ 注意:修改 src/main/resources/microservice.yaml 后必须重新 mvn package——可执行 fat jar 内的配置是打包时快照(实测改完不打包,服务仍按旧配置启动)。

四、参数总览

参数(完整键)所属层默认值作用
application.name应用无(建议必填)应用 ID(appId),多应用隔离的顶层命名空间
servicecomb.service.name服务定义无(必填)微服务名,注册与发现的唯一名
servicecomb.service.version服务定义框架默认(本例显式 0.0.1)微服务版本号
servicecomb.service.registry.enabled注册中心true是否启用注册发现(false 则独立运行)
servicecomb.registry.local.enabled注册中心false启用内置 local 注册中心(需 registry-local 依赖)
servicecomb.registry.sc.address注册中心无(启用 service-center 时必填)service-center REST 地址(3.x 新键)
servicecomb.rest.addressREST 通信框架默认(本例显式 0.0.0.0:8080)REST 监听地址与端口
servicecomb.rest.server.vertx.*REST 通信框架默认Vert.x 线程/连接等细粒度参数
spring.main.web-application-typeSpring Boot(按 classpath 推断)standalone 形态必须显式设为 none
JVM -Xms/-Xmx进程内存JVM 默认堆内存,建议显式 256–512MB

💡 上表「默认值」栏标注「以日志为准」的参数,指框架内部默认随版本可能变化;工程实践是显式声明。本例所有关键参数均显式给出并通过启动日志核实。

五、核心参数分类详解

5.1 服务定义参数(application / servicecomb.service)

application:
  name: hello-app
servicecomb:
  service:
    name: hello
    version: 0.0.1
  • application.name(应用 ID):注册中心的顶层命名空间。service-center 中微服务按 appId/serviceName/version 三元组唯一定位——实测注册日志里的 /default/hello/0.0.1 即 appId=默认、服务名、版本;未配置时使用 default。
  • servicecomb.service.name(服务名):消费端 cse://服务名/路径 调用就是按这个名字发现实例,必须全局唯一。
  • servicecomb.service.version(版本号):本例显式 0.0.1;同服务多版本共存时按版本隔离路由。

实测验证:注册成功日志 register microservice successfully, service id=bad03bda8b28269a31ccf8fade650edd7750bb86 与 service-center 查询结果 "serviceName":"hello"。

5.2 注册中心参数(servicecomb.service.registry / servicecomb.registry)

(1)总开关:

servicecomb:
  service:
    registry:
      enabled: false   # 独立运行,不注册不发现
  • enabled: false:完全关闭注册发现(最小演示形态,实测可正常启动并提供 REST 服务)。
  • enabled: true:启用注册发现,具体用哪种注册中心由依赖与下述开关决定。

(2)内置 local 注册中心(需在 pom.xml 引入 org.apache.servicecomb:registry-local):

servicecomb:
  service:
    registry:
      enabled: true
  registry:
    local:
      enabled: true    # 启用键:servicecomb.registry.local.enabled

实测:启动日志出现 initialized global registration id 8122c655-dc18-4b25-996a-d5f7691288e2 与 name:local-registry。local 注册中心数据保存在本进程内存,零外部依赖,适合单机演示。

(3)service-center 注册中心(需在 pom.xml 引入 org.apache.servicecomb:registry-service-center):

servicecomb:
  service:
    registry:
      enabled: true
  registry:
    sc:
      address: http://127.0.0.1:30100   # 3.x 唯一支持的键

实测:注册成功日志 register microservice successfully, service id=bad03bda8b28269a31ccf8fade650edd7750bb86, instance id=b1050217-3fed-4bb3-aaff-63cb259e98ed;service-center 侧 /v4/default/registry/microservices 可查到 serviceName:"hello"。

⚠️ 注意:java-chassis 3.0.0 起,service-center 地址只支持 servicecomb.registry.sc.address。沿用 2.x 的 servicecomb.service.registry.address 会启动失败,真实报错为:

Failed to instantiate [org.apache.servicecomb.service.center.client.ServiceCenterClient]:
Address is required in configuration. NOTICE: since 3.0.0, only support servicecomb.registry.sc.address to configure service center address.

(4)其他可选注册中心:java-chassis 3.3.0 同版本提供 registry-consul、registry-etcd、registry-nacos、registry-zookeeper、registry-zero-config 等实现(Maven Central org.apache.servicecomb 组),引入对应依赖并按各自文档配置即可,总开关不变。

5.3 REST 通信参数(servicecomb.rest)

servicecomb:
  rest:
    address: 0.0.0.0:8080
  • servicecomb.rest.address:REST 监听地址与端口。0.0.0.0:8080 表示监听所有网卡;也可写 0.0.0.0:8080,0.0.0.0:8081 监听多端口,或写 127.0.0.1:8080 仅本机访问。

  • 实测验证:启动日志 rest listen success. address=0.0.0.0:8080(Vert.x 每个事件循环线程打印一行,多行属正常),随后 endpoint to publish: rest://172.17.0.9:8080 说明对外发布的地址自动选中了本机 IP。

  • 发布地址告警:当监听 0.0.0.0 且机器有多网卡时,框架会打印 WARN 日志 address /0.0.0.0:8080, auto select a host address to publish 172.17.0.9:8080, maybe not the correct one,生产多网卡环境建议在 servicecomb.service.publishAddress 中显式指定对外发布地址。

  • standalone 与 Servlet 的取舍:java-chassis-spring-boot-starter-standalone(REST over Vert.x,本指南实测形态)不需要 Servlet 容器,必须在 application.yml 中关闭 Spring Boot 的 Web 推断:

spring:
  main:
    web-application-type: none

若业务必须跑在内嵌 Tomcat(REST over Servlet),把依赖换成 java-chassis-spring-boot-starter-servlet,此时 REST 监听由标准 server.port 管理,无需上述开关。

5.4 生产者契约参数(Swagger 导出)

java-chassis 启动时自动为每个 @RestSchema 生产者生成 OpenAPI 3.0 契约并导出到磁盘:

  • 导出路径:启动日志 export microservice swagger file to path /tmp/microservices/%s/%s.yaml,占位符依次为应用 ID 与服务名;本例实测文件为 /tmp/microservices/hello/hello.yaml,内容 openapi: 3.0.1,包含 operationId: sayHello 与 name 查询参数定义。
  • schemaId:@RestSchema(schemaId = "hello") 中的 schemaId 是契约与微服务内多 schema 的标识,需在同一服务内唯一。
  • 该导出路径为框架默认(临时目录);生产环境可结合日志目录规划,将 /tmp 下的契约纳入发布物核对清单。

5.5 JVM 与进程内存参数

java-chassis 随业务进程运行,堆内存由 JVM 参数控制,建议显式限制在 256–512MB:

nohup java -Xms256m -Xmx512m -jar target/servicecomb-hello.jar > /root/hello.log 2>&1 &

实测确认生效:

jps -v
5549 servicecomb-hello.jar -Xms256m -Xmx512m
  • 脚本启动形态:直接在 java -jar 命令行携带 -Xms256m -Xmx512m。
  • systemd 托管形态:在 unit 文件中逐项设置(每行仅一个 Environment=):
[Service]
Environment=JAVA_OPTS=-Xms256m -Xmx512m
ExecStart=/usr/bin/java ${JAVA_OPTS} -jar /opt/hello/servicecomb-hello.jar
  • 兜底复核:jps -v 或 ps -ef | grep [j]ava 直接看进程参数里是否有 -Xms256m -Xmx512m。

六、生产配置模板

💡 适用场景:8GB 内存服务器、独立部署 service-center(embedded_etcd 单机或集群)、REST 微服务生产模板。

microservice.yaml:

application:
  name: hello-app
servicecomb:
  service:
    name: hello
    version: 1.0.0
    registry:
      enabled: true
  registry:
    sc:
      address: http://10.0.0.10:30100   # service-center 地址,多实例逗号分隔
  rest:
    address: 0.0.0.0:8080

application.yml(standalone 形态):

spring:
  main:
    web-application-type: none

启动命令与内存约束:

nohup java -Xms256m -Xmx512m -jar servicecomb-hello.jar > /var/log/hello/hello.log 2>&1 &
场景注册中心关键配置要点
本机演示/联调不启用(registry.enabled: false)或 registry-local端口 8080,零外部依赖
单机生产service-center 2.2.0(embedded_etcd)sc.address 指向本机 30100,注意数据目录持久化
集群生产service-center 集群(外置 etcd)sc.address 逗号分隔多地址;publishAddress 显式指定
存量 JDK8/11 环境java-chassis 2.x配置键为 2.x 体系,与 3.x 不通用

七、常见问题

Q1:启动报 Address is required in configuration. NOTICE: since 3.0.0, only support servicecomb.registry.sc.address to configure service center address.? 3.x 的 service-center 地址键已改为 servicecomb.registry.sc.address;同时确认 pom 中已引入 registry-service-center 依赖、servicecomb.service.registry.enabled: true 已打开。

Q2:改了 microservice.yaml 不生效? fat jar 内配置是打包快照,需重新 mvn clean package。紧急时可用系统属性临时覆盖:java -Dservicecomb.rest.address=0.0.0.0:9090 -jar app.jar,并以启动日志 rest listen success. address=0.0.0.0:9090 核实。

Q3:注册中心连不上时服务能启动吗? service-center 不可达时客户端会重试,日志持续打印连接告警;REST 服务本身可先对外提供,但消费端服务发现不可用。生产应在发布前用注册中心健康接口做卡点。

Q4:日志里出现大量 rest listen success. address=0.0.0.0:8080 重复行? Vert.x 为每个事件循环线程各打印一条,属正常现象,不是重复绑定端口。

Q5:auto select a host address to publish 告警要处理吗? 多网卡服务器上框架自动选择的发布 IP 可能不是业务网段,会导致跨机服务发现拿到错误地址;生产环境应显式配置发布地址。

八、参考链接

  • java-chassis 官方文档(配置参考):https://servicecomb.apache.org/references/java-chassis/zh_CN/
  • Spring Boot 集成说明:https://servicecomb.apache.org/references/java-chassis/zh_CN/using-java-chassis-in-spring-boot/
  • service-center 部署:https://github.com/apache/servicecomb-service-center
  • Maven Central(组件与版本):https://repo1.maven.org/maven2/org/apache/servicecomb/