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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023.10.18

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slot…

[Docker]一.Docker 简介与安装

一、Docker简介与为什么要用 Docker 1.1、Docker 介绍 Docker 是一个跨平台的开源的 应用容器引擎 &#xff0c;诞生于 2013 年初&#xff0c;基于 Go语言 并遵从 Apache2.0 协议开源, Docker 可以把它理解成虚拟机&#xff0c;但是 Docker 和传统虚拟化方式 有所不同 …

39.克鲁斯卡尔(Kruskal)算法

一言 已知n个顶点&#xff0c;选n-1条最短的边&#xff0c;不可成环。 概述 克鲁斯卡尔&#xff08;Kruskal&#xff09;算法是用来求加权连通图的最小生成树的算法。其基本思想是按照权值从小到大的顺序选择n-1条边&#xff0c;保证这n-1条边不构成回路。 这就要求要首先构…

C++ STL六大组件

目录 前言 一、容器 1 向量 1.1 向量&#xff08;Vector&#xff09;和数组&#xff08;array&#xff09;之间的区别 1.2 语法 1.3 示例 1.3.1 创建 vector 对象 1.3.2 不能打印向量对象&#xff1b;不能打印空向量中的元素&#xff0c;因为空向量中无元素可打印 1.3…

PDF编辑阅读 PDF Expert v3.5.2

PDF Expert是由Readdle开发的一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点&#xff1a; PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动…

Spring Cloud Alibaba Seata 实现分布式事物

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案 Seata 官网&#xff1a;https://seata.io/zh-cn/ Spring Cloud Alibaba 官…

Java利用反射和读取xml实现迷你容器

由于需要框架能实现多态&#xff0c;达到控制反转解耦。所以容器还是需要的&#xff0c;容器的存在可以简化对象获取工作&#xff0c;但是容器也不是万能的。合理使用即可&#xff0c;Spring对我来说太庞大了&#xff0c;用不着&#xff0c;为此给框架写一个迷你版容器。 容器…

SpringCloud-Sentinel

一、介绍 &#xff08;1&#xff09;提供界面配置配置服务限流、服务降级、服务熔断 &#xff08;2&#xff09;SentinelResource的blockHandler只处理后台配置的异常&#xff0c;运行时异常fallBack处理&#xff0c;且资源名为value时才生效&#xff0c;走兜底方法 二、安装…

裸机与RTOS(概念、关系、区别)

目录 裸机 什么是裸机&#xff1f; 裸机开发的特点 STM32裸机开发 RTOS 什么是RTOS&#xff1f; RTOS技术的概念及特点 STM32中的RTOS 裸机开发与RTOS开发对比分析 裸机开发 RTOS开发 如何选择&#xff1f; 裸机 什么是裸机&#xff1f; 在嵌入式领域&#xff0c;…

UE5--物体卡片与材质入门

参考资料&#xff1a; 《Unreal Engine5 入门到精通》--左央 虚幻引擎5.2文档&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/ 前言&#xff1a; 跟着左央老师的《Unreal Engine5 入门到精通》学习制作AI版胡闹厨房&#xff0c;把学习过程与学习到的东西归纳总结起来。 …

通用FIFO设计深度8宽度64,verilog仿真,源码和视频

名称&#xff1a;通用FIFO设计深度8宽度64&#xff0c;verilog仿真 软件&#xff1a;Quartus 语言&#xff1a;verilog 本代码为FIFO通用代码&#xff0c;其他深度和位宽可简单修改以下参数得到 reg [63:0] ram [7:0];//RAM。深度8&#xff0c;宽度64 代码功能&#xff1a…

存储优化知识复习二详细版解析

存储优化 知识复习二 一、 选择题 1、 对数据库调优的方法中&#xff0c;最困难但是最有成效的是( )。 A、优化表的架构设计 B、添加内存 C、索引优化 D、查询语句优化 【参考答案】A2、 防止与处理死锁的方法有&#xff08; &#xff09;。 A、尽量避免或尽快处理阻塞 B、访…