永康住房城乡建设局网站锦州网站seo

news/2025/10/7 6:11:24/文章来源:
永康住房城乡建设局网站,锦州网站seo,成都网站建设服务密需湖南岚鸿案例,中国软件公司文章目录 前言声明前置知识服务注册和发现Zookeeper 工作原理实现过程注册中心服务注册服务发现 总结 前言 无论是采用SOA还是微服务架构#xff0c;都需要使用服务注册和服务发现组件。我刚开始接触 Dubbo 时一直对服务注册/发现以及 Zookeeper 的作用感到困惑#xff0c;现… 文章目录 前言声明前置知识服务注册和发现Zookeeper 工作原理实现过程注册中心服务注册服务发现 总结 前言 无论是采用SOA还是微服务架构都需要使用服务注册和服务发现组件。我刚开始接触 Dubbo 时一直对服务注册/发现以及 Zookeeper 的作用感到困惑现在看来是因为对分布式系统的理解不够深入对 Dubbo 和 Zookeeper 的工作原理不够清楚。 本文将基于 Zookeeper 实现服务注册和服务发现功能如果跟我一样有同样的困惑希望可以通过本文了解其他组件如何使用 Zookeeper 作为注册中心的工作原理。 声明 文章中所提供的代码仅供参考旨在帮助缺乏基础知识的开发人员更好地理解服务注册和服务发现的概念。请注意这些代码并不适用于实际应用中。 前置知识 服务注册和发现 在SOA或微服务架构中由于存在大量的服务以及可能的相互调用为了更有效地管理这些服务我们通常需要引入一个统一的地方即注册中心来集中管理它们而注册中心最基本的功能就是服务注册/发现。 服务注册将该服务实例的元数据如IP地址、端口号、健康状态等注册到注册中心这样其他服务或客户端可以发现和使用该服务。服务发现当一个服务需要调用别的服务时使用静态配置是不可行的这个时候可以去注册中心获取可用的服务实例并调用。 Zookeeper Zookeeper 是一个传统的分布式协调服务它更多的被用来作为一个协调器使用比如来协调管理 Hadoop 集群、协调 Kafka 的 leader 选举等。 为什么会有组件将其视为一个注册中心使用我想有几个原因 Zookeeper 在分布式系统中具有更强的一致性和可靠性可以确保各个服务的注册信息保持一致。Zookeeper 使用内存存储数据具有很高的读写性能。这对于注册中心来说非常关键因为它需要快速地响应客户端的请求。Zookeeper 的 Watcher 机制可以让客户端监听指定节点的变化。当某个节点注册中心发生变化时Zookeeper 可以通知其他服务实现实时更新。 工作原理 以下图为例可以看到 Dubbo 是如何使用 Zookeeper 实现服务注册/发现的。 服务提供者向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址。服务消费者订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址。 这里的目录就是 Zookeeper 的数据结构原理非常简单本质上就是服务提供者和消费者按照约定在 Zookeeper 上读写数据同时借用其 Watcher 机制、临时节点和可靠性等特性高效的实现以下功能 当提供者服务出现断电等异常停机时注册中心能自动删除提供者信息。当注册中心重启时能自动恢复注册数据以及订阅请求。 实现过程 注册中心 下面通过 Zookeeper 的 Java API 实现一个只包含服务注册/发现的注册中心代码如下 public class RegistrationCenter {// 连接信息private String connectString 192.168.10.11:2181,192.168.10.11:2182,192.168.10.11:2183;// 超时时间private int sessionTimeOut 30000;private final String ROOT_PATH /servers;private ZooKeeper client;public RegistrationCenter() {this(null);}public RegistrationCenter(ConsumerListString consumer) {try {getConnection(null consumer ? null : watchedEvent - {//监听服务器地址的上下线if (watchedEvent.getType() Watcher.Event.EventType.NodeChildrenChanged) {try {consumer.accept(subServers());} catch (Exception e) {e.printStackTrace();}}});Stat stat client.exists(ROOT_PATH, false);if (stat null) {//创建根节点client.create(ROOT_PATH, ROOT_PATH.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}} catch (Exception e) {e.printStackTrace();}}/*** param serverName 将服务器注册到zk集群时所需的服务名称* param metadata 服务元数据* throws Exception*/public void doRegister(String serverName, Metadata metadata) throws Exception {/*** ZooDefs.Ids.OPEN_ACL_UNSAFE: 此权限表示允许所有人访问该节点服务器* CreateMode.EPHEMERAL_SEQUENTIAL: 由于服务器是动态上下线的上线后存在下线后不存在所以是临时节点* 而服务器一般都是有序号的所以是临时、有序的节点.*/String node client.create(ROOT_PATH / serverName, metadata.toString().getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);System.out.println(serverName 已经上线);}/*** 发现/订阅服务*/public ListString subServers() throws InterruptedException, KeeperException {ListString zkChildren client.getChildren(ROOT_PATH, true);ListString servers new ArrayList();zkChildren.forEach(node - {//拼接服务完整信息try {byte[] data client.getData(ROOT_PATH / node, false, null);servers.add(new String(data));} catch (Exception e) {e.printStackTrace();}});return servers;}private void getConnection(Watcher watcher) throws IOException {this.client new ZooKeeper(connectString, sessionTimeOut, watcher);}/*** 服务元数据*/public static class Metadata {public Metadata() {}public Metadata(String ip, int port) {this.ip ip;this.port port;}private String ip;private int port;public String getIp() {return ip;}public void setIp(String ip) {this.ip ip;}public int getPort() {return port;}public void setPort(int port) {this.port port;}Overridepublic String toString() {return { ip ip \ , port port };}} }该类中两个核心方法doRegister()、subServers() 服务注册和订阅。 doRegister()主要是往 Zookeeper 中创建了一个临时节点数据临时节点的优势就是当服务出现断电等异常停机时节点会自动删除。subServers()则是去 Zookeeper 读取了所有服务提供者的信息并且监听了节点状态当节点发生创建、删除、更新等事件时重新获取服务者的信息做到数据实时更新。 至此一个简单的注册中心就完成了当然如果要实现一个成熟的注册中心还要考虑负载均衡、高可用性和容错、服务治理和路由控制等功能这里先不展开。 服务注册 当有了注册中心服务提供者就可以调用 doRegister() 进行注册代码如下 public class ProviderServer {public static void main(String[] args) throws Exception {RegistrationCenter registrationCenter new RegistrationCenter();registrationCenter.doRegister(provider, new RegistrationCenter.Metadata(127.0.0.1, 8080));Thread.sleep(Long.MAX_VALUE);} } 服务发现 同样服务消费者可以调用 subServers() 发现服务提供者同时当服务提供者发生变化时会通知到消费者。代码如下 public class ConsumerServer {public static void main(String[] args) throws Exception {RegistrationCenter registrationCenter new RegistrationCenter(newServers - {System.out.println(服务更新了...newServers);});ListString servers registrationCenter.subServers();System.out.println(servers);Thread.sleep(Long.MAX_VALUE);} } 总结 服务注册和服务发现功能是为了解决分布式系统中的服务管理和通信问题而设计的经过不断的发展与负载均衡、健康监测、服务治理和路由控制等功能完善成为一个注册中心。服务注册和服务发现有助于实现系统的弹性和可扩展性因为新的服务实例可以动态地加入系统而无需手动配置和修改已有的代码。

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

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

相关文章

站长域名查询工具哪些网站做任务可以赚钱的

文章目录 0 前言1 从C语言编译说起2 重复定义错误(ODR violation)和条件编译3 内联函数inline和static inline4 总结 0 前言 最近在研究ARM内核代码时,看到core_cm3.h中有大量的内联函数,为此查阅了很多资料,也和朋友讨…

AI技术全景解析:从架构设计到社会影响

本文系统梳理了人工智能技术的研究框架与实施方案,涵盖技术架构设计、经济影响分析、安全风险评估等核心领域,包括个人AI基础设施构建、AGI实现路径、AI威胁建模等关键技术内容。AI Index 人工智能研究、框架和实施指…

对话系统中零样本与少样本学习技术解析

本文介绍了一种用于任务型对话系统的零样本和少样本知识寻求轮次检测技术,通过自适应表示学习和密度估计模型,有效处理训练数据分布外的用户请求,提升对话系统的泛化能力。Alexa AI团队荣获NeurIPS研讨会最佳论文奖…

企业招聘网站大全免费宁波设计网站公司

文 | 苏剑林编 | 智商掉了一地单位 | 追一科技思想朴素却不平凡的分类问题后处理技巧,浅显易懂的讲解,拿来吧你!顾名思义,本文将会介绍一种用于分类问题的后处理技巧——CAN(Classification with Alternating Normaliz…

自学做网站可以嘛上海网站建设开发电话

JetCache自动化配置加载 JetCache的配置加载主要是在jetcache-autoconfigure模块中完成的,其中加载配置的核心类是JetCacheAutoConfiguration,主要是用于创建全局性的一些Bean,例如全局缓存配置类GlobalCacheConfig,AutoConfigur…

公司网站开发立项文档桂林十里画廊

初中物理中最重要的部分就是公式了,在这之中公式的换算可以说是一个难点,也是一个重点。力学部分一、速度公式火车过桥(洞)时通过的路程s=L桥+L车声音在空气中的传播速度为340m/s 光在空气中的传播速度为3108m/s二、密度公式(ρ水…

网站制作软件排行榜推广网站技巧

这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸。不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀,糟糕的…

银川网站开发推广企业微信营销的方法7种

1. 题目 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。 示例 1: 输入:nums [2,5,1,3,4,7], n 3 …

九江巿建设局网站周口学做网站

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接,在正式开始学习前,先把本节的思维导图引入: 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

书店网站建设目标调研的方案网站图片悬浮代码

将at24c04模块连接到开发板i2c2总线上 i2ctool查看i2c2总线上都有哪些设备 UU表示设备地址的从设备被驱动占用,卸载对应的驱动后,UU就会变成从设备地址。at24c04模块设备地址 0x50和0x51是at24c04模块i2c芯片的设备地址。这个从芯片手册上也可以得知。A0 A1 A2表示的是模块对…

中国建设教育协会的是假网站吗城乡建设学校网站

‍‍‍‍1这篇文章是在上一篇文章之后写的,因为上篇文章写到了嵌入式找兼职的一些坑,下面有同学留言说要怎么找到兼职项目,所以这篇文章会写一些我的兼职经历还有总结建议,希望对大家如何找兼职有一些帮助。这篇文章是写第二次了&…

提示网站正在建设中常州小型网站建设

使用Jest测试Cesium源码 介绍环境Cesium安装Jest安装Jest模块包安装babel安装Jest的VSC插件 测试例子小结 介绍 在使用Cesium时,我们常常需要编写自己的业务代码,其中需要引用Cesium的源码,这样方便调试。此外,目前代码中直接使用…

随手记 | 关于AI最新趋势和未来发展方向探讨

随手记 | 关于AI最新趋势和未来发展方向探讨总的来说,我想要表达的是未来的发展速度越来越快了 还有自己不能像别人那样清晰且流程的表述出自己的观点,即使自己在AI的领域中已经有很深入的学习了,也许是贬低或是却是…

网站建设企业号助手企业网站排名提升软件智能优化

错误显示 前提条件 apt-get install opensslapt-get install openssl-dev 解决办法 在CMakeLists.txt文件中加入如下命令link_libraries(crypto) 参考链接 无法将openssl库链接到CLion C 程序c - 无法将openssl库链接到CLion C程序

奉贤免费网站建设app模板下载网站模板

选择自己发新年短信群发还是106短信平台,取决于您的需求和资源。 如果您需要发送的短信数量较少,或者您有特定的发送需求,例如需要发送一些包含敏感信息的短信,那么您可以选择自己发送。您可以使用手机或电脑上的短信应用程序来发…

大名做网站网页好看的网站设计

在k8s当中支持两种声明资源的方式: 1、 yaml格式:主要用于和管理资源对象 2、 json格式:主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件,所有的内容都在y…

linux系统服务器怎么做网站图书信息管理系统代码网站建设

指定顶部模块和重新排序源 文件夹默认情况下,Vivado Design Suite会自动确定设计的顶层添加到的源文件的层次结构和细化、合成和模拟的顺序项目这可以通过右键单击中的“层次更新”设置进行控制“源”窗口的菜单。请参阅中的“源”窗口中的“层次更新”命令Vivado …

上海网站建设中心深圳高端网站建设创新

8月24日-27日,第十七届全国知识图谱与语义计算大会(CCKS 2023)在沈阳召开。大会以“知识图谱赋能通用AI”为主题,探讨知识图谱对通用AI技术的支撑能力,探索知识图谱在跨平台、跨领域等AI任务中的作用和应用途径。 作为…

模板网站的建设方式与方法广州广告网站建设

一、 多租户定义 多租户定义: 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用…

纪检监察网站建设方案用家用电脑建设网站

2013年手游行业的规模与收入均实现了大幅增长,发展势头强劲。然而,在手游快速发展的同一时候,因为监管、审核等方面存在着漏洞,手机游戏软件被破解后注入恶意代码、盗取用户財产、窃取用户设备信息的现象屡见不鲜。手游被破解后黑…