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

2023-10-22 21:36

本文主要是介绍还在为 Dubbo 服务写 Controller?因为未使用 ShenYu 网关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 网关还有很多强大而实用的功能,关注我,一起学习一起成长吧!

这篇关于还在为 Dubbo 服务写 Controller?因为未使用 ShenYu 网关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/263728

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v