范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

微服务发现与注册之实践

  1 服务注册中心
  前面我们对业内几种比较常见的注册中心做了介绍:Eureka、Zookeeper、Consul、Etcd。
  并且在各个指标上做了对比:注册方式(watchpolling)、健康检查、雪崩保护、安全与权限,以及在Spring Cloud、Dubbo、Kubernets上的支持程度。方便我们在不同的场景下做正确的技术选型。
  我们可以看出,四种技术类型对Spring Cloud的支持度都很高。 Spring Cloud是微服务架构的一站式解决方案,我们平时构建微服务的过程中需要做的的如 配置管理、服务发现、负载均衡、断路器、智能路由、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作。 Spring Cloud 为我们提供了一套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项目的构建。
  Spring Cloud包含了多个不同开源产品,来保证一站式的微服务解决方案,如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。 2 Spring Cloud 框架下实现
  Spring Cloud为服务治理做了一层抽象,这样能够支持多种不同的服务治理框架,比如:Netflix Eureka、Consul。我们这边就以这两个为例子,看看服务治理是如何实现。 在Spring Cloud服务治理抽象层的作用下,可以无缝地切换服务治理实现,且不影响任何其他的服务注册、发现、调用逻辑。
  所以,下面我们通过介绍这两种服务治理的实现来体会Spring Cloud这一层抽象所带来的好处。 2.1 Spring Cloud Eureka
  Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。
  通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
  下面,就来具体看看如何使用Spring Cloud Eureka实现服务治理。 2.1.1 创建注册中心
  创建一个Spring Cloud项目,我们命名为micro-service-center,并在 pom.xml  中引入需要的依赖内容:1 pom
  表明这个项目中可以没有Java代码,也不执行任何代码,只是为了聚合工程或者传递依赖,所以可以把src文件夹删了。这是一个父级项目,因为我们还要在下面建立Eureka的注册中心、客户端等多个子项目 。
  在micro-service-center下,新建一个命名为 eureka-service 的Module,依旧是Spring Cloud 项目,建完之后,pom.xml做如下改动:
  1   2   3     com.microservice  4     center  5     1.0.0  6   7   8   9  10  11          12             org.springframework.cloud 13             spring-cloud-netflix-eureka-server 14          15 
  改完之后,回到父项目micro-service-center,修改pom中的信息:
  1 com.microservice  2 center  3 pom  4 1.0.0  5 center  6 Demo project for Spring Boot  7   8   9  10    eureka-service 11    eureka-client 12 
  对两个项目进行clean + install,应该是成功的。
  eureka-service我们是作为注册中心来用的,所以在它的主类Application中加入 @EnableEurekaServer  注解,就能开启注册中心功能。
  1 @SpringBootApplication 2 @EnableEurekaServer 3 public class ServiceApplication { 4     public static void main(String[] args) { 5         SpringApplication.run(ServiceApplication.class, args); 6         System.out.println("Start Eureka Service"); 7     } 8 }
  但是默认情况下,该注册中心也会把自己当做客户端,那就变成自己注册自己了,这个是可以剔除的,我们看一下它的YAML中的详细配置,注释比较清楚:
  1 server:  2   port: 1000  3 spring:  4   application:  5     name: eureka-server  6 eureka:  7   instance:  8     hostname: localhost  9   client: 10     register-with-eureka: false  # 不作为客户端进行注册 11     fetch-registry: false  # 不获取注册列表 12     service-url:  # 注册地址,客户端需要注册到该地址中 13       defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  文中的注释还是比较清楚的。 这边可以看到,端口号是1000,所以当工程启动之后,访问 http://localhost:1000/ 是可以看到Eureka注册中心页面的。其中还没有发现任何服务。
  2.1.2 创建客户端
  目前服务中心还是空的,所以我们创建一个能够提供服务的客户端,并将其注册到注册中心去。
  同样的,我们创建一个Spring Cloud的子项目,命名为 eureka-client  ,pom.xml  中的配置如下:
  1   2   3     com.microservice  4     center  5     1.0.0  6   7   8   9  10  11  12  13     org.springframework.cloud 14     spring-cloud-netflix-eureka-server 15  16  17  18     org.projectlombok 19     lombok 20  21  22 
  在应用主类Application文件中通过加上 @EnableDiscoveryClient  注解,该注解保证当前服务被Eureka当成provider发现。
  1 @SpringBootApplication 2 @EnableDiscoveryClient 3 public class ClientApplication { 4     public static void main(String[] args) { 5         SpringApplication.run(ClientApplication.class, args); 6         System.out.println("start client!"); 7     } 8 }
  在YAML文件上加上如下配置:
  1 server: 2   port: 1001 3 spring: 4   application: 5     name: eureka-client 6 eureka: 7   client: 8     service-url:  # 这边就保证了注册到 eureka-service 这个注册中心去 9       defaultZone: http://localhost:1000/eureka/
  spring.application.name  属性,指定了微服务的名称,在调用的时候可以通过该名称进行服务访问。eureka.client.serviceUrl.defaultZone  属性对应服务注册中心的配置内容,指定服务注册中心的位置。
  大家看到,这边端口设置为1001,那是因为要在本机上测试 服务提供方 和 服务注册中心,所以 server的port  属性需设置不同的端口。
  最后,我们再写一个接口,通过DiscoveryClient对象,在客户端中获取注册中心的所有服务信息。
  1 @Controller  2 @RequestMapping("/eurekacenter")  3 public class EuServiceController {  4   5     @Autowired  6     DiscoveryClient discoveryClient;  7   8     /**  9      * 获取注册服务信息 10      */ 11     @RequestMapping(value = "/service", method = {RequestMethod.GET}) 12     @ResponseBody 13     public String getServiceInfo() { 14        return  "service:"+discoveryClient.getServices()+" , memo:"+discoveryClient.description(); 15     } 16 }
  这时候跑一下试试看,继续访问之前的地址:http://localhost:1000/ ,可以看到Eureka注册中心页面已经包含一个我们定义的服务了,就是上面新建的 1001 端口的服务。
  如上图所示,方括号中的 eureka-client  通过Spring Cloud定义的 getServiceInfo 接口在eureka的实现中获取到的所有服务清单,他是一个String的List,如果注册了多个提供者,就会全部显示。2.2 Spring Cloud Consul
  Consul 用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更具"一站式"特征,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 之类的)。
  而Spring Cloud Consul ,是将其作为一个整体,在微服务架构中为我们的基础设施提供服务发现和服务配置的工具。 2.2.1 Consul 的优势
  1、使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。
  2、支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持,上面表格中有体现。
  3、支持健康检查。
  4、支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd 只支持 http 协议。
  5、官方提供 web 管理界面, etcd 无此功能。 2.2.2 Consul的特性
  1、服务发现
  2、健康检查
  3、Key/Value存储
  4、多数据中心 2.2.3 安装Consul注册中心
  1、官方下载64版本 :https://www.consul.io/downloads.html
  2、解压后复制到目录 /usr/local/bin 下
  3、启动终端,先看下啥版本的 1 wengzhihua@B000000147796DS ~ % consul --version 2 Consul v1.10.4 3 Revision 7bbad6fe 4 Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
  4、执行安装命令,可以看到他的 Client Addr 的端口为8500。所以访问 8500端口站点,http://127.0.0.1:8500/ui/dc1/services
  1 wengzhihua@B000000147796DS ~ % consul agent -dev  2 ==> Starting Consul agent...  3            Version: "1.10.4"  4            Node ID: "6db154b4-62ff-e67d-e745-1a7270fa1ce8"  5          Node name: "B000000147796DS"  6         Datacenter: "dc1" (Segment: "")  7             Server: true (Bootstrap: false)  8        Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)  9       Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) 10            Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
  我们可以看到,现在没有客户端注册上来,只有一个自身的实例。 2.2.4 创建服务提供者
  由于Spring Cloud Consul项目的实现,我们可以轻松的将基于Spring Boot的微服务应用注册到Consul上,并通过此实现微服务架构中的服务治理。
  我们在micro-service-center下新建一个cloud项目consul-client,该项目pom文件添加如下:
  1   2   3     com.microservice  4     center  5     1.0.0  6   7   8   9  10  11     org.springframework.cloud 12     spring-cloud-starter-consul-discovery 13  14  15  16     org.springframework.boot 17     spring-boot-starter-actuator 18  19 
  然后修改一下 application.yml的配置信息  ,将consul配置写入,注释应该很清楚了,如下:
  1 spring: 2   application: 3     name: consul-producer # 当前服务的名称 4   cloud: 5     consul: # 以下为Consuk注册中心的地址,如果安装的不是这个host和port,这边可以调整 6       host: localhost 7       port: 8500 8 server: 9   port: 8501 # 当前服务的端口
  同样的,我们要在应用主类Application文件中通过加上 @EnableDiscoveryClient  注解,该注解保证当前服务被Consul当成provider发现。
  大家看到这个做法跟Eureka一样, 因为Spring Cloud对服务治理做的一层抽象,所以可以屏蔽Eureka和Consul服务治理的实现细节,
  程序上不需要做改变,只需要引入不同的服务治理依赖,并配置相关的配置属性 就能轻松的将微服务纳入Spring Cloud的各个服务治理框架中。
  1 @SpringBootApplication 2 @EnableDiscoveryClient 3 public class ConsulClientApplication { 4     public static void main(String[] args) { 5         SpringApplication.run(ClientApplication.class, args); 6     } 7 }
  修改完成之后,我们就可以把这个服务提供者启动了,然后再去注册中心查看服务的注册情况,就可以看到被注册进来的Provider( consul-producer ):
  3 总结
  除了 Eureka、Consul,还有其他的的注册中心技术,如Zookeeper、Nocas等。但无论何种注册中心技术,本质上都是为了解决微服务中的如下问题:
  解耦服务之间相互依赖的细节
  我们知道服务之间的远程调用必须要知道对方的IP、端口信息。我们可以在调用方直接配置被调用方的IP、端口,这种调用方直接依赖IP、端口的方式存在明显的问题,如被调用的IP、端口变化后,调用方法也要同步修改。
  通过服务发现,将服务之间IP与端口的依赖转化为服务名的依赖,服务名可以根据具微服务业务来做标识,因此,屏蔽、解耦服务之间的依赖细节是服务发现与注册解决的第一个问题。
  对微服务进行动态管理
  在微服务架构中,服务众多,服务之间的相互依赖也错综复杂,无论是服务主动停止,意外挂掉,还是因为流量增加对服务实现进行扩容,这些服务数据或状态上的动态变化,都需要尽快的通知到被调用方,被调用方才采取相应的措施。因此,对于服务注册与发现要实时管理者服务的数据与状态,包括服务的注册上线、服务主动下线,异常服务的剔除。

有没有人告诉你,你有多少电话卡?工信部真是太贴心了!本内容来源于什么值得买APP,观点仅代表作者本人作者有钱任性前几年把不用的卡都销了,但还是担心有忘记的,刚好看到支付宝这个小程序,就查了一下,还挺准的。当然也应该准的,这是工信部反抖音否认入局网约车市场B站年底裁员吉利诉威马一审胜诉01hr招聘收120元考试费?茅台回应为考务费,决定不再收取据新京报,贵州茅台酒股份有限公司招聘收取120元考试费一事受到关注。12月26日,贵州茅台方面回应称,考试费参照公务员事奇瑞玩了把大的!40万级底盘夸张的智能座舱,这台星途瑶光绝了太平洋汽车导购频道作为奇瑞重点打造的高端品牌,星途自推出以来,凭借凌云揽月追风等车型,获得了一定的市场声量。根据官方数据指出,星途11月份销量3,866辆,111月份销量46,78巴西双将闪耀英超,蒂特重用他们何至世界杯止步八强?英超今日正式复赛,而最为令人关注的,无疑就是积分榜前列的几支队伍的状态了,其中阿森纳在主场先丢一球的情况下,靠着进攻线几人的优秀发挥,成功逆转西汉姆,而紧追阿森纳曼城的纽卡斯尔,发盘点卡塔尔世界杯的五大超神门将,马丁内斯上榜球王梅西率领终于阿根廷登上世界之巅,梅西的世界杯表现将载入史册。但是,如果没有门将马丁内斯,阿根廷不可能做到这一点。马丁内斯在比赛最后拒绝了慕阿尼的单刀球,让阿根廷和梅西的梦想得以世界杯的冠军领奖台上,什么时候能看到中国人的身影?足球,中国古代名为蹴鞠,说2004年初中国足联确定足球起源于中国,蹴鞠也是有史料记载的的最早的体育运动。作为世界第一体育运动,足球带给一个国家和人民的影响力也是有目共睹的。2022卡萨布兰卡天涯海角世界杯摩洛哥,阿拉伯语意指伊斯兰世界的最西部。于大部分人而言,这里是天涯海角。我是第二次来,世界大人生短,一生来两次的地方不多。摩洛哥,欧洲人的后花园,隔着直布罗陀海峡与伊比利亚半岛相望2026年世界杯LOGO公布,首次三国共举大力神杯!2026年世界杯组委会日前发布了本届世界杯的官方LOGO,美国加拿大墨西哥将在2026年举行。2026年的会徽以蓝色红色绿色为主,并以美国国旗加拿大的枫叶为主题,融合三国特色。同时世界杯决赛光头裁判暖心安慰姆巴佩你还有下一个4年卡塔尔世界杯圆满落幕时隔6天,波兰籍决赛主裁判41岁光头裁判西蒙马齐尼亚克(SzymonMarciniak)接受专访马齐尼亚克提到这场决赛中自己的体验,他说其实身为决赛裁判的压力已2022年世界杯另类十宗最上(一)最受关注的球队巴黎圣日尔曼同时拥有梅西和姆巴佩,巴黎毫无疑问是最受关注的球队。本次赛事拿下份量最重的MVP和金靴奖,同时阿什拉夫内马尔等人的表现都很不错。回到俱乐部,大家将再胡金秋回归三少聚首,王博距离阳光灿烂只剩库克的状态?胡金秋终于回归。本赛季CBA联赛开始之前,恐怕没有人会想到更名为浙江东阳光的浙江广厦,会陷入一个如此困顿的处境之中。截至第18轮77比85不敌新疆男篮,王博的球队仅以8胜10负的战
2013年,女孩称自己高考586分,再次查询却发现,只剩下了364分前言2013年,福建考生杨婷婷称自己高考成绩为586分,但等她填报完志愿后却发现,自己的成绩竟然凭空消失了222分!后来教育局介入此事,却发现杨婷婷的试卷上作文根本就没有写,对此杨园长奶奶每天陪娃半小时,半年后娃变化巨大,妈妈直呼想不到园长奶奶每天陪娃半小时,半年后娃变化巨大妈妈直呼想不到当今的社会,竞争压力可谓是越来越大了,年轻父母们也因此很少有人自己带娃,大都是把娃托付给长辈带,自己忙着赚钱养家的。那么如果是宋轶的背倪妮的腰许晴的臀,这10位旗袍女神,一个比一个惊艳文白面书誏编辑白面书誏旗袍作为中国最能凸显女性曲线美最考验身材的服饰之一,穿得好那叫娉婷袅娜,一不小心就是车祸现场。现代装知性优雅的马思纯,换上旗袍后完全没有半点美感。胳膊上的拜拜腾讯网易国庆假期未成年人游戏每天限玩1小时北京日报客户端记者袁璐9月26日,腾讯游戏发布关于国庆节假期前后未成年人游戏限玩的通知。通知称,结合关于进一步严格管理切实防止未成年人沉迷网络游戏的通知与实际放假调休安排,2022推荐东莞周末游玩好去处如果是在东莞樟木头附近的朋友,平时又喜欢徒步登山之类的,推荐樟木头九洞(可直接导航到东莞樟木头九洞森林公园)推荐的主要原因由下1。可以直接开车到九洞门口,而且全天免费停车,外面大把跟着总书记看中国丨小吃村变身记视频加载中大国之大,也有大国之重。千头万绪的事,说到底是千家万户的事。沙县小吃,不仅是风靡的国民小吃,更是数以万计的沙县人赖以生存的产业。2021年3月23日下午,习近平来到革命老周末短途游,驱车1小时可达!适合周末短途游近郊游最好从长春市区驱车1小时可达有什么好玩儿的地方?一起看看吧1。北极星房车露营地营地位于裴家村现代都市农业旅游观光园距长春市中心25千米左右驱车不到1小时观光园是不只有华为!一年投入科研578亿,阿里终于露出真面目最近几年,中国在很多前沿尖端科技领域都取得了重大突破,像5G量子计算航空航天。探究背后的动力,科研投入是最直接的原因。2021年我国全社会研发投入达到了近2。79万亿元。其中,民营盛松成美联储应加力缩表,而非一味激进加息本文原刊于上海证券报,作者盛松成,中欧国际工商学院教授中国人民银行调查统计司原司长摘要美联储持续大幅度加息虽然对抑制通胀有效,但是效果不及预期。同时,通胀仍未成功逆转的同时,美联储上汽奥迪Q5etron试驾血统没变,智能化仍是硬伤从去年广州车展前惊艳亮相之后,上汽奥迪Q5etron上市已经接近半年。然而,从该车的销量数据来看,新车受关注热度并没有想象中那么大。究竟这款完全有别于Q5的全新纯电平台作品,在转型国务院任免国家工作人员(2022年9月29日)国务院任免国家工作人员。任命周进强为国家体育总局副局长任命赵冲久为国家邮政局局长。免去邵新宇的科学技术部副部长职务免去高晓兵(女)的民政部副部长职务免去赵冲久的交通运输部副部长职务