```xml
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>local-solon-cloud-plugin</artifactId>
</dependency>
```


#### 1、描述

分布式扩展插件。基于 本地 适配的 solon cloud 插件。它比较特别，是分布式能力的本地模拟实现（是个假的分布式插件），且基本实现了 water 所能提供的能力（即覆盖了绝大部分的 solon cloud 能力）。（v1.11.2 之后支持）

场景定位：

* 让所有项目统一使用 solon cloud 接口进行开发
* 通过切换配置；就可以在 "本地单体服务" 和 "分布式服务（或微服务）"之间自由切换
 
比如：

* 定时任务可以在本地调度，配置改动就可以由 water 或 xxl-job 进行调度
* 或者配置，自由在本地配置与云端配置之间切换


#### 2、能力支持


| 云端能力接口 | 说明 | 备注 |
| -------- | -------- | -------- |
| CloudConfigService        | 云端配置服务            | 不支持 namespace；支持 group     |
| CloudDiscoveryService    | 云端注册与发现服务   | 不支持 namespace；支持 group     |
| CloudEventService          | 云端事件服务            | 不支持 namespace；支持 group     |
| CloudFileService            | 云端文件服务          |      |
| CloudI18nService            | 云端国际化服务          |      |
| CloudJobService            | 云端定时任务服务       |      |
| CloudListService            | 云端名单列表服务       |      |
| CloudMetricService        | 云端度量服务             |   空实现   |
| CloudTraceService         | 云端链路跟踪服务       |  空实现    |



#### 3、配置示例

```yaml
solon.cloud.local:
  server: "./solon-cloud/" #必须设置，也可以是资源目录： classpath:META-INF/solon-cloud/
  config:
    load: "demoapp.yml"    #加载配置到应用属性（多个以","隔开）
  discovery:
    service:
      demoapp: #添加本地服务发现（demoapp 为服务名）
        - "http://localhost:8081"
```

不同 server 配置的区别：

* 体外目录，支持文件上传（例：`./solon-cloud/`）
* 资源目录，则不支持（例：`classpath:META-INF/solon-cloud/`）

提醒：

* 通过 "...config.load" 加载的配置，会进入 Solon.cfg() 可使用 @Inject 注入

#### 4、演示项目

* [https://gitee.com/noear/solon-examples/tree/main/9.Solon-Cloud/demo9010-local](https://gitee.com/noear/solon-examples/tree/main/9.Solon-Cloud/demo9010-local)


#### 附录：能力使用说明：

##### 1)、云端配置服务（本地模拟）

内容格式支持： yml, properties, json （后缀做为name的一部分，可有可无）<br/>
文件地址格式： config/{group}_{name}，例示：

* ${server}/config/demo_demo-db
* ${server}/config/demo_demoapp.yml


**两种应用：**

可以通过配置加载配置
```yaml
solon.cloud.local:
  server: "/data/demo/solon-cloud/" #如果不设置，则为 classpath:META-INF/solon-cloud/
  config:
    load: "demoapp.yml"
```
可以通过注解直接注入
```java
@Configuration
public class Config {
    @Bean
    public void init1(@CloudConfig("demo-db") Properties props) {
        System.out.println("云端配置服务直接注入的：" + props);
    }
}
```

##### 2)、云端注册与发现服务（本地模拟）

让服务注册有地方去，也有地方可获取（即发现）

##### 3)、云端事件服务（本地模拟）

本地摸拟实现。不支持持久化，重启就会丢数据。最好还是引入消息队列的适配框架


##### 4)、云端文件服务（本地模拟）

存放在 ${server}/file/ 下

##### 5)、云端国际化配置服务（本地模拟）

内容格式支持： yml, properties, json （不能有手缀名，为了更好的支持中文）<br/>
文件地址格式： i18n/{group}_{name}-{locale}，例示：

* ${server}/i18n/demo_demoapp-zh_CN
* ${server}/i18n/demo_demoapp-en_US


##### 6)、云端定时任务调度服务（本地模拟）

时间到就会启动新的执行（不管上次是否执行完成了）


##### 7)、云端名单服务（本地模拟）

内容格式支持： json <br/>
文件地址格式： list/{name}-{type}.json，例示：

* ${server}/list/whitelist-ip.json


##### 8)、云端度量服务（本地模拟）

一个空服务。只为已有调用不出错


##### 9)、云端跟踪服务（本地模拟）

一个空服务。只为已有调用不出错

