ShenYu 网关源码学习(1)- 简单介绍、编译和测试

前言

在开始学习 ShenYu之前,我们先来了解一下 ShenYu 到底是什么?ShenYu 的前名是 soul,最近正式加入了 Apache 的孵化器,因此改名为 ShenYu。其是一个异步的,高性能的,跨语言的,响应式的API网关,并在此基础上提供了非常丰富的扩展功能:

  • 支持各种语言(http协议),支持Dubbo, Spring-Cloud, Grpc, Motan, Sofa, Tars等协议。
  • 插件化设计思想,插件热插拔,易扩展。
  • 灵活的流量筛选,能满足各种流量控制。
  • 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
  • 流量配置动态化,性能极高。
  • 支持集群部署,支持 A/B Test,蓝绿发布。

环境配置

  • GitHub:https://github.com/dromara/soul
  • 官方文档:https://dromara.org/zh-cn/docs/soul/soul.html

建议先 fork 到自己的 githup 仓库,再 clone 到本地,通过 idea 我们能看到大体的项目结构:

启动

编译

mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true

启动 ShenYu - admin

admin 的后台数据是通过 Mysql 来存储的,所以首先需要在 application.yaml 文件中 设置你的 Mysql 连接:
在这里插入图片描述
然后直接启动 org.apache.shenyu.admin.SoulAdminBootstrap 即可。浏览器访问 http://localhost:9095/#/user/login,如果出现登录界面,表示 Admin 启动成功(默认的账号密码:admin 123456)。

启动网关服务

ShenYu-bootstrap 是网关的服务端,这是一个 SpringBoot 的工程,启动非常简单,直接run起来即可。

测试

Shen-Yu 的源码中有提供不同协议的测试客户端,我们通过这些简单的测试先来了解一下 Shen-Yu 的使用。

Http 代理测试

网关服务配置

网关服务引入插件依赖:Shen-Yu 是通过插件方式来提供不同的功能,如果需要使用某个功能需要在 Pom 文件中引入相关插件的依赖,反之如果想屏蔽某个功能,则直接把相应的插件从依赖中去掉即可。

检测 Pom 文件中是否有 http 协议的相关插件,如果没有需要引入并且重启:

<!--if you use http proxy start this-->
<dependency>
    <groupId>org.apache.shenyu</groupId>
    <artifactId>shenyu-spring-boot-starter-plugin-divide</artifactId>
    <version>${project.version}</version>
</dependency>

<!-- shenyu httpclient plugin start-->
<dependency>
    <groupId>org.apache.shenyu</groupId>
    <artifactId>shenyu-spring-boot-starter-plugin-httpclient</artifactId>
    <version>${project.version}</version>
</dependency>
<!-- shenyu httpclient plugin end-->

网关 Admin 配置

登录 ShenYu-admin -> 基础配置 -> 插件管理 -> 开启 divide 插件:
在这里插入图片描述

本地测试服务配置

首先进入模块 shenyu-examples/shenyu-examples-http,检测 application.yaml 的配置:
在这里插入图片描述
配置代理的路由规则

ShenYu 配置代理路由规则有两种方式:

  • 引入 ShenYu 相关代理 client 的依赖,通过 XML 或者注解的方式进行代理规则的配置。这种方式需要添加额外的依赖同时对原来的代码具有一定的侵入性,但是能大大降低手工配置的工作量,如果是自己开发的服务,同时又能容忍这点侵入性的话,个人比较推荐这种方式。

    对于这种方式,官方分别提供了 spring framework 和 spring boot 的 client 集成依赖包,更加详细的内容同学们可以直接参考官方文档

    • spring boot (这里 Http 本地测试服务使用的就是这种方式)
      依赖:
      <dependency>
          <groupId>org.apache.shenyu</groupId>
          <artifactId>shenyu-spring-boot-starter-client-springmvc</artifactId>
          <version>${shenyu.version}</version>
      </dependency>
      
      配置:
      • 在你的 controller 的接口上加上 @SoulSpringMvcClient 注解。
      • 你可以把注解加到 Controller 类上面,里面的path属性则为前缀,如果含有 /** 代表你的整个接口需要被网关代理。
      • 具体可以参考上面测试模块 :
        shenyu-examples/shenyu-examples-http/org.apache.shenyu.examples.http.controller.OrderController
    • spring framework
      依赖:
      <dependency>
         <groupId>org.dromara</groupId>
         <artifactId>soul-client-springmvc</artifactId>
         <version>${last.version}</version>
      </dependency>
      
      配置:
      在你的 bean定义的xml文件中新增如下:
      <bean id ="springMvcClientBeanPostProcessor" class ="org.dromara.soul.client.springmvc.init.SpringMvcClientBeanPostProcessor">
           <constructor-arg  ref="soulRegisterCenterConfig"/>
      </bean>
          
      <bean id="soulRegisterCenterConfig" class="org.dromara.soul.register.common.config.SoulRegisterCenterConfig">
           <property name="registerType" value="http"/>
           <property name="serverList" value="http://localhost:9095"/>
           <property name="props">
                
shenyu网关是一款开源的API网关软件,它可以帮助开发者实现对接口的统一管理流量控制。shenyu网关提供了多种功能,包括请求转发、请求过滤、流量限制、负载均衡等,帮助用户实现高可用高稳定性的系统架构。 shenyu网关基于Java开发,使用简单方便,支持多种开源框架中间件,如Spring Boot、Dubbo、Motan等。通过使用shenyu网关,开发者可以快速搭建起一个完善的微服务架构,可以轻松地管理监控各个微服务之间的通信流量。 另外,shenyu网关还提供了可视化的管理界面,方便用户进行参数配置、资源管理、性能监控等操作。用户可以通过该界面对各个服务进行细粒度的管理,实现功能的灵活配置动态调整。 码云是中国最大的代码托管平台,类似于国外的GitHub。用户可以通过码云托管自己的代码仓库,并利用这个平台进行团队协作项目管理。码云提供了Git版本控制、代码托管、代码审查等功能,支持多种开发语言开发工具。 与GitHub不同的是,码云在国内具有更好的访问速度稳定性,同时还提供了国内常用的Git代码托管服务,支持国内的开发者更方便地使用访问。用户可以在码云上创建自己的项目仓库,与其他开发者进行交流学习,并共同进行开发维护。 综上所述,shenyu网关码云都是开发者常用的工具。shenyu网关可以帮助开发者实现API网关的功能,提供统一的接口管理流量控制;码云则是代码托管平台,提供代码的版本控制团队协作功能。两者的结合可以帮助开发者更好地进行微服务架构的开发管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值