Soul网关源码学习(4)- Sofa代理的配置和测试

前言

在上一篇文章《Soul网关源码学习(3)- Dubbo代理的配置和测试》中,我们学习了如何使用 soul 网关做 Dubbo 服务代理,同时还通过 Postman 做了一些简单的批量测试。那么这一篇,我们开始学习如何使用 soul 去代理 Sofa 服务。

配置

网关服务配置

检查Soul-Bootstrap下的 pom 依赖:

<!--sofa-rpc 依赖-->
<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofa-rpc-all</artifactId>
    <version>5.5.7</version>
</dependency>
<!--soul 网关的 sofa 插件-->
<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-plugin-sofa</artifactId>
    <version>${last.version}</version>
</dependency>
<!--sofa注册中心,这里示例是nacos,用户需要换成自己使用的注册中心-->
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.1.4</version>
</dependency>

如果之前没有添加上面的依赖,则需要添加后重新启动网关。

Sofa服务配置

Spring Boot

Spring boot Sofa 添加下面的依赖:

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

Application.yaml 添加下面的配置:

soul:
  sofa:
    adminUrl: http://localhost:9095
    contextPath: /sofa
    appName: sofa
 # adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加 http://
 # contextPath: 为你的这个项目在soul网关的路由前缀,这个你应该懂意思把? 比如/order ,/product 等等,网关会根据你的这个前缀来进行路由.
 # appName:你的应用名称,不配置的话,会默认取sofa配置中application 中的名称

Spring

Spring Sofa 服务添加下面的依赖:

<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-client-sofa</artifactId>
    <version>${project.version}</version>
</dependency>

添加Bean定义:

<bean id="sofaServiceBeanPostProcessor" class="org.dromara.soul.client.sofa.SofaServiceBeanPostProcessor">
	<constructor-arg  ref="sofaConfig"/>
</bean>
<bean id="sofaConfig" class="org.dromara.soul.client.sofa.common.config.SofaConfig">
     <property name="adminUrl" value="http://localhost:9095"/>
     <property name="contextPath" value="/你的contextPath"/>
     <property name="appName" value="你的名字"/>
</bean>

Sofa代理测试

登录 Soul Admin 开启 Sofa 插件

在这里插入图片描述
启动Sofa测试服务器

和之前的文章一样,这里也是使用 soul 源码下的测试用例。我们打开 soul-examples/soul-examples-sofa 子项目,参考上面“配置说明”,检查 pom 依赖和 Application.yaml 是否正确,确认无误后,直接启动服务。
在这里插入图片描述
登录Admin -> PluginList -> sofa,可以看到接口已经注册到控制台。

在这里插入图片描述
启动Soul网关

源码 soul 服务模块 soul-bootstrap 是没有添加 sofa依赖的,所以需要参考上面的“配置说明”,添加相应的 pom 依赖,同时检查application.yaml,然后重启网关服务。
在这里插入图片描述
在这里插入图片描述

如果日志输出上面的内容,则说明网关代理 sofa 服务成功了。

postman 简单测试

soul 对 sofa 的代理方式和 dubbo 是一样,即是使用 Http 对外提供服务。soul网关需要有一个路由前缀,这个路由前缀就是你接入项目进行配置的 contextPath,这里是"/sofa"。
参数方面的使用和上一篇文章《Soul网关源码学习(3)- Dubbo代理的配置和测试》是一样的,可以回去参考一下,这里就不再重复说了。
测试的 sofa 接口:

@Override
@SoulSofaClient(path = "/findById", desc = "Find by Id")
public DubboTest findById(final String id) {
    
    
    DubboTest dubboTest = new DubboTest();
    dubboTest.setId(id);
    dubboTest.setName("hello world Soul Sofa, findById");
    return dubboTest;
}

测试结果:
在这里插入图片描述
postman 批量并发 + 断言测试

测试接口:和上面一样使用 findById。
Postman Request:

  • url:localhost:9195/sofa/findById?id={ {id}}
  • 局部变量:
    var id = data.id;
    
  • 断言脚本:
    pm.test("Status code is 200", function () {
          
          
        //响应码
        pm.response.to.have.status(200);
    });
    pm.test("response id check", function () {
          
          
        var jsonData = pm.response.json();
        //返回data.id是否和参数id一致
    pm.expect(jsonData.data.id).to.eql(pm.variables.get("id").toString());
    });
    

同时并发1000个请求:

在这里插入图片描述
测试结果:

{
    
    
	"id": "bf21b14d-ec18-4ab1-ac20-79c193054c8a",
	"name": "soul-sofa",
	"timestamp": "2021-01-18T14:32:40.018Z",
	"collection_id": "80685d98-7951-4b10-b96b-aa78282ab587",
	"folder_id": 0,
	"environment_id": "0",
	## 每个请求有两个断言,所以这里totalPass是2000
	"totalPass": 2000,
	"totalFail": 0,
	## 平均每个请求耗时5ms左右
	"count": 1000,
	"totalTime": 5643
}

结语

本篇文章中,我们学习了如何使用 soul 来代理 Sofa 服务,同时通过 soul 源码下的测试用例,对 soul 网关进行了一些简单的压测,后面会继续介绍如何使用soul代理springCloud。

猜你喜欢

转载自blog.csdn.net/u012180773/article/details/112762457