Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >盘古开发框架集成 ShenYu 网关实现 Dubbo 泛化调用

盘古开发框架集成 ShenYu 网关实现 Dubbo 泛化调用

原创
作者头像
码农大熊
发布于 2022-05-08 13:17:48
发布于 2022-05-08 13:17:48
1.1K0
举报
文章被收录于专栏:盘古开发框架盘古开发框架

盘古开发框架下实现微服务网关的缺省姿势为基于 pangu-web 模块的传统接口调用模式,具体请参考文档:如何发布微服务 (API 网关)。本文提供另外一种通过集成Apache ShenYu 实现网关泛化调用 Dubbo 服务将其发布为 HTTP 接口的可选方法。

ShenYu 网关介绍

ShenYu 网关基于 Webflex 非阻塞模型通过泛化调用后端 Dubbo 服务。依赖 Netty 不需要 Servlet 容器,不需要引入服务接口包即可通过 Dubbo 泛化调用服务接口的方式就可以将后端 Dubbo 服务转换为 HTTP API。同时网关支持鉴权、动态限流、熔断、防火墙、灰度发布等。

相关名词解释

  • shenyu-adminundefined网关插件和元数据信息配置管理后台。独立 JAR,需要单独部署。
  • shenyu-gatewayundefined网关模块,代理 Http 请求,泛化调用后端 Dubbo 服务。此模块负责接收 Http 请求。
  • 数据同步undefined数据同步是指在 ShenYu-Admin 后台操作数据以后,使用何种策略将数据同步到 ShenYu Gateway 网关模块。ShenYu 当前支持 ZooKeeper、WebSocket、Http 长轮询、Nacos 、Etcd 和 Consul 进行数据同步。盘古开发使用的是 WebSocket 方式进行数据同步。
  • 插件undefinedShenYu 使用插件化设计思想,实现插件的热插拔。内置丰富的插件,包括 RPC 代理、熔断和限流、权限认证、监控等等。
  • 选择器undefined每个插件可设置多个选择器,对流量进行初步筛选。
  • 规则undefined每个选择器可设置多个规则,对流量进行更细粒度的控制。

网关调用结构图

ShenYu 网关实战

ShenYu 网关提供的功能非常多,这里我们只关注 HTTP 请求代理功能。即代理前端 HTTP 请求,通过 Dubbo 泛化调用后端 Dubbo 服务。

安装相关模块

  • 盘古 Parent<parent> <groupId>com.gitee.pulanos.pangu</groupId> <artifactId>pangu-parent</artifactId> <version>latest.version.xxx</version> <relativePath/> </parent><dependency> <groupId>com.gitee.pulanos.pangu</groupId> <artifactId>pangu-spring-boot-starter</artifactId> </dependency><dependency> <groupId>com.gitee.pulanos.pangu</groupId> <artifactId>pangu-dubbo-spring-boot-starter</artifactId> </dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-sync-data-websocket</artifactId> </dependency> <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-apache-dubbo</artifactId> </dependency>基于 ShenYu 网关开发模式不需要引入 Dubbo 服务接口 Jar,网关会根据服务接口的元数据信息,泛化调用 Dubbo 服务接口。服务接口的元数据信息则根据 Dubbo 服务应用中的配置自动上传到 ShenYu 网关管理系统。此内容在下文会继续讲解。
  • 基础模块
  • Dubbo 模块
  • 网关模块

本地配置

为便于理解,本文基于本地配置的方式编写。若改为标准的 Nacos 配置中心模式,请参阅:配置中心 章节。

代码语言:jsx
AI代码解释
复制
server:
  port: 9090

spring:
  main:
    allow-bean-definition-overriding: true

shenyu:
  cross:
    enabled: true
    allowedHeaders:
    allowedMethods: "*"
    allowedOrigin: "*"
    allowedExpose: "*"
    maxAge: "18000"
    allowCredentials: true
  switchConfig:
    local: true
  file:
    enabled: true
    maxSize : 10
  sync:
    websocket:
      urls: ${shenyu.websocket.urls:ws://localhost:9095/websocket}
  dubbo:
    parameter: multi
  exclude:
    enabled: false
    paths:
      - /favicon.ico
  extPlugin:
    path:
    enabled: true
    threads: 1
    scheduleTime: 300
    scheduleDelay: 30
  scheduler:
    enabled: false
    type: fixed
    threads: 16
  upstreamCheck:
    enabled: false
    timeout: 3000
    healthyThreshold: 1
    unhealthyThreshold: 1
    interval: 5000
    printEnabled: true
    printInterval: 60000
关键配置项说明
  • shenyu.sync.websocket.urlsundefined表示网关和 ShenYu Admin 之间使用 Websocket 的方式进行数据同步,这里是配置 ShenYu Admin 提供的 Websocket 数据同步服务的地址(支持集群,逗号分割)。

上表中提到到 ShenYu Admin 是 ShenYu 网关框架的配置 & 元数据管理后台。这里包含了网关模块自己的配置信息也包含了后台服务接口元数据信息,这理的配置信息和元数据信息需要和网关模块同步。ShenYu 支持多种数据同步方案,Websocket 只是盘古开发选用的一种缺省方案。

调用微服务接口

基于 ShenYu 的网关开发模式既不需要引入服务接口 JAR,也不需要编写具体的调用代码。完全由网关根据服务接口元数据进行 Dubbo 泛化调用。

网关是如何知道 Dubbo 服务接口元数据的呢?
  • 通过 ShenYu Admin 后台系统,『基础配置->元数据管理』菜单,手工新增每一个接口的元数据,然后将数据自动同步到网关模块。(不建议,量大的话太繁琐)
  • 对Dubbo服务提供者增加 ShenYu Client 支持,通过在接口方法上使用注解 @ShenyuDubboClient 来自动采集上传接口元数据到 ShenYu Admin,然后将数据自动同步到网关模块。(具体实现见下文所述)
改造 Dubbo 服务端,自动上传接口元数据

对原 Dubbo 服务端做一些配置变更,使其能自动将接口元数据上传到 ShenYu Admin 后台系统。

安装 ShenYu Client 依赖包

代码语言:jsx
AI代码解释
复制
<dependency>
	<groupId>org.apache.shenyu</groupId>
	<artifactId>shenyu-spring-boot-starter-client-apache-dubbo</artifactId>
</dependency>

增加配置项

代码语言:jsx
AI代码解释
复制
shenyu.client.register-type=http
shenyu.client.server-lists=${shenyu.server-lists:http://localhost:9095}
shenyu.client.props.contextPath=/dubbo
  • shenyu.client.register-typeundefined服务接口元数据采集方式,可选 http 直连模式或配置中心 zookeeper、etcd、consul 和 nacos。盘古开发采集接口元数据缺省选择 http 直接 ShenYu Admin 的方式。
  • shenyu.client.server-listsundefinedShenYu Admin 地址或配置中心地址。集群时多个地址用逗号分开。
  • shenyu.client.props.contextPathundefined本服务在网关中的路由前缀,可自定义按需配置。

自动上报服务接口元数据

在 Dubbo 服务实现类的方法上使用注解 @ShenyuDubboClient 标记,表示该接口方法元数据自动上传到 ShenYu Admin。如下代码所示。

代码语言:jsx
AI代码解释
复制
@Service(version = "1.0.0", group = "pangu-examples-dubbo-gateway-service")
public class UserServiceImpl implements UserService {

    @Override
    @ShenyuDubboClient(path = "/findUserEntity", desc = "查询用户信息")
    public UserEntity findUserEntity(Long id) {
		...
        return userEntity;
    }
}

配置网关泛化调用 Dubbo 服务所需的注册中心地址

通过 ShenYu Admin 后台系统『基础配置->插件管理』菜单,启用 dubbo插件 并填入注册中心地址。比如,我测试用的注册中心地址:nacos://169.188.88.140:1688?namespace=pangu-dev。如下图所示。

重启服务提供者

  • 进入 ShenYu Admin 后台系统的『基础配置->元数据管理』菜单,会看到自动上报的服务元数据信息。如下图所示。
  • 进入 ShenYu Admin 后台系统的『插件列表-> proxy -> dubbo』菜单,会看到自动注册的选择器和规则信息。如下图所示。
    启动入口
代码语言:jsx
AI代码解释
复制
@SpringBootApplication
public class WebApiGatewayApplication {
	public static void main(String[] args) {
		PanGuApplicationBuilder.init(WebApiGatewayApplication.class).run(args);
	}
}

网关请求URL

至此,网关就可以调用 Dubbo 服务了。但是,如何确定 Dubbo 服务对应的请求 url 地址呢?

  • 由网关模块配置文件可知网关应用端口是 9090
  • Dubbo 服务的配置项 shenyu.client.props.contextPath 为 /dubbo
  • Dubbo 方法通过 @ShenyuDubboClient 标记的 path 属性为:/findUserEntity

综上,Dubbo 服务 UserService#findUserEntity 的完整请求地址为:http://localhost:9090/dubbo/findUserEntity

参数说明

通过 http 协议,post 方式访问网关。在 http body 中传入 json 格式的参数。

请求示例
代码语言:jsx title="CURL脚本"
AI代码解释
复制
curl --location --request POST 'http://127.0.0.1:9090/dubbo/findUserEntity' \
--header 'Content-Type: application/json' \
--data '{id=1}'
代码语言:jsx title="返回结果"
AI代码解释
复制
{
	"code": 200,
	"message": "Access to success!",
	"data": {
		"name": "云南码农大熊",
		"id": 1,
		"userType": 2,
	}
}

本范例源码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何基于盘古开发框架开发Dubbo微服务网关
在上文《如何开发微服务应用》中,已经介绍了如何开发一个微服务应用以及微服务模块之间的互相调用。本文介绍如何将微服务发布为 HTTP 接口供前端调用。
码农大熊
2022/05/06
5910
如何基于盘古开发框架开发Dubbo微服务网关
【Apache ShenYu(incubating) 2.4.0】让API网关更简单!
声明:本文中的Apache ShenYu 都指的是 Apache ShenYu (incubating)。
冰河
2021/08/13
2.4K0
如何基于盘古框架开发Dubbo微服务应用
本文介绍如何基于盘古开发框架开发一个微服务应用。文中所述仅为搭建一个微服务应用的基本框架(服务注册&服务发现),如要增加配置中心、网关代理、数据持久化、缓存等能力请参考使用指南的相关章节。
码农大熊
2022/05/05
5462
如何基于盘古框架开发Dubbo微服务应用
Apache ShenYu网关初体验
Apache ShenYu(神禹)是采用Java WebFlux编写的响应式API网关,具有异步、高性能、跨语言的特点。
阿提说说
2022/11/18
1.8K0
Apache ShenYu网关初体验
推荐一个微服务网关,支持 Dubbo、Spring Cloud、Spring Boot !
Soul网关是我在任职某大型电商公司中间件技术部的时候所开发的。开源以后,针对不同的用户需求,进行了功能的升级,比如 支持了springcloud websocket restful风格 get请求,插件可以定制化开发等等,感谢开源。
芋道源码
2019/05/13
10.1K0
如何基于「盘古开发框架」开发垂直分层单体应用
本文介绍如何基于盘古开发框架开发一个单体分层架构的应用。文中所述仅为搭建一个单体应用的基本框架,增加配置中心、数据持久化、缓存等能力请参考开发指南的相关章节。
码农大熊
2022/04/17
4830
如何基于「盘古开发框架」开发垂直分层单体应用
11. Springboot集成Dubbo3(二)示例demo
Dubbo3从Dubbo2演进过来之后,已经从单纯的RPC框架改进成为了一个微服务框架,具备RPC框架能力的同时,还兼备服务治理能力。今天简单介绍下Dubbo3和Springboot的集成过程。
有一只柴犬
2024/02/20
9830
11. Springboot集成Dubbo3(二)示例demo
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。在使用SSO时,用户只需要提供一次凭据(用户名和密码等),就可以访问多个系统,而无需在每个系统中都进行登录认证。
codetrend
2024/12/16
2260
springcloud实战:探索springcloud的秘密
从本篇开始,我们将正式踏上探索Spring Cloud秘密的旅程。学完本文后,读者将学会搭建一个完整的分布式架构,从而向架构师的目标靠近。
愿天堂没有BUG
2022/10/28
4810
springcloud实战:探索springcloud的秘密
【Dubbo】快速入门案例以及配置详情
2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。
陶然同学
2023/02/26
3900
【Dubbo】快速入门案例以及配置详情
盘古开发框架简介,工业级 Web 接口服务和中后台业务系统开发框架
盘古开发框架 是一套轻量稳健的工业级 Web 接口服务和中后台业务系统开发框架。原生支持微服务分布式架构的同时也兼容单体应用架构模式。基于商业友好的 Apache-2.0 协议免费开源发布。我们希望不仅是开源的受益者也能成为开源贡献者,与开源社区一起共建共享开源生态。
码农大熊
2022/04/04
9730
盘古开发框架简介,工业级 Web 接口服务和中后台业务系统开发框架
猿创征文|Apache ShenYu网关插件介绍
在上节我们把Apache ShenYu网关集成到了微服务中,并简单使用了一下。网关的主要作用是进行流量控制和请求分发,而Apache ShenYu网关的流量控制是通过插件、选择器和规则来完成的,因此这节我们一起来学习下ShenYu网关的众多插件。
阿提说说
2022/11/18
6480
猿创征文|Apache ShenYu网关插件介绍
dubbo入门及面试必问
基础知识 分布式基础理论 什么是分布式系统 分布式系统是若干个独立计算机的组合,这些计算机相对于用户就像单个相关系统 发展演变 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的 Web框架(MVC) 是关键。 分布式服务架构 当垂直应用越来越多,应
AI码师
2020/11/19
4890
国产最强开源 API 网关,没有之一,不接受任何反驳!
来源:https://zhuanlan.zhihu.com/p/358862217 强烈推荐大家试试国产开源的 API 网关 https://github.com/apache/apisix,非常不错。 本文,我们会看到 APISIX 和其它开源的网关对比,给胖友的武器库提供更多选择! “ 这篇文章由刚哥授权分享,刚哥是 Splunk Information Technology 的架构师,Linkedin:https://www.linkedin.com/in/taogang/。 本文主要分析了 NGINX、Kong、APISIX、Tyk、Zuul、Gravitee 几个开源 API 网关架构及基本功能,测试了一定场景下各个 API 网关的性能,文末附有源码地址。” 正文从这里开始: 春未老,风细柳斜斜。试上超然台上望,半壕春水一城花。烟雨暗千家。 寒食后,酒醒却咨嗟。休对故人思故国,且将新火试新茶。诗酒趁年华。 苏轼·送《望江南·超然台作》 温哥华的春天来了,上面的图就是我家门口的 Marine Gaetway,我今天就在这春色中和大家探讨一下 API Gateway。
用户1516716
2021/07/29
10.3K0
Dubbo和Zookeeper集成
在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”;
后端码匠
2021/08/20
1.6K0
【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架
这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出来,更多的内容集中在了概念或功能的介绍,具体环境的搭建,以及如何配置,快速上手上面,但是对于这样一款优秀的框架,文章中提到的每一个点其实展开来讲都能写这样篇幅的一篇文章,仅仅入门来看也没必要,总得学会走,才可以去试着跑
BWH_Steven
2020/12/14
6700
【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架
Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
二哥聊运营工具
2021/12/17
4270
Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
dubbo+zookeeper+springBoot框架整合与dubbo泛型调用演示
利用maven打dubbo-admin-0.0.1-SNAPSHOT.jar包 8
授客
2019/09/11
1.1K0
dubbo+zookeeper+springBoot框架整合与dubbo泛型调用演示
将Spring Cloud项目改造为Spring-cloud-kubernetes项目
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/13
1.8K0
将Spring Cloud项目改造为Spring-cloud-kubernetes项目
开源API网关,到底哪个强?
本文主要分析了 Nginx、Kong、APISIX、Tyk、Zuul、Gravitee 几个开源 API 网关架构及基本功能,测试了一定场景下各个 API 网关的性能,文末附有源码地址。
Java识堂
2021/09/03
4.1K0
推荐阅读
相关推荐
如何基于盘古开发框架开发Dubbo微服务网关
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档