前言
在上一篇文章《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。