更多内容可参考：[《Solon Cloud 开发（分布式套件）/使用分布式发现与注册服务》](/article/76)


### 1、使用本地发现服务


* 服务端

不需要改造，也不需要注册。

* 客户端，改造

引入 solon-cloud 插件依赖（自带了本地发现能力）。修改应用配置：

```yaml
solon.cloud.local:
  discovery:
    service:
      userapi: #添加本地服务发现（userapi 为服务名）
        - "http://localhost:8081"
```


服务使用的地方改造一下：

```java
@Mapping("user")
public class UserController {
    //直接指定地址和序列化方案（旧的不要了）
    //@NamiClient(url = "http://localhost:9001/rpc/v1/user", headers = "Content-Type=application/json")
    
    //指定服务名、路径和序列化方案（新的不用关注服务地址）
    @NamiClient(name = "userapi",  path="/rpc/v1/user", headers=ContentTypes.JSON)
    UserService userService;
    
    @Post
    @Mapping("register")
    public Result register(User user){
        //调用远程服务，添加用户
        userService.add(user);
        
        return Result.succeed();
    }
   
}
```



### 2、使用分布式（中间件）注册与发现服务

本案使用 water-solon-cloud-plugin 做为注册与发现服务。其它的 solon cloud 注册与服务插件都可。

* 服务端项目，改造

引入 water-solon-cloud-plugin 插件依赖（或者别的注册与发现服务）。修改应用配置：

```yml
server.port: 9001

solon.app:
  group: "demo"
  name: "userapi"
  
solon.cloud.water:
  server: "waterapi:9371"
```

其它不用动。


* 客户端项目，改造


引入 water-solon-cloud-plugin 插件依赖。修改应用配置：

```yml
server.port: 8081

solon.app:
  group: "demo"
  name: "userdemo"
  
solon.cloud.water:
  server: "waterapi:9371"
```

服务使用的地方改造一下：

```java
@Mapping("user")
public class UserController {
    //直接指定地址和序列化方案（旧的不要了）
    //@NamiClient(url = "http://localhost:9001/rpc/v1/user", headers = "Content-Type=application/json")
    
    //指定服务名、路径和序列化方案（新的不用关注服务地址）
    @NamiClient(name = "userapi",  path="/rpc/v1/user", headers=ContentTypes.JSON)
    UserService userService;
    
    @Post
    @Mapping("register")
    public Result register(User user){
        //调用远程服务，添加用户
        userService.add(user);
        
        return Result.succeed();
    }
   
}
```

打包后，启动服务。(要在water环境下运行)

```shell
java -jar userdemo.jar
```



### 3、代码演示（演示与文档内容略不同）

* [demo7003_rpc_sml_nacos](https://gitee.com/noear/solon-examples/tree/main/7.Solon-Remoting-Rpc/demo7003_rpc_sml_nacos)
* [demo7004-rpc_sml_zk](https://gitee.com/noear/solon-examples/tree/main/7.Solon-Remoting-Rpc/demo7004-rpc_sml_zk)
