还在为 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

相关文章

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比