1. 概述

1.1 插件名称

  • sofa插件

1.2 适用场景

  • 协议转换,将 http 协议的请求转换成 sofa 框架协议的服务处理的插件
  • 服务负载均衡

1.3 插件功能

  • 将 http 协议的请求转换成 sofa 框架协议

1.4 插件代码

  • 核心模块shenyu-plugin-sofa
  • 核心类org.apache.shenyu.plugin.sofa.SofaPlugin

1.5 添加自哪个shenyu版本

  • 2.3.0

2. 如何使用插件

2.1 插件使用流程图

image-20220827001111840

2.2 导入pom

  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>rpc-sofa-boot-starter</artifactId>
  4. <version>${rpc-sofa-boot-starter.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.shenyu</groupId>
  8. <artifactId>shenyu-spring-boot-starter-client-sofa</artifactId>
  9. <version>${project.version}</version>
  10. <exclusions>
  11. <exclusion>
  12. <artifactId>guava</artifactId>
  13. <groupId>com.google.guava</groupId>
  14. </exclusion>
  15. </exclusions>
  16. </dependency>

2.3 在客户端项目中配置

  • 在 application.yml 中配置 sofa 的配置
  1. com:
  2. alipay:
  3. sofa:
  4. rpc:
  5. registry-address: zookeeper://127.0.0.1:2181 # consul # nacos
  6. bolt-port: 8888
  7. shenyu:
  8. register:
  9. registerType: http #zookeeper #etcd #nacos #consul
  10. serverLists: http://localhost:9095 #localhost:2181 #http://localhost:2379 #localhost:8848
  11. props:
  12. username: admin
  13. password: 123456
  14. client:
  15. sofa:
  16. props:
  17. contextPath: /sofa
  18. ipAndPort: sofa
  19. appName: sofa
  20. port: 8888
  • 在 resources 目录下xml 文件中配置 sofa 服务暴露的服务接口
  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:sofa="http://sofastack.io/schema/sofaboot"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  5. http://sofastack.io/schema/sofaboot https://sofastack.io/schema/sofaboot.xsd"
  6. default-autowire="byName">
  7. <!-- 示例 sofa 接口 -->
  8. <sofa:service ref="sofaSingleParamService" interface="org.apache.shenyu.examples.sofa.api.service.SofaSingleParamService">
  9. <sofa:binding.bolt/>
  10. </sofa:service>
  11. <!-- 示例 sofa 接口 -->
  12. <sofa:service ref="sofaMultiParamService" interface="org.apache.shenyu.examples.sofa.api.service.SofaMultiParamService">
  13. <sofa:binding.bolt/>
  14. </sofa:service>
  15. </beans>

2.4 启用插件

  • shenyu-admin —> 基础配置 —> 插件管理-> sofa ,设置为开启。

    image-20220827003924276

2.5 配置插件

2.5.1 配置注册中心参数

image-20220827004626827

  • protocol: 注册中心协议,目前支持 zookeeper、consul、nacos。
  • register: 注册中心的服务 IP 和 PORT。
  • threadpool:业务线程池类型,有fixedeagercachedlimitedshared共5种类型,前面4种与dubbo官方提供的线程池一一对应,不多解释,这里单独说下shared,正如其名,所有proxy插件共用一个shared线程池,这样做的好处是能够减少线程池数量,进而降低内存、提高资源利用率。
  • corethreads:业务线程池核心线程数。
  • threads:业务线程池最大线程数。
  • queues:业务线程池阻塞队列长度,0表示无界阻塞队列

2.5.2 选择器配置

流量需要经过选择器匹配。

image-20220827004904249

  • 通过@ShenyuSofaClient注解自动配置选择器。

2.5.3 规则配置

流量经过选择器匹配成功之后,会进入规则来进行最终的流量匹配。

image-20220827004945226

  • 通过@ShenyuSofaClient注解自动配置选择器。

2.5.4 元数据配置

sofa 应用客户端接入到Apache ShenYu网关时,会自动注册,可以在 shenyu-admin后台管理系统的基础配置 --> 元数据管理中查看,每一个sofa接口方法,都会对应一条元数据。

image-20220827005042417

  • 应用名称:该条元数据所属的应用名称。

  • 方法名称:需要调用的方法名。

  • 路径:http请路径。

  • 路径描述:对该路径的说明,方便查看。

  • 参数类型:按照接口的参数类型顺序。

  • Rpc扩展参数:接口的扩展参数配置,json格式。

    示例:{"loadbalance":"hash","retries":3,"timeout":-1}

    • loadbalance:负载均衡策略,当前支持 roundRobin、random 和 hash。
    • retries:调用客户端超时失败的重试次数。
    • timeout:调用客户端的超时时间。
  • 服务接口:sofa接口的全限定类名。

  • Rpc类型:下拉选择 sofa

2.6 示例

2.6.1 使用 ShenYu 访问 sofa 服务

2.6.1.1 准备工作

  • 启动 Zookeeper 服务注册发现中心
  • 启动 ShenYu Admin
  • 启动 Shenyu Bootstrap

2.6.1.2 插件配置

  • 打开插件,在 shenyu-admin —> 基础配置 —> 插件管理-> sofa ,设置为开启,并且根据需要调整注册中心配置。
  • 根据实际情况调整 shenyu-examples-sofa 项目中 application.yml 配置并启动。

2.6.2.6 请求服务并且验证结果

image-20220828012420068

3. 如何禁用插件

  • 在 shenyu-admin —> 基础配置 —> 插件管理 —> 关闭 sofa 插件状态

image-20220827010106265