当前位置: 首页 > news >正文

老榕树智能建站系统f1意大利站最新排名

老榕树智能建站系统,f1意大利站最新排名,上海前端,乐陵森林酒店家具Apache Dubbo 在去年发布了下一代的云原生微服务版本 Dubbo3#xff0c;目前最新版本 Dubbo3 已在阿里经济体完成对 HSF2 框架的全面替换与升级#xff0c;Dubbo3 目前已成为社区企业实践推荐版本。Apache Shenyu 网关在这个背景下发布了对 Dubbo3 服务代理的支持。 本文介绍…Apache Dubbo 在去年发布了下一代的云原生微服务版本 Dubbo3目前最新版本 Dubbo3 已在阿里经济体完成对 HSF2 框架的全面替换与升级Dubbo3 目前已成为社区企业实践推荐版本。Apache Shenyu 网关在这个背景下发布了对 Dubbo3 服务代理的支持。 本文介绍了如何通过 Apache ShenYu 网关访问 Dubbo 服务主要内容包括从简单示例到核心调用流程分析并对设计原理进行了总结。 介绍 Apache ShenYu Apache ShenYuIncubating是一个异步的高性能的跨语言的响应式的 API 网关。兼容各种主流框架体系支持热插拔用户可以定制化开发满足用户各种场景的现状和未来需求经历过大规模场景的锤炼。 2021 年 5 月ShenYu 捐献给 Apache 软件基金会Apache 基金会全票通过顺利进入孵化器。 Apache Dubbo Dubbo3 是下一代的云原生微服务框架全面升级了包括下一代 RPC 协议、应用级服务发现、Dubbo Mesh、统一服务治理等核心能力多语言 Java、Golang 同步发布 3.0 特性。目前最新版本 Dubbo3 已在阿里经济体完成对 HSF2 框架的全面替换与升级包括阿里核心电商、阿里云、活饿了么、钉钉、考拉等都已经全面升级 Dubbo32022 双 11 大促核心系统将跑在 Dubbo3 之上社区用户包括工商银行、小米、平安健康等也已成功升级 Dubbo3 核心功能。 Dubbo 快速开始 本小节介绍如何将 Dubbo 服务接入到 ShenYu 网关您可以直接在工程下找到本小节的示例代码 。 启动 shenyu-admin shenyu-admin 是 Apache ShenYu 后台管理系统 启动的方式有多种本文通过本地部署的方式启动。启动成功后需要在基础配置-插件管理中把 dubbo 插件设置为开启并设置你的注册地址请确保注册中心已经开启。 启动 shenyu 网关 在这里通过源码的方式启动直接运行 shenyu-bootstrap 中的 ShenyuBootstrapApplication。 在启动前请确保网关已经引入相关依赖。如果客户端是 apache dubbo注册中心使用 zookeeper请参考如下配置 !-- apache shenyu apache dubbo plugin start--dependencygroupIdorg.apache.shenyu/groupIdartifactIdshenyu-spring-boot-starter-plugin-apache-dubbo/artifactIdversion${project.version}/version/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo/artifactIdversion3.0.8/version/dependency!-- Dubbo zookeeper registry dependency start --dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-client/artifactIdversion4.0.1/versionexclusionsexclusionartifactIdlog4j/artifactIdgroupIdlog4j/groupId/exclusion/exclusions/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion4.0.1/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion4.0.1/version/dependency!-- Dubbo zookeeper registry dependency end --!-- apache dubbo plugin end-- 启动 shenyu-examples-dubbo 以官网提供的例子为例 shenyu-examples-dubbo 。假如 dubbo 服务定义如下 beans /* ...... * /dubbo:application nametest-dubbo-service/dubbo:registry address${dubbo.registry.address}/dubbo:protocol namedubbo port20888/dubbo:service timeout10000 interfaceorg.apache.shenyu.examples.dubbo.api.service.DubboTestService refdubboTestService//beans 声明应用服务名称注册中心地址使用 dubbo 协议声明服务接口对应接口实现类 /*** DubboTestServiceImpl.*/ Service(dubboTestService) public class DubboTestServiceImpl implements DubboTestService {OverrideShenyuDubboClient(path /findById, desc Query by Id)public DubboTest findById(final String id) {return new DubboTest(id, hello world shenyu Apache, findById);}//...... } 在接口实现类中使用注解ShenyuDubboClient 向 shenyu-admin 注册服务。 在配置文件application.yml中的配置信息 server:port: 8011address: 0.0.0.0servlet:context-path: / spring:main:allow-bean-definition-overriding: true dubbo:registry:address: zookeeper://localhost:2181 # dubbo使用的注册中心shenyu:register:registerType: http #注册方式serverLists: http://localhost:9095 #注册地址props:username: admin password: 123456client:dubbo:props:contextPath: /dubbo appName: dubbo 在配置文件中声明 dubbo 使用的注册中心地址dubbo 服务向 shenyu-admin 注册使用的方式是 http注册地址是 http://localhost:9095。关于注册方式的使用请参考应用客户端接入。 调用 dubbo 服务 shenyu-examples-dubbo 项目成功启动之后会自动把加 ShenyuDubboClient 注解的接口方法注册到网关。 打开 插件列表 - Proxy - dubbo 可以看到插件规则配置列表 注册成功的选择器信息 注册成功的规则信息 选择器和规则是 Apache ShenYu 网关中最灵魂的东西。掌握好它你可以对任何流量进行管理。对应为选择器与规则里面的匹配条件(conditions)根据不同的流量筛选规则我们可以处理各种复杂的场景。流量筛选可以从 Header, URI, Query, Cookie 等等 Http 请求获取数据。 然后可以采用 MatchRegexGroovyExclude 等匹配方式匹配出你所预想的数据。多组匹配添加可以使用 And/Or 的匹配策略。具体的介绍与使用请看: 选择器与规则管理 。发起 GET 请求通过 ShenYu 网关调用 dubbo 服务 GET http://localhost:9195/dubbo/findById?id100 Accept: application/json 成功响应之后结果如下 {name: hello world shenyu Apache, findById,id: 100 } 至此就成功的通过 http 请求访问 dubbo 服务了ShenYu 网关通过 shenyu-plugin-dubbo 模块将 http 协议转成了 dubbo 协议。 深入理解 Dubbo 插件 在运行上述 demo 的过程中是否存在一些疑问 dubbo 服务是如何注册到 shenyu-adminshenyu-admin 是如何将数据同步到 ShenYu 网关DubboPlugin 是如何将 http 协议转换到到 dubbo 协议 带着这些疑问来深入理解 dubbo 插件。 应用客户端接入 应用客户端接入是指将微服务接入到 Apache ShenYu 网关当前支持 Http、 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议的接入。 将应用客户端接入到 Apache ShenYu 网关是通过注册中心来实现的涉及到客户端注册和服务端同步数据。注册中心支持 Http、Zookeeper、Etcd、Consul 和 Nacos。默认是通过 Http 方式注册。 客户端接入的相关配置请参考客户端接入配置。 客户端注册在你的微服务配置中声明注册中心客户端类型如 Http 或 Zookeeper。应用程序启动时使用 SPI 方式加载并初始化对应注册中心客户端通过实现 Spring Bean 相关的后置处理器接口在其中获取需要进行注册的服务接口信息将获取的信息放入 Disruptor 中。 注册中心客户端从 Disruptor 中读取数据并将接口信息注册到 shenyu-adminDisruptor 在其中起数据与操作解耦的作用利于扩展。 服务端注册在 shenyu-admin 配置中声明注册中心服务端类型如 Http 或 Zookeeper。当 shenyu-admin 启动时读取配置类型加载并初始化对应的注册中心服务端注册中心服务端收到 shenyu-client 注册的接口信息后将其放入 Disruptor 中然后会触发注册处理逻辑将服务接口信息更新并发布同步事件。 Disruptor 在其中起到数据与操作解耦利于扩展。如果注册请求过多导致注册异常也有数据缓冲作用。 数据同步原理 数据同步是指在 shenyu-admin 后台操作数据以后使用何种策略将数据同步到 Apache ShenYu 网关。Apache ShenYu 网关当前支持ZooKeeper、WebSocket、Http长轮询、Nacos 、Etcd 和 Consul 进行数据同步。默认是通过WebSocket进行数据同步。 数据同步的相关配置请参考数据同步配置。 数据同步的意义 网关是流量请求的入口在微服务架构中承担了非常重要的角色网关高可用的重要性不言而喻。在使用网关的过程中为了满足业务诉求经常需要变更配置比如流控规则、路由规则等等。因此网关动态配置是保障网关高可用的重要因素 当前数据同步特性如下 1、所有的配置都缓存在 Apache ShenYu 网关内存中每次请求都使用本地缓存速度非常快。 2、用户可以在 shenyu-admin 后台任意修改数据并马上同步到网关内存。 3、支持 Apache ShenYu 的插件、选择器、规则数据、元数据、签名数据等数据同步。 4、所有插件的选择器规则都是动态配置立即生效不需要重启服务。 5、数据同步方式支持 Zookeeper、Http 长轮询、Websocket、Nacos、Etcd 和 Consul。 数据同步原理分析 下图展示了 Apache ShenYu 数据同步的流程Apache ShenYu 网关在启动时会从配置服务同步配置数据并且支持推拉模式获取配置变更信息然后更新本地缓存。管理员可以在管理后台shenyu-admin变更用户权限、规则、插件、流量配置通过推拉模式将变更信息同步给 Apache ShenYu 网关具体是 push 模式还是 pull 模式取决于使用哪种同步方式。 在最初的版本中配置服务依赖 Zookeeper 实现管理后台将变更信息 push 给网关。而现在可以支持 WebSocket、Http长轮询、Zookeeper、Nacos、Etcd 和 Consul通过在配置文件中设置 shenyu.sync.${strategy} 指定对应的同步策略默认使用 webosocket 同步策略可以做到秒级数据同步。但是有一点需要注意的是Apache ShenYu网关 和 shenyu-admin 必须使用相同的同步策略。 如上图所示shenyu-admin 在用户发生配置变更之后会通过 EventPublisher 发出配置变更通知由 EventDispatcher 处理该变更通知然后根据配置的同步策略(http、weboscket、zookeeper、naocs、etcd、consul)将配置发送给对应的事件处理器。 1、如果是 websocket 同步策略则将变更后的数据主动推送给 shenyu-web并且在网关层会有对应的 WebsocketDataHandler 处理器来处理 shenyu-admin 的数据推送。 2、如果是 zookeeper 同步策略将变更数据更新到 zookeeper而 ZookeeperSyncCache 会监听到 zookeeper 的数据变更并予以处理。 3、如果是 http 同步策略由网关主动发起长轮询请求默认有 90s 超时时间如果 shenyu-admin 没有数据变更则会阻塞 http 请求如果有数据发生变更则响应变更的数据信息如果超过 60s 仍然没有数据变更则响应空数据网关层接到响应后继续发起 http 请求反复同样的请求。 流程分析 流程分析是从源码的角度展示服务注册流程数据同步流程和服务调用流程。 服务注册流程 1、读取 dubbo 服务 使用注解ShenyuDubboClient 标记需要注册到网关的 dubbo 服务。 注解扫描通过 ApacheDubboServiceBeanListener 完成它实现了 ApplicationListenerContextRefreshedEvent接口在 Spring 容器启动过程中发生上下文刷新事件时开始执行事件处理方法 onApplicationEvent()。在重写的方法逻辑中读取 Dubbo 服务 ServiceBean构建元数据对象和 URI 对象并向 shenyu-admin 注册。具体的注册逻辑由注册中心实现请参考客户端接入原理。 2、处理注册信息 客户端通过注册中心注册的元数据和 URI 数据在 shenyu-admin 端进行处理负责存储到数据库和同步给 shenyu 网关。Dubbo 插件的客户端注册处理逻辑在 ShenyuClientRegisterDubboServiceImpl 中。继承关系如下 ShenyuClientRegisterService客户端注册服务顶层接口FallbackShenyuClientRegisterService注册失败提供重试操作AbstractShenyuClientRegisterServiceImpl抽象类实现部分公共注册逻辑ShenyuClientRegisterDubboServiceImpl实现 Dubbo 插件的注册 注册信息包括选择器规则和元数据。 整体的 dubbo 服务注册流程如下 数据同步流程 1、admin 更新数据 假设在在后台管理系统中新增一条选择器数据请求会进入 SelectorController 类中的 createSelector()方法它负责数据的校验添加或更新数据返回结果信息。在 SelectorServiceImpl 类中通过 createOrUpdate()方法完成数据的转换保存到数据库发布事件更新 upstream。 在 Service 类完成数据的持久化操作即保存数据到数据库。发布变更数据通过 eventPublisher.publishEvent()完成这个 eventPublisher 对象是一个ApplicationEventPublisher 类这个类的全限定名是 org.springframework.context.ApplicationEventPublisher发布数据的功能正是是通过 Spring 相关的功能来完成的。 当事件发布完成后会自动进入到 DataChangedEventDispatcher 类中的 onApplicationEvent()方法根据不同数据类型和数据同步方式进行事件处理。 2、网关数据同步 网关在启动时根据指定的数据同步方式加载不同的配置类初始化数据同步相关类。 在接收到数据后进行反序列化操作读取数据类型和操作类型。不同的数据类型有不同的数据处理方式所以有不同的实现类。但是它们之间也有相同的处理逻辑所以可以通过模板方法设计模式来实现。相同的逻辑放在抽象类 AbstractDataHandler 中的 handle()方法中不同逻辑就交给各自的实现类。 新增一条选择器数据是新增操作会进入到 SelectorDataHandler.doUpdate()具体的数据处理逻辑中。 在通用插件数据订阅者 CommonPluginDataSubscriber负责处理所有插件、选择器和规则信息。 将数据保存到网关的内存中BaseDataCache 是最终缓存数据的类通过单例模式实现。选择器数据就存到了 SELECTOR_MAP 这个 Map 中。在后续使用的时候也是从这里拿数据。 上述逻辑用流程图表示如下 服务调用流程 在 Dubbo 插件体系中类继承关系如下 ShenyuPlugin顶层接口定义接口方法 AbstractShenyuPlugin抽象类实现插件共有逻辑 AbstractDubboPlugindubbo插件抽象类实现dubbo共有逻辑ShenYu网关支持ApacheDubbo和AlibabaDubbo ApacheDubboPluginApacheDubbo插件。org.apache.shenyu.web.handler.ShenyuWebHandler.DefaultShenyuPluginChain#execute() 通过 ShenYu 网关代理后请求入口是 ShenyuWebHandler它实现了 org.springframework.web.server.WebHandler 接口通过责任链设计模式将所有插件连接起来。 org.apache.shenyu.plugin.base.AbstractShenyuPlugin#execute() 当请求到网关时判断某个插件是否执行是通过指定的匹配逻辑来完成。在 execute()方法中执行选择器和规则的匹配逻辑。 org.apache.shenyu.plugin.global.GlobalPlugin#execute() 最先被执行的是 GlobalPlugin 它是一个全局插件在 execute()方法中构建上下文信息。 org.apache.shenyu.plugin.base.RpcParamTransformPlugin#execute() 接着被执行的是 RpcParamTransformPlugin 它负责从 http 请求中读取参数保存到 exchange 中传递给 rpc 服务。在 execute()方法中执行该插件的核心逻辑从 exchange 中获取请求信息根据请求传入的内容形式处理参数。 org.apache.shenyu.plugin.dubbo.common.AbstractDubboPlugin 然后被执行的是DubboPlugin 。在 doExecute()方法中主要是检查元数据和参数。在 doDubboInvoker()方法中设置特殊的上下文信息然后开始dubbo的泛化调用。 在 genericInvoker()方法中 1、获取 ReferenceConfig 对象 2、获取泛化服务 GenericService 对象 3、构造请求参数 pair 对象 4、发起异步的泛化调用。 通过泛化调用就可以实现在网关调用 dubbo 服务了。 ReferenceConfig 对象是支持泛化调用的关键对象 它的初始化操作是在数据同步的时候完成的。 org.apache.shenyu.plugin.response.ResponsePlugin#execute() 最后被执行的是 ResponsePlugin 它统一处理网关的响应结果信息。处理类型由 MessageWriter 决定类继承关系如下 MessageWriter接口定义消息处理方法 NettyClientMessageWriter处理 Netty 调用结果 RPCMessageWriter处理 RPC 调用结果 WebClientMessageWriter处理 WebClient 调用结果Dubbo 服务调用处理结果是 RPCMessageWriter。 org.apache.shenyu.plugin.response.strategy.RPCMessageWriter#writeWith() 在 writeWith()方法中处理响应结果获取结果或处理异常。 分析至此关于 Dubbo 插件的源码分析就完成了分析流程图如下 小结 本文从实际案例出发由浅入深分析了 ShenYu 网关对 Dubbo 服务的代理过程。涉及到的主要知识点如下 通过责任链设计模式执行插件使用模板方法设计模式实现 AbstractShenyuPlugin处理通用的操作类型使用单例设计模式实现缓存数据类 BaseDataCache通过 springboot starter 即可引入不同的注册中心和数同步方式扩展性很好通过 admin 支持规则热更新方便流量管控Disruptor 队列是为了数据与操作解耦以及数据缓冲。 有任何疑问欢迎通过以下渠道联系社区 Apache Shenyu 社区 https://github.com/apache/incubator-shenyu Dubbo3 社区 https://github.com/apache/dubbo https://github.com/apache/dubbo 作者刘良 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.pierceye.com/news/78035/

相关文章:

  • 网站建设工具在北京找工作有哪些招聘网站
  • 大学个人网站期末作业富阳网站制作
  • 株洲市建设局网站心悦免做卡领取网站
  • 音乐播放网站开发pc端vs2013网站建设
  • 专门做软陶的网站wordpress显示最后更新时间
  • 做网站大约需要多少钱wordpress域名后缀
  • 建网站麻烦拍照备案审核多久找个做网站的 优帮云
  • 电气建设网站环保局网站建设
  • 1企业网站案例个人简历ppt模板免费下载可编辑
  • 网站域名去哪里备案wordpress音乐插件百度云
  • 快速收录网站中国制造网外贸平台
  • 烟台建设企业网站镇江网页设计工作室
  • 人和动物做的网站龙岩建设局网站罗小波
  • 网站分析报告投资公司成立条件
  • 阿里云网站建设流程教案宽屏网站欣赏
  • 合肥建设学校网站首页wordpress手机app编辑文章
  • 织梦安装网站后图片PHP 网站搜索怎么做
  • 辽宁城建设计院有限公司网站电子商务网站建设 市场分析
  • 苏州市建设职业中心网站品牌关键词优化
  • 做财务还是网站运营旅社网站怎么建立
  • 网站系统建设建网站的公司怎么样
  • 建设项目公告网站wordpress 所有文章
  • 网上网城网站怎么知道一个网站是谁做的
  • 全flash 电子商务网站如何推广深圳电子烟网站建设
  • 做螺杆比较出名的网站小说推文推广平台
  • 无锡微信网站企业静态网站
  • 蒙城做网站wordpress免费中文
  • 企业网站用什么套站长沙黄花机场公众号
  • 网站水印怎么做的建站平台那个好
  • 做淘宝需要的网站联通北京网站备案