官网文档中有详细的接入流程,地址:https://dromara.org/zh-cn/docs/soul/user-springcloud.html
soul-admin(如有疑问,出门左转
【Soul源码阅读】2.单机部署 Soul 或 官网文档-搭建Soul网关环境)
在 soul-bootstrap 的 pom.xml 文件中,找到了被注释掉的3个依赖,打开注释:
org.dromara
soul-spring-boot-starter-plugin-springcloud
${project.version}
org.springframework.cloud
spring-cloud-commons
2.2.0.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
2.2.0.RELEASE
以下两种配置,需要根据业务项目的实际情况选择。
引入 Eureka 注册中心的依赖:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.2.0.RELEASE
application-local.yml 文件中,把被注释的配置打开:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
引入 Nacos 注册中心的依赖:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.1.0.RELEASE
application-local.yml 文件中,把被注释的配置打开:
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
配置完成后,记得重启网关!
这里以源码中的示例 soul-examples-eureka 和 soul-examples-springcloud 为例子。
其中 soul-examples-eureka 只是一个注册中心,只需要保证配置文件内容跟 soul-examples-springcloud 能够对应上即可。
在业务系统中需要引入如下依赖(查看 soul-examples-springcloud 的 pom 文件中已经引入)
org.dromara
soul-spring-boot-starter-client-springcloud
${soul.version}
soul:
springcloud:
admin-url: http://localhost:9095
context-path: /springcloud
# adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加http://
# contextPath: 为你的这个mvc项目在soul网关的路由前缀,这个你应该懂意思把? 比如/order ,/product 等等,网关会根据你的这个前缀来进行路由.
# full: 设置true 代表代理你的整个服务,false表示代理你其中某几个controller
这里配置的3个属性(full 字段没有配置,默认为 false),对应于 SoulSpringCloudConfig 这个 JavaBean。
@Data
public class SoulSpringCloudConfig {
private String adminUrl;
private String contextPath;
/**
* Set true means providing proxy for your entire service, or only a few controller.
*/
private boolean full;
}
这里联系前几天配置的不同协议,dubbo、sofa 是没有这个字段的(RPC 远程方法调用)。
只有 http 跟今天配置的 springcloud 有这个字段(使用 SpringMVC Controller 层暴露 http 请求)。
所以 full 字段才有意义,如果为 true,代表整个业务系统或微服务节点所有的 Controller 层暴露的接口,都被 soul 网关代理,方便了业务系统中如果有很多需要被代理的接口一个一个去增加注解的麻烦。
SoulSpringCloudClient
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface SoulSpringCloudClient {
String path();
String ruleName() default "";
String desc() default "";
String rpcType() default "springCloud";
boolean enabled() default true;
}
通过找这个注解使用的地方,又找到了类似的代码,url 就是自动将 Spring Cloud 服务接口信息同步给 soul-admin 的注册地址。
// SpringCloudClientBeanPostProcessor.java
/**
* Instantiates a new Soul client bean post processor.
*
* @param config the soul spring cloud config
* @param env the env
*/
public SpringCloudClientBeanPostProcessor(final SoulSpringCloudConfig config, final Environment env) {
ValidateUtils.validate(config, env);
this.config = config;
this.env = env;
this.url = config.getAdminUrl() + "/soul-client/springcloud-register";
executorService = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
}
【Soul网关管理】【系统管理】【插件管理】【springCloud】【编辑】
依次启动4个项目,正常启动后,如下图所示:
在 soul-examples-springcloud 控制台输出以下成功注册的日志(springCloud client register success):
2021-01-21 16:36:22.106 INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/save","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/save","enabled":true}
2021-01-21 16:36:22.136 INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/path/**","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/path/**","enabled":true}
2021-01-21 16:36:22.161 INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/path/**/name","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/path/**/name","enabled":true}
2021-01-21 16:36:22.182 INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/findById","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/findById","enabled":true}
2021-01-21 16:36:22.204 INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/test/**","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/test/**","enabled":true}
【Soul网关管理】【插件列表】【springCloud】
在 soul-admin web 页面可以看到 springCloud 接口注册进来了。
localhost:9195/springcloud/test/findByUserId?userId=95
localhost:9195/springcloud/test/save
{
"userId": "95",
"userName": "springcloud_name"
}
localhost:9195/springcloud/order/path/95/springcloud-name