推广 | 更多HarmonyOS 开放才能内容可查看
引言:同一的开辟体验
在微办事架构日益普及的今天,开辟人员经常面对一个困境:如安在本地开辟情况中高效测试分布式办事功能?或者一套体系给不合的客户应用,有的须要单体安排,有的须要分布式安排,有的须要微办事安排。
传统做法,往往须要在本地搭建复杂的分布式情况,或者为不合安排方法编写不合的代码(要么用微办事方法开辟,要么用单体方法开辟)。Local-Solon-Cloud-Plugin 恰是为解决这一痛点而生。
插件概述
核心定位
Local-Solon-Cloud-Plugin 是一个基于本地适配的 Solon Cloud 插件,它模仿实现了分布式体系的核心才能,却不须要真实的分布式情况。自 v1.11.2 版本开端供给支撑,该插件覆盖了 Solon Cloud 所能供给的大年夜部分接口才能。
核心价值
- 同一开辟接口:所有项目应用雷同的 Solon Cloud 接口进行开辟
- 无缝情况切换:经由过程简单设备切换,即可在"本地单体办事"和"分布式办事"之间自由转换
- 降低测试复杂度:无需搭建复杂分布式情况即可测试分布式功能
应用处景示例
// 同一套代码,不合情况运行// 本地开辟:应用 local-solon-cloud-plugin// 临盆情况:切换为 water 或其它分布式实现import org.noear.solon.cloud.annotation.CloudJob;// 准时义务示例@CloudJob(name = "demoJob", cron7x = "0 0 0 * * ?")public void executeJob() { // 本地开辟时由插件调剂 // 临盆情况可由 Water 或 XXL-Job 调剂}
快速开端
添加依附
<dependency> <groupId>org.noear</groupId> <artifactId>local-solon-cloud-plugin</artifactId> <!-- 版本跟随 Solon 主版本 --></dependency>
基本设备
# app.ymlsolon.app: name: demoapp group: demosolon.cloud.local: server: "./solon-cloud/" # 必须设置,也可所以资本目次 config: load: "demoapp.yml" # 加载设备到应用属性 discovery: service: demoapp: # 添加本地办事发明 - "http://localhost:8081"
设备差别解释
- 体外目次(如
./solon-cloud/):支撑文件上传功能 - 资本目次(如
classpath:META-INF/solon-cloud/):不支撑文件上传
Solon Cloud 才能支撑详情
云端才能接口 解释 本地模仿实现 备注 CloudConfigService 云端设备办事 ✅ 支撑 不支撑 namespace;支撑 group CloudDiscoveryService 云端注册与发明办事 ✅ 支撑 不支撑 namespace;支撑 group CloudEventService 云端事宜办事 ✅ 支撑 不支撑 namespace;支撑 group CloudFileService 云端文件办事 ✅ 支撑 完全实现 CloudI18nService 云端国际化办事 ✅ 支撑 完全实现 CloudJobService 云端准时义务办事 ✅ 支撑 完全实现 CloudListService 云端名单列表办事 ✅ 支撑 完全实现 CloudMetricService 云端度量办事 ⚠️ 空实现 仅包管接口调用不报错 CloudTraceService 云端链路跟踪办事 ⚠️ 空实现 仅包管接口调用不报错核心功能详解
1. 云端设备办事(本地模仿)
支撑 YAML、Properties 格局,文件路径格局:config/{group}_{name}
设备加载方法:
# app.ymlsolon.app: name: demoapp group: demo solon.cloud.local: server: "/data/demo/solon-cloud/" config: load: "demoapp.yml,demo-db.properties"
import org.noear.solon.annotation.Bean;import org.noear.solon.annotation.Configuration;import org.noear.solon.cloud.annotation.CloudConfig;@Configurationpublic class Config { // 直接注入云端设备(已经 config.load 的设备) @Bean public DataSource initDbConfig(@Inject("${demo-db}") HikariDataSource ds) { return ds; } // 动态获取云端设备(直接注入设备块) @CloudConfig("test.yml") private Properties testSettings;}
2. 办事注册与发明(本地模仿)
solon.cloud.local: discovery: service: user-service: - "http://localhost:8081" - "http://localhost:8082" order-service: - "http://localhost:8083"
可以经由过程情况设备,切换单体或分布式的设备需求。
3. 云端事宜办事(本地模仿)
在本地情况中模仿办事注册中间的功能:
import org.noear.snack4.ONode;import org.noear.solon.annotation.Controller;import org.noear.solon.annotation.Mapping;import org.noear.solon.annotation.Post;import org.noear.solon.cloud.CloudClient;import org.noear.solon.cloud.model.Event;// 宣布事宜@Mapping("order")@Controllerpublic class OrderController { @Post @Mapping("create") public void createOrder(Order order) { // 宣布订单创建事宜 CloudClient.event().publish(new Event("order.created",>import org.noear.solon.cloud.CloudEventHandler;import org.noear.solon.cloud.annotation.CloudEvent;import org.noear.solon.cloud.model.Event;// 订阅事宜@CloudEvent("order.created")public class OrderEventHandler implements CloudEventHandler { @Override public boolean handle(Event event) throws Throwable { // 处理订单创建事宜 return false; }}
留意:本地模仿实现不支撑事宜持久化,重启后数据会损掉。临盆情况建议应用消息队列适配框架。
4. 文件办事(本地模仿)
文件存储在 ${server}/file/ 目次下,支撑标准文件操作接口。
5. 国际化办事(本地模仿)
文件格局:i18n/{group}_{name}-{locale}(不支撑文件后缀)
import org.noear.solon.annotation.Bean;import org.noear.solon.annotation.Configuration;import org.noear.solon.cloud.impl.CloudI18nBundleFactory;import org.noear.solon.i18n.I18nBundleFactory;//注册国际化包工厂@Configurationpublic class DemoConfig { @Bean public I18nBundleFactory i18nBundleFactory(){ //将国际化办事,切换为云端接口 return new CloudI18nBundleFactory(); }}//应用 solon.i18n 接口import org.noear.solon.annotation.Controller;import org.noear.solon.annotation.Mapping;import org.noear.solon.i18n.I18nService;import java.util.Locale;@Controllerpublic class DemoController{ I18nService i18nService = new I18nService("test-api"); @Mapping("/hello") public String hello(Locale locale){ return i18nService.get(locale, "hello"); }}
6. 准时义务调剂(本地模仿)
import org.noear.solon.cloud.annotation.CloudJob;@CloudJob(name = "dailyReport", cron7x = "0 0 2 * * ?")public void generateDailyReport() { // 天天凌晨2点履行 // 留意:时光到就会启动新的履行,不管前次是否完成}
7. 名单办事(本地模仿)
支撑IP白名单/黑名单等功能,JSON格局存储:list/{name}-{type}.json
实战示例
完全设备示例
注解注入方法:
solon: app: name: demoapp group: demosolon.cloud.local: server: "./cloud-data/" config: load: "app.yml,db.yml" refreshInterval: 10s # 设备刷新距离 discovery: service: user-service: - "http://localhost:8080" product-service: - "http://localhost:8081" job: enabled: true # 启用义务调剂 event: enabled: true # 启用事宜调剂
多情况切换设备(参考)
# 本地开辟情况(应用本地模仿)solon.cloud: local: enabled: true server: "./solon-cloud-local/"# 临盆情况(应用真实的分布式办事)# solon.cloud:# water:# server: "water-server:9371"# config:# load: "demoapp.yml"
留意事项
- 事宜持久化:本地事宜办事不支撑持久化,重要营业场景需留意
- 机能监控:度量办事和跟踪办事为空实现,临盆情况须要调换
- 集群特点:本地模仿不支撑真正的集群特点,如分布式锁、Leader选举等
- 设备同步:多实例情况下,本地设备须要手动同步(也可以打包到 jar)
总结
Local-Solon-Cloud-Plugin 为 Solon Cloud 生态供给了一种优雅的解决筹划,它闪开辟者在享受分布式架构优势的同时,避免了本地开辟的复杂性。经由过程同一的接口设计和灵活的情况切换才能,该插件明显晋升了开辟效力,便利适应不合的客户需求。
无论是始创项目快速验证,照样大年夜型项目标本地开辟,Local-Solon-Cloud-Plugin 都是一个值得测验测验的优良对象。它的存在使得"一次编写,处处运行"的理念在分布式开辟范畴得以更好地实现。

发表评论 取消回复