Apache ShenYu(原 soul) 网关 整合 nacos

公司做项目重构,从单体换成微服务,没有做过网关相关开发的我接下了这个工作.
现在关于shenyu(原soul)的文章、教程都比较少,所以记录一下整合nacos的过程,希望能够对你有帮助

架构

架构图

  • shenyu-admin : 插件和其他信息配置的管理后台

  • shenyu-bootstrap : 用于启动项目,用户可以参考

  • shenyu-client : 用户可以使用 Spring MVC,Dubbo,Spring Cloud 快速访问

  • shenyu-disruptor : 基于disruptor的封装

  • shenyu-register-center : shenyu-client提供各种rpc接入注册中心的支持

  • shenyu-common : 框架的通用类

  • shenyu-dist : 构建项目

  • shenyu-metrics : prometheus(普罗米修斯)实现的 metrics

  • shenyu-plugin : ShenYu 支持的插件集合

  • shenyu-spi : 定义 ShenYu spi

  • shenyu-spring-boot-starter : 支持 spring boot starter

  • shenyu-sync-data-center : 提供 ZooKeeper,HTTP,WebSocket,Nacos 的方式同步数据

  • shenyu-examples : RPC 示例项目

  • shenyu-web : 包括插件、请求路由和转发等的核心处理包

本文目标

我在做前期准备工作的时候,最关心的问题是如何接入nacos.如果想要搞清这个问题就需要知道具体哪里用到了nacos,起到了什么作用.

根据我的理解,用到nacos的地方一共有两处,一处是数据同步,一处是Spring cloud服务接入网关

数据同步

数据同步原理.png

数据同步就是架构图中的Sync Data.是指在 shenyu-admin 后台操作数据以后,使用何种策略将数据同步到 Apache ShenYu 网关.这里的数据包括插件、选择器、规则数据、元数据、签名数据等.

在使用nacos的情况下,nacos的配置中心会包含全量数据.当用户在 shenyu-admin 更新了数据,会首先更新到数据库,然后去 全量 更新 nacos 在配置中心的数据. Apache ShenYu 网关会监听nacos,一旦有信息变更,则更新本地缓存

Spring cloud 服务接入网关

Spring cloud 服务接入网关 就是架构图中的Plugins.
我的理解就是这部分作用就是 拉取nacos的注册信息,把服务名称转换成IP+端口

版本信息

Nacos : 2.0.3
Apache ShenYu : 2.4.3

准备工作

  1. mysql
    1. https://github.com/apache/incubator-shenyu/tree/master/db/init/mysql
    2. 下载mysql的初始化脚本,并执行
  2. nacos
    1. 如果你是docker部署,需要映射两个端口 一个8848 一个9848
  3. 下载源码
    1. https://github.com/apache/incubator-shenyu
    2. clone项目,导入到idea,切换到2.4.3-release分支
  4. 测试项目(相当于业务服务)
    1. 搭建一个能注册进nacos的项目
    2. 添加一个controller以供测试

整合 nacos

源码目录结构.png

先看源码目录,当前需要重点关注的两个模块分别是shenyu-amdinshenyu-bootstrap.

  • shenyu-amdin就是 网关管理系统
  • shenyu-bootstrap就是 网关的启动入口
Spring cloud 服务接入网关
  • 这一步的目标就是一个请求请求到网关上之后,网关按照路由规则,成功转发到业务服务上.
    首先把关注点放到 shenyu-amdin 模块,打开shenyu-amdin模块的 application.yml.

  • spring.profiles.atcive 改成mysql

spring:  
  profiles:  
    active: mysql
  • 打开 application-mysql.yml 把mysql的连接信息改成你的mysql信息

  • 然后把关注点放到 shenyu-bootstrap 模块,打开shenyu-bootstrap 模块的 application.yml.

  • 把eureka相关配置注掉,然后把spring.cloud.discovery.enabledspring.cloud.nacos.discovery.enabled 设为true,并配置nacos的相关信息

spring:  
  main:  
    allow-bean-definition-overriding: true  
  application:  
    name: shenyu-bootstrap  
  codec:  
    max-in-memory-size: 2MB  
  cloud:  
    loadbalancer:  
      ribbon:  
        enabled: false  
    discovery:  
      enabled: true  
    nacos:  
      discovery:  
        server-addr: 127.0.0.1:8848 # Spring Cloud Alibaba Dubbo use this.  
        enabled: true  
        namespace: 2dfdefa9-1ddb-482d-84ee-41bffc4d10ea  
#eureka:  
#  client:  
#    enabled: false  
#    serviceUrl:  
#      defaultZone: http://localhost:8761/eureka/  
#  instance:  
#    prefer-ip-address: true
  • 启动shenyu-bootstrapshenyu-amdin 和 测试项目

  • 登陆 网关管理系统

    • 地址: http:// shenyu-amdin 的 IP :9095/
    • 🌰:http://127.0.0.1:9095/
    • 用户名: admin
    • 密码: 123456
  • 打开插件管理,找到Spring cloud ,设为开启

    • 插件管理.png
  • 新增元数据

    • 元数据的作用就是指定某一路径前缀使用什么插件
    • 也就是说service1为前缀的请求都会被Springcloud插件处理
    • 新增元数据.png
  • 新增选择器及规则

    • 选择器的serviceId对应的就是你的业务服务的service name,是网关能够正确找到你服务的关键

    • 测试项目application.png

    • 新增选择器.png

    • 新增规则.png

  • 新增ContextPath

    • ContextPath的规则里的contextPath能够去掉你的路径前缀

    • 插件列表-HttpProcess-ContextPath-选择器.png

    • 插件列表-HttpProcess-ContextPath-规则.png

  • 请求测试接口

    • URL: http://网关地址:ip/路径前缀/接口地址
    • 我的URL则是: http://127.0.0.1:9195/service1/echo/a
    • 在这里插入图片描述
数据同步
  • 找到 shenyu-bootstrap 模块的 application.yml ,注掉 sync 下的 websocket ,打开nacos 相关的配置,并修改

    • 同步数据-bootstrap-application.png
  • 打开shenyu-amdin模块的 application.yml,做同样的操作

    • 数据同步-admin-application.png
  • shenyu-bootstrap 模块的pom中添加依赖

<!-- apache shenyu data sync start use nacos-->  
<dependency>  
    <groupId>org.apache.shenyu</groupId>  
    <artifactId>shenyu-spring-boot-starter-sync-data-nacos</artifactId>  
    <version>${project.version}</version>  
</dependency>
  • 启动shenyu-bootstrapshenyu-amdin 和 测试项目

  • 如果配置中心出现了下面四个文件,则说明 shenyu-amdin 接入成功

    • 数据同步-nacos.png
  • 请求测试接口

    • URL: http://网关地址:ip/路径前缀/接口地址

相关文档
部署先决条件: https://shenyu.apache.org/zh/docs/deployment/deployment-before
本地部署: https://shenyu.apache.org/zh/docs/deployment/deployment-local
Spring Cloud服务接入: https://shenyu.apache.org/zh/docs/user-guide/spring-cloud-proxy
数据同步: https://shenyu.apache.org/zh/docs/user-guide/use-data-sync
数据同步原理: https://shenyu.apache.org/zh/docs/design/data-sync


🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹
🌹                              ❗️您的 赞 👍 、收藏 🌟 、关注➕ 是我最大的动力❗️                     🌹
🌹                              如果您对文章有任何意见或建议,欢迎在 评论区 、私信 留言                  🌹
🌹                                          或通过我的邮箱联系到我                                  🌹
🌹                                  📮 wangleshan1997@gmail.com 📮                              🌹
🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
shenyu网关是一款开源的API网关软件,它可以帮助开发者实现对接口的统一管理和流量控制。shenyu网关提供了多种功能,包括请求转发、请求过滤、流量限制、负载均衡等,帮助用户实现高可用和高稳定性的系统架构。 shenyu网关基于Java开发,使用简单方便,支持多种开源框架和中间件,如Spring Boot、Dubbo、Motan等。通过使用shenyu网关,开发者可以快速搭建起一个完善的微服务架构,可以轻松地管理和监控各个微服务之间的通信和流量。 另外,shenyu网关还提供了可视化的管理界面,方便用户进行参数配置、资源管理、性能监控等操作。用户可以通过该界面对各个服务进行细粒度的管理,实现功能的灵活配置和动态调整。 码云是中国最大的代码托管平台,类似于国外的GitHub。用户可以通过码云托管自己的代码仓库,并利用这个平台进行团队协作和项目管理。码云提供了Git版本控制、代码托管、代码审查等功能,支持多种开发语言和开发工具。 与GitHub不同的是,码云在国内具有更好的访问速度和稳定性,同时还提供了国内常用的Git代码托管服务,支持国内的开发者更方便地使用和访问。用户可以在码云上创建自己的项目仓库,与其他开发者进行交流学习,并共同进行开发和维护。 综上所述,shenyu网关和码云都是开发者常用的工具。shenyu网关可以帮助开发者实现API网关的功能,提供统一的接口管理和流量控制;码云则是代码托管平台,提供代码的版本控制和团队协作功能。两者的结合可以帮助开发者更好地进行微服务架构的开发和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值