还在为 Dubbo 服务写 Controller?因为未使用 ShenYu 网关

news2024/12/19 15:14:28

Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它可以帮助开发人员快速构建分布式服务。在 Dubbo 应用中,我们经常需要提供 HTTP 调用,如供 H5、外部系统等调用。一般的做法是为需要提供 HTTP 调用的服务编写 Controller,但这并非必需,可以通过网关来适配。

目录

01 介绍

02 Dubbo 快速开始

启动管理后台

启动网关

启动客户端服务

03 测试

04 总结


01 介绍

本文要介绍的是开源微服务网关 Apache ShenYu(神禹),其架构图如下:

github地址:https://github.com/apache/shenyu

这是一款使用 Java Reactor 开发的异步的,高性能的,跨语言的,响应式 API 网关。通过插件的方式支持 Dubbo 等主流微服务框架,Apache ShenYu 于 2022 年 7 月毕业成为 Apache 顶级项目。

ShenYu 网关由两部分组成,管理后台 shenyu-admin 和网关 shenyu-bootstrap。管理后台能够可视化管理所有插件、选择器和规则,设置用户、角色,控制资源,将配置数据同步给网关。可通过源码运行,也可下载二进制包部署,或者使用 Docker 等容器方式部署。

将应用接入 ShenYu 网关是通过注册中心实现的,ShenYu 网关支持多种注册中心,如 Zookeeper、Consul 和 Nacos 等,也可以通过 HTTP 的方式直接向网关注册。HTTP 请求经过 nginx(可选)发送到 ShenYu 网关,网关根据规则选择 Dubbo 插件,由 Dubbo 插件调用目标服务。

02 Dubbo 快速开始

启动管理后台

默认使用 h2 数据库,可以根据需要修改 conf/application.yml 中的 spring.profiles.active,以使用其它支持的数据库。查看 conf 目录的配置文件可以知道,目前还支持 MySQL、GaussDB、Oracle 和 PostgreSQL 数据库。源码方式启动,直接运行 shenyu-admin 中的 ShenyuAdminBootstrap ,或者二进制包方式启动,执行 bin/start.sh 脚本。

进入管理界面,默认端口为 9095,默认用户名/密码为 admin/123456。登录后左上角可以切换中英文语言。首先从菜单 基础配置->插件管理 中开启 Dubbo 插件(左上角输入 dubbo 能快速找到该插件),并设置注册中心地址,请确保注册中心可用。

启动网关

默认使用 websocket 的方式与管理后台进行数据同步,可根据需要改为 http 长轮询或者是使用注册中心进行数据同步。配置项虽多,但大部分是用于示例,被注释或者是关闭状态。源码方式启动,直接运行 shenyu-bootstrap 中的 ShenyuBootstrapApplication,或者二进制包方式启动,执行 bin/start.sh 脚本。

启动客户端服务

可以用源码包中的例子 shenyu-examples-dubbo(注意区分 dubbo 的版本是 apache dubbo 还是 alibaba dubbo),修改配置文件中的 dubbo 注册地址和网关注册参数 shenyu.register.*。服务启动成功之后会自动把使用了 @ShenyuDubboClient 注解的接口方法注册到网关。

03 测试

回到管理后台,菜单中打开 插件列表 -> rpc proxy -> dubbo 可以看到,使用 @ShenyuDubboClient 注解的接口方法都出现在选择器规则列表中。注意到 Dubbo Proxy 的状态为关闭,点击右边的开关进行开启。

使用源码目录中的 apache-dubbo-test-api.http 文件可以发起 HTTP 请求进行测试。这个文件是 IDEA 自带的接口测试工具 HTTP Client 产生的脚本文件,点击编辑区左边勾槽的绿色三角形可以发起 HTTP 请求进行测试。

测试结果如下,收到的返回报文由 shenyu-examples-dubbo 中的服务返回:

04 总结

通过使用 ShenYu 网关,我们可以发起 HTTP 请求来调用 Dubbo 服务,而无需额外编写 Controller 代码。在外部环境与 Dubbo 服务之间增加 ShenYu 网关,使得 Dubbo 服务成为网关的客户端服务。这种架构的优点在于,当需要更新客户端服务时,只需直接重启该服务即可(请注意,客户端服务需要多节点部署,以确保在重启期间有其他相同的服务能够满足业务需求)。ShenYu 网关的客户端注册插件会在宿主服务优雅停机时通知 ShenYu 网关该服务已下线,从而简化了运维操作,并在更新服务时实现用户无感知。

ShenYu 网关还有很多强大而实用的功能,关注我,一起学习一起成长吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高校教务系统登录页面JS分析——西安交通大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

CUDA学习笔记(八)Branch Divergence and Unrolling Loop

Avoiding Branch Divergence 有时,控制流依赖于thread索引。同一个warp中,一个条件分支可能导致很差的性能。通过重新组织数据获取模式可以减少或避免warp divergence(该问题的解释请查看warp解析篇)。 The Parallel Reduction …

Mybatis-Plus 0基础光速入门代码

目录 1.创建springboot项目 2.引入依赖 3.找到application.properties,把后缀改成yml(这种格式的文件有更多优点),在application.yml里面加上下面的配置代码 4.写实体类 5.创建接口继承BaseMapper 6.在启动类中加上注解Mappe…

头脑风暴之约瑟夫环问题

一 问题的引入 约瑟夫问题的源头完全可以命名为“自杀游戏”。本着和谐友爱和追求本质的目的,可以把问题描述如下: 现有n个人围成一桌坐下,编号从1到n,从编号为1的人开始报数。报数也从1开始,报到m人离席&#xff0c…

阶段七-Day01-Spring01

一、Spring框架介绍 1. 介绍 Spring Framework是由Spring团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。 Spring Framework前身是interface21,由Rod Johnson于2002年研发,主要是为了不使用EJB下依然能够构建高质量Java EE项目。E…

Ubuntu下 u2net tensorrt模型部署

TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…

浅析人脸活体检测技术的功能及几种分类

在日常生活工作中,出现了人脸验证、人脸支付、人脸乘梯、人脸门禁等等常见的应用场景。这说明人脸识别技术已经在门禁安防、金融行业、教育医疗等领域被广泛地应用,人脸识别技术的高速发展与应用同时也出现不少质疑。其中之一就是人脸识别很容易被照片、…

DDOS攻击的有效防护方式有哪些?

DDoS攻击简介: DDoS攻击,即分布式拒绝服务攻击(Distributed Denial of Service),是一种网络攻击,旨在通过向目标服务器发送大量恶意请求,使服务器资源耗尽,无法满足合法用户的需求&a…

KubeSphere安装KubeEdge

1. kubesphere安装请参考博客 2. 配置master节点 控制台->平台管理->集群管理->自定义CRD,搜索​​clusterconfiguration​​,查看详情,在资源列表中,点击 ​​ks-installer​​ 右侧的图标,然后选择编辑配…

一文带你彻底弄懂ZGC

1 推荐的文章 1.1 必看 干掉1ms以内的Java垃圾收集器ZGC到底是个什么东西? 1.2 选看 ZGC有什么缺点? 2 疑问【皆来自上面两篇文章】 2.1 什么使得用户线程工作的同时,让垃圾收集器可以回收垃圾-读写屏障 ZGC (Z Garbage Collector) 和读写屏障: …

【瑞吉外卖部分功能补充】

瑞吉外卖部分功能补充 菜品的启售和停售 在浏览器控制台点击对应功能后可以看到前端发送的请求是:http://localhost:9999/dish/status/1?ids1413342036832100354,请求方式为POST。 接收到前端参数后,进行controller层代码补全&#xff0c…

简单说明反射和new的区别和反射的使用代码展示

目录 1.反射的认识 2.反射和new的区别 3.反射的使用代码展示 4.反射优点和缺点 1.反射的认识 反射是Java语言的一种机制,它允许程序在运行时检查和操作类、方法、字段等信息,而不需要提前知道它们的具体定义。通过反射,我们可以在运行时动…

直接插入排序——希尔排序

排序——先写单个——再衍生到整体 单个插入排序——在插入前数组里面的数是有序的,然后来了一个数据,就要用这个数组从后往前和这个数比较, 整体的话就是,end从0开始,循环n-1次 void TnsertSort(int* a,int n) {in…

QML之Repeater 控件使用

Repeater 控件是 重复作用 根据 model中的index 数量进行重复 废话不说 直接看如何用 当model 为数字时 Rectangle{height: 1200width: 500visible: trueanchors.fill: parentColumn{spacing: 20Repeater{model: 10delegate: Rectangle{width: 60height: 20color: index%2 …

VulnHub ch4inrulz: 1.0.1

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

【网络编程】应用层——HTTP协议

文章目录 一、HTTP协议简介二、认识URL三、HTTP协议格式1. HTTP请求协议格式2. HTTP响应协议格式 三、构建HTTP请求和响应四、HTTP的方法五、HTTP的状态码六、HTTP常见的Header七、Cookie和Session 一、HTTP协议简介 HTTP 协议 是 Hyper Text Transfer Protocol(超文…

苹果ios打包出来的ipa应用APP怎么不能安装?多种安装不上的原因排查

亲爱的同学们,非常高兴能和同学们一起探讨关于苹果应用安装失败的问题。作为一个开发者,我们很可能会遇到这样的情况:开发好一个应用,兴致勃勃地想把它运行到手机上去测试,结果发现安装失败了。而此时,定位…

【2023_10_22计算机热点知识分享】:人工智能

最近计算机领域的热点话题之一是人工智能的发展。人工智能是一种能够模拟人类智能的技术,它可以通过机器学习、深度学习、自然语言处理等技术,实现语音识别、图像识别、自然语言处理等智能化的功能。人工智能技术的发展,正在深刻地改变着人类…

Docker概述、部署、镜像与容器管理

Docker概述、部署、镜像与容器操作 一、Docker是什么?1.1、Docker介绍1.2、Docker的设计宗旨1.3、容器运行条件1.4、容器与虚拟机的区别1.5、Docker核心概念1.5.1、镜像1.5.2、容器1.5.3、仓库 二、Docker部署三、Docker 镜像管理3.1、搜索镜像3.2、查看仓库中有哪些…

01-JVM 内存结构

JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分: 程序计数器Java 虚拟机栈本地方法栈堆方法区 JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过…