Soul网关中的Spring Cloud插件

本篇文章主要介绍学习使用Spring Cloud插件,如何将Spring Cloud服务接入到Soul网关。主要内容如下:

  • Soul中使用Spring Cloud服务

    • 查看官方样例
    • 引入依赖
    • 注册Spring Cloud服务
    • 运行Spring Cloud服务
    • 启动Soul AdminSoul Bootstrap
    • 体验Spring Cloud服务

在前面几篇文章中,已经体验过了Souldivide插件,apache dubbo插件和sofa插件,今天的spring cloud插件是最后一篇有关业务服务如何接入Soul网关的文章。大体逻辑和之前的一致。

1. 在Soul中使用spring cloud服务

1.1 查看官方样例

Soul官方在soul-examples模块提供了测试样例,其中的soul-examples-springcloud模块演示的是Soul网关对springcloud服务的支持。模块目录及配置信息如下:

1

有关的配置信息还是和之前一样。在本项目中Spring Cloud的注册中心使用的是nacos

nacos可以在官网直接下载,然后解压,在bin目录下使用命令startup.cmd -m standalone就能启动成功。


server:
  port: 8884
  address: 0.0.0.0

spring:
  application:
    name: springCloud-test
  cloud: 
    nacos:
      discovery:
          server-addr: 127.0.0.1:8848 # 注册中心nacos的地址


springCloud-test:
  ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

soul:
  springcloud:
    admin-url: http://localhost:9095 # soul-admin的地址
    context-path: /springcloud

logging:
  level:
    root: info
    org.dromara.soul: debug
  path: "./logs"
1.2 引入依赖

spring cloud服务的pom文件中引入soul相关依赖,当前版本是2.2.1

	  <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-client-springcloud</artifactId>
            <version>${soul.version}</version>
        </dependency>

	<!--使用nacos作为注册中心-->
       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
1.3 注册spring cloud服务

在需要被代理的接口上使用注解@SoulSpringCloudClient@SoulSpringCloudClient注解会把当前接口注册到soul网关中。使用方式如下:

1

如果其他接口也想被网关代理,使用方式是一样的。在@SoulSpringCloudClient注解中,指定path即可。

1.4 运行spring cloud服务

运行SoulTestSpringCloudApplication,启动soul-examples-springcloud项目。成功启动后,可以在控制台看见接口被成功注册到soul网关中。

1

1.5 启动Soul AdminSoul Bootstrap

参考上一篇的Soul入门,启动Soul AdminSoul BootstrapSoul的后台界面如下:

1

如果spring cloud插件没有开启,需要手动在管理界面开启一下。

1

Soul Bootstrap中,加入相关依赖:

         <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-plugin-httpclient</artifactId>
            <version>${project.version}</version>
        </dependency>
	 <!--soul springCloud plugin start-->
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

        <!--soul springCloud plugin start end-->

httpclient插件也是需要的,在soul网关将http协议转换为spring cloud协议后,还需要通过httpclient插件发起web mvc请求。

提一句,当spring cloud服务和soul-bootstrap等启动成功后,可以在注册中心看到这两个服务实例。

1

1.6 体验spring cloud服务

三个系统(本身的业务系统(这里就是soul-examples-sofa),Soul后台管理系统Soul Admin,Soul核心网关Soul Bootstrap)都启动成功后,就能够体验到sofa服务在网关soul中的接入。

  • 先直连spring cloud服务

1

  • 再通过Soul网关请求spring cloud服务

1

	 //实际spring cloud提供的服务
    @GetMapping("/findById")
    @SoulSpringCloudClient(path = "/findById")
    public OrderDTO findById(@RequestParam("id") final String id) {
        OrderDTO orderDTO = new OrderDTO();
        orderDTO.setId(id);
        orderDTO.setName("hello world spring cloud findById");
        return orderDTO;
    }

上面演示的是先通过请求http://localhost:8884/order/findById?id=99直连spring cloud服务。再通过Soul网关发起请求http://localhost:9195/springcloud/order/findById?id=99,实际被调用的是spring cloud的服务。

最后,这篇文章主要介绍了Soulspring cloud提供的支持,结合实际案例进行了演示。至此,不同业务系统如何接入Soul网关就已经演示完了。其他的插件(比如:waf/sign/rate limiter等等)是Soul作为一个网关所提供的功能(防火墙,签名认证,限流等等)

接下来,将要分析的是Soul是如何完成数据同步的?在soul-admin的后台管理中修改了插件,选择器或规则,是如何将这些信息同步到网关的呢?敬请期待~