::xuantong-solon-cloud-plugin [国产]
2026年7月24日 上午1:41:50
<dependency>
<groupId>cloud.xuantong</groupId>
<artifactId>xuantong-solon-cloud-plugin</artifactId>
<version>最新版</version>
</dependency>
1、描述
分布式服务治理扩展插件。基于玄同 2.0 适配的 Solon Cloud 插件,提供配置服务、服务注册与发现。
插件使用 Socket.D TCP 长连接接入玄同控制面,支持配置动态刷新和本地快照。控制面暂时不可用时,应用可以使用本地快照启动,并在连接恢复后自动同步最新配置。
开源仓库:https://gitee.com/wjw_system/xuantong
2、能力支持
| 云端能力接口 | 说明 | 备注 |
|---|---|---|
CloudConfigService | 云端配置服务 | 支持 namespace、group、启动加载和动态刷新 |
CloudDiscoveryService | 云端注册与发现服务 | 支持 namespace、group、服务注册、查询和订阅 |
配置发布和删除属于管理操作,请通过玄同控制台或管理 API 完成。
3、配置示例
solon.app:
name: "demoapp"
group: "DEFAULT_GROUP"
solon.cloud.xuantong:
server: "127.0.0.1:8090" # 玄同 2.0 Socket.D TCP 控制面地址
namespace: "public"
token: "${XUANTONG_ACCESS_TOKEN:}"
config:
load: "demoapp.yml" # 加载配置到应用属性,多个使用逗号分隔
discovery:
enable: true # 不需要服务注册发现时设置为 false
更丰富的配置:
solon.app:
name: "demoapp"
group: "DEFAULT_GROUP"
meta: # 应用元信息(可选)
version: "v2.0.0"
author: "demo"
tags: "api,prod" # 应用标签(可选)
solon.cloud.xuantong:
# 多个玄同 Server 地址使用逗号分隔
server: "10.0.0.11:8090,10.0.0.12:8090,10.0.0.13:8090"
namespace: "prod"
token: "${XUANTONG_ACCESS_TOKEN:}"
config:
enable: true
load: "application.yml,db.yml"
discovery:
enable: true
healthCheckInterval: "10s"
提醒:
- 通过
config.load加载的配置会进入Solon.cfg(),可以使用@Inject注入; - 玄同使用
namespace + group + dataId唯一确定一份配置; config.load未指定分组时使用solon.app.group;需要指定其他分组时可写成PAYMENT_GROUP:payment.yml;@CloudConfig可通过group指定分组,留空时使用DEFAULT_GROUP。
4、代码应用
import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain;
@SolonMain
public class DemoApp {
public static void main(String[] args) {
// 启用 discovery 后,Web 服务会在启动完成时自动注册
Solon.start(DemoApp.class, args);
}
}
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.cloud.annotation.CloudConfig;
import java.util.List;
@Controller
public class DemoController {
// 基础类型配置;单例 Bean 可以使用 autoRefreshed 自动刷新
@CloudConfig(name = "demo.title",
group = "DEFAULT_GROUP",
required = false,
autoRefreshed = true)
private String demoTitle;
// JSON、YAML 等结构化配置可以注入为对象或集合
@CloudConfig(name = "demo.channels",
group = "DEFAULT_GROUP",
required = false,
autoRefreshed = true)
private List<String> channels;
@Mapping("/")
public String test() {
return demoTitle + ": " + channels;
}
}
配置订阅,关注配置的实时更新:
import org.noear.solon.annotation.Component;
import org.noear.solon.cloud.CloudConfigHandler;
import org.noear.solon.cloud.annotation.CloudConfig;
import org.noear.solon.cloud.model.Config;
@Component
@CloudConfig(value = "demo.title", group = "DEFAULT_GROUP")
public class TestConfigHandler implements CloudConfigHandler {
@Override
public void handle(Config config) {
System.out.println("配置变更: " + config.key() + " = " + config.value());
}
}