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 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 | 同上 |
| 3 | microservice.yaml(classpath 根) | 编辑 src/main/resources/microservice.yaml 后重新打包 | 启动日志与 /tmp/microservices/ 契约 |
| 4 | application.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.address | REST 通信 | 框架默认(本例显式 0.0.0.0:8080) | REST 监听地址与端口 |
| servicecomb.rest.server.vertx.* | REST 通信 | 框架默认 | Vert.x 线程/连接等细粒度参数 |
| spring.main.web-application-type | Spring 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/