diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/pom.xml b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5717b397994d6c888b151506f98d4b4cfdb386ea
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/pom.xml
@@ -0,0 +1,45 @@
+
+
+ 4.0.0
+
+ org.noear
+ solon-parent
+ 2.6.5-SNAPSHOT
+
+
+
+ demo7015
+ demo7015-rpc_sml-jmdns
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ org.noear
+ solon-rpc
+
+
+
+ org.noear
+ solon.logging.simple
+
+
+
+ org.noear
+ jmdns-solon-cloud-plugin
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/protocol/UserModel.java b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/protocol/UserModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..24894d896753b8bc6904ae53dffbf958f4da96a5
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/protocol/UserModel.java
@@ -0,0 +1,13 @@
+package demo7015.protocol;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserModel implements Serializable {
+ private long id;
+ private String name;
+ private int sex;
+ private String label;
+}
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/protocol/UserService.java b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/protocol/UserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2490aefa6226e862559d78519086fbdef2d37c4
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/protocol/UserService.java
@@ -0,0 +1,5 @@
+package demo7015.protocol;
+
+public interface UserService {
+ UserModel getUser(Integer userId);
+}
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/server/RpcApp.java b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/server/RpcApp.java
new file mode 100644
index 0000000000000000000000000000000000000000..a73e41f4f5fc6bfc0c9131bae4b183f7e3f346c7
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/server/RpcApp.java
@@ -0,0 +1,9 @@
+package demo7015.server;
+
+import org.noear.solon.Solon;
+
+public class RpcApp {
+ public static void main(String[] args) {
+ Solon.start(RpcApp.class, args);
+ }
+}
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/server/controller/UserServiceImpl.java b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/server/controller/UserServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f26d8e3e28de171ba91697f6c18958383de20d4
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/java/demo7015/server/controller/UserServiceImpl.java
@@ -0,0 +1,20 @@
+package demo7015.server.controller;
+
+import demo7015.protocol.UserModel;
+import demo7015.protocol.UserService;
+import org.noear.solon.annotation.Mapping;
+import org.noear.solon.annotation.Remoting;
+
+//开启bean的远程服务
+@Mapping("/user")
+@Remoting
+public class UserServiceImpl implements UserService {
+ @Override
+ public UserModel getUser(Integer userId) {
+ UserModel model = new UserModel();
+ model.setId(userId);
+ model.setName("user-" + userId);
+
+ return model;
+ }
+}
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/resources/app.yml b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/resources/app.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7a708ca6a80c5c37dca73b631b6b56c2bc4a73ab
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/main/resources/app.yml
@@ -0,0 +1,12 @@
+server.port: 8080
+
+solon.app:
+ name: demo_rpc
+ group: demo
+
+solon.logging.appender:
+ console:
+ level: INFO
+
+solon.cloud.jmdns:
+ server: localhost
\ No newline at end of file
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/java/demo7015/WebApp.java b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/java/demo7015/WebApp.java
new file mode 100644
index 0000000000000000000000000000000000000000..0230ec44e08aa2e372b6c98a47b09b0a2668ca14
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/java/demo7015/WebApp.java
@@ -0,0 +1,9 @@
+package demo7015;
+
+import org.noear.solon.Solon;
+
+public class WebApp {
+ public static void main(String[] args) {
+ Solon.start(WebApp.class, args);
+ }
+}
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/java/demo7015/controller/UserController.java b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/java/demo7015/controller/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c92824a40361d96447648c1159169065bbf59d39
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/java/demo7015/controller/UserController.java
@@ -0,0 +1,23 @@
+package demo7015.controller;
+
+import demo7015.protocol.UserModel;
+import demo7015.protocol.UserService;
+import org.noear.nami.annotation.NamiClient;
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Mapping;
+
+
+@Controller
+public class UserController {
+ //使用负载(name 保持与供应服务名相同;path 保持与接口路径相同)
+ @NamiClient(name = "demo_rpc",path = "/user")
+ UserService userService;
+
+ @Mapping("test")
+ public UserModel test() {
+ UserModel user = userService.getUser(12);
+ System.out.println(user);
+
+ return user;
+ }
+}
diff --git a/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/resources/app.yml b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/resources/app.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e4407db8024314a65d4641fe4a6de2b466fb3ac6
--- /dev/null
+++ b/7.Solon-Remoting-Rpc/demo7015-rpc_sml-jmdns/src/test/resources/app.yml
@@ -0,0 +1,12 @@
+server.port: 8081
+
+solon.app:
+ name: demo_client
+ group: demo
+
+solon.logging.appender:
+ console:
+ level: INFO
+
+solon.cloud.jmdns:
+ server: localhost
\ No newline at end of file
diff --git a/7.Solon-Remoting-Rpc/pom.xml b/7.Solon-Remoting-Rpc/pom.xml
index 02f88ce927c08164a19a16e8123f95231ed5ec5f..4e6df3168e3032460aaa65a2c69750a042dd93ef 100644
--- a/7.Solon-Remoting-Rpc/pom.xml
+++ b/7.Solon-Remoting-Rpc/pom.xml
@@ -40,6 +40,7 @@
demo7014-rpc_dubbo3_sml
demo7014-rpc_dubbo3_sml_zk
+ demo7015-rpc_sml-jmdns
demo7021-feign
demo7022-forest