Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】

 发表于 2018-04-15 |  更新于 2018-05-07 | 

上一篇主要介绍了相关理论,这一篇开始我们来一个个的实践一下。

Just code it.

本系列介绍的配置均基于 Spring Boot 2.0.1.RELEASE 版本和 Spring Cloud Finchley.RC1 版本

服务注册中心

Spring Cloud 已经帮我们实现了服务注册中心,我们只需要很简单的几个步骤就可以完成。

首先我们创建一个 Spring Boot 工程,名字就叫 eureka-server,可以直接使用 Spring Initializr 创建

也可以直接在 pom.xml 中引入以下依赖

复制

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
<parent>    <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --></parent>

<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RC1</spring-cloud.version></properties>

<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>

 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies>

<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build>

通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。这一步非常的简单,只需要在一个普通的 Spring Boot 应用中添加这个注解就能开启此功能,比如

复制

12345678
@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication {

 public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}

在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在 application.yml 配置文件中增加如下信息:

复制

12345678910111213
spring:  application: name: eureka-serverserver: port: 7000eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  • server.port:为了与后续要进行注册的服务区分,这里将服务注册中心的端口设置为 7000。
  • eureka.client.register-with-eureka:表示是否将自己注册到 Eureka Server,默认为 true。
  • eureka.client.fetch-registry:表示是否从 Eureka Server 获取注册信息,默认为 true。
  • eureka.client.service-url.defaultZone:设置与 Eureka Server 交互的地址,查询服务和注册服务都需要依赖这个地址。默认是 http://localhost:8761/eureka ;多个地址可使用英文逗号(,)分隔。

启动工程后,访问 http://localhost:7000/,可以看到下面的页面,其中还没有发现任何服务

集群

注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。Eureka 通过互相注册的方式来实现高可用的部署,所以我们只需要将 Eureke Server 配置其他可用的 service-url 就能实现高可用部署。

双节点注册中心

首先我们尝试一下双节点的注册中心的搭建。

1、我们将之前的 application.yml 复制一份并命名为 application-peer1.yml,作为 peer1 服务中心的配置,并将 service-url 指向 peer2

复制

12345678910111213
spring:  application: name: eureka-serverserver: port: 7001eureka: instance: hostname: peer1 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://peer2:7002/eureka/

2、将之前的 application-peer1.yml 复制一份并命名为 application-peer2.yml,作为 peer2 服务中心的配置,并将 service-url 指向 peer1

复制

12345678910111213
spring:  application: name: eureka-serverserver: port: 7002eureka: instance: hostname: peer2 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://peer1:7001/eureka/

3、配本地 host:
在 hosts 文件中加入如下配置

复制

1
127.0.0.1 peer1 peer2

4、打包启动
依次执行下面命令

复制

123456
# 打包mvn clean package  -Dmaven.test.skip=true

# 分别以 peer1 和 peer2 配置信息启动 Eurekajava -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

在刚启动 peer1 的时候,启动完成后会在控制台看到一些异常信息,大致就是拒绝连接、请求超时这一类的,这个不用管,启动 peer2 后就好了。

依次启动完成后,访问 http://localhost:7001/,效果如下

根据图可以看出 peer1 的注册中心 DS Replicas 已经有了 peer2 的相关配置信息,并且出现在 available-replicas 中。我们手动停止 peer2 来观察,发现 peer2 就会移动到 unavailable-replicas 一栏中,表示 peer2 不可用。

到此双节点的配置已经完成。

注意事项

  • 在搭建 Eureka Server 双节点或集群的时候,要把eureka.client.register-with-eurekaeureka.client.fetch-registry均改为true(默认)。否则会出现实例列表为空,且 peer2 不在 available-replicas 而在 unavailable-replicas 的情况(这时其实只是启动了两个单点实例)。如果是像我这样图省事把之前的单节点配置和双节点的配置放在一个工程里,双节点的配置里要显示设置以上两个参数,直接删除是用不了默认配置的——Spring profile 会继承未在子配置里设置的父配置(application.yml)中的配置。
  • 在注册的时候,配置文件中的spring.application.name必须一致,否则情况会是这样的

Eureka 集群使用

在生产中我们可能需要三台或者大于三台的注册中心来保证服务的稳定性,配置的原理其实都一样,将注册中心分别指向其它的注册中心。这里只介绍三台集群的配置情况,其实和双节点的注册中心类似,每台注册中心分别又指向其它两个节点即可。

application-peer1.yml

复制

1234567891011
spring:  application: name: eureka-serverserver: port: 7001eureka: instance: hostname: peer1 client: service-url: defaultZone: http://peer2:7002/eureka/,http://peer3:7003/eureka/

application-peer2.yml

复制

1234567891011
spring:  application: name: eureka-serverserver: port: 7002eureka: instance: hostname: peer2 client: service-url: defaultZone: http://peer1:7001/eureka/,http://peer3:7003/eureka/

application-peer3.yml

复制

1234567891011
spring:  application: name: eureka-serverserver: port: 7003eureka: instance: hostname: peer3 client: service-url: defaultZone: http://peer1:7001/eureka/,http://peer2:7002/eureka/

修改 hosts 文件中的配置,添加 peer3

复制

1
127.0.0.1 peer1 peer2 peer3

分别以 peer1、peer2、peer3 的配置参数启动 Eureka 注册中心

复制

123
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer1java -jar target/eureka-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer2java -jar target/eureka-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer3

依次启动完成后,访问 http://localhost:7001/,效果如下

可以在 peer1 中看到了 peer2、peer3 的相关信息,至此 Eureka 集群也已经完成了。

注册中心 Eureka 就介绍到这里,下一节我们将利用我们搭建的 Eureka Server 来为服务提供者 / 调用者提供注册 / 发现服务。

相关阅读

Spring Cloud(一):服务治理技术概览
Spring Cloud(二):服务注册与发现 Eureka
Spring Cloud(三):服务提供与调用 Eureka
Spring Cloud(四):服务容错保护 Hystrix
Spring Cloud(五):Hystrix 监控面板
Spring Cloud(六):Hystrix 监控数据聚合 Turbine
Spring Cloud(七):配置中心(Git 版与动态刷新)
Spring Cloud(八):配置中心(服务化与高可用)
Spring Cloud(九):配置中心(消息总线)
Spring Cloud(十):服务网关 Zuul(路由)
Spring Cloud(十一):服务网关 Zuul(过滤器)
Spring Cloud(十二):分布式链路跟踪(Sleuth 与 Zipkin)

示例代码:GitHub

参考

springcloud(二):注册中心 Eureka
Spring Cloud 构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston 版】
Spring Cloud 技术分析(1)——服务治理
Spring Cloud - Peer Awareness

  • 本文作者: Yibo
  • 本文链接: https://windmt.com/2018/04/15/spring-cloud-2-eureka/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

转载于:https://www.cnblogs.com/chenweida/p/9025615.html

Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】相关推荐

  1. Spring Cloud之服务注册与发现机制

    一.复杂与简单并存 1.背景: 到底是复杂好还是简单好,这是一个没有答案的问题,也是一个哲学问题.见仁见智啦.事物整体肯定是向复杂化方向发展,但是向人们呈现时应尽量简单化.用一句话来说就是:功能复杂化 ...

  2. Spring cloud实现服务注册及发现

    为什么80%的码农都做不了架构师?>>>    服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访 ...

  3. .NET Core + Spring Cloud:服务注册与发现

    毫无疑问,微服务架构是目前的主流,在微服务架构下,服务治理.负载均衡.服务熔断.配置中心.API网关 等都是需要关注的问题,当然不是非要全部完善后才能进行微服务开发,在很多项目团队中,初期可能会将某个 ...

  4. SpringCloud(二) 服务注册与发现Eureka

    1.eureka是干什么的? 上篇说了,微服务之间需要互相之间通信,那么通信就需要各种网络信息,我们可以通过使用硬编码的方式来进行通信,但是这种方式显然不合适,不可能说一个微服务的地址发生变动,那么整 ...

  5. 用ZooKeeper做为注册中心搭建基于Spring Cloud实现服务注册与发现

    前提: 先安装好ZooKeeper的环境,搭建参考:http://www.cnblogs.com/EasonJim/p/7482961.html 说明: 可以再简单的理解为有两方协作,一个是服务提供这 ...

  6. 【Spring Cloud Alibaba】Spring Cloud Alibaba 服务注册与发现实践

    1. 简介 服务注册与发现是微服务架构体系中最关键的组件之一.如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容.Nacos Disc ...

  7. 《深入理解 Spring Cloud 与微服务构建》第六章 服务注册和发现 Eureka

    <深入理解 Spring Cloud 与微服务构建>第六章 服务注册和发现 Eureka 文章目录 <深入理解 Spring Cloud 与微服务构建>第六章 服务注册和发现 ...

  8. spring cloud 学习之 服务注册和发现(Eureka)

    一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...

  9. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  10. 微服务之服务注册与发现--Eureka(附代码)

    微服务之服务注册与发现--Eureka(附代码) 该贴为入门贴,看完可快速知道服务注册与发现是什么?怎么用?至于深入的内容不在此篇文章所述之内,请自行百度. 内容来自:https://blog.csd ...

最新文章

  1. java memcached 存储对象_java – 从Memcache中获取低级别数据存储区实体对象时的慢速反序列化...
  2. C++ Primer 5th笔记(chap 13 拷贝控制)三五法则
  3. jar包和war包区别及理解
  4. EasyUI学习笔记8:MIS开发利器_ datagrid插件(下)(终结篇)
  5. javascript --- js中的事件
  6. 中科院研究员:教给孩子的数学浅得让人想哭
  7. AMD桌面处理器Roadmap也已泄露
  8. 一个C++工程CPU占用100%问题的排查
  9. 记一次酷派尚锋Y75刷机
  10. 现场看女排vs日本了
  11. 导入、build elasticsearch源码异常
  12. spotify注册服务器,【评测】Cocktail Audio N25:集USB解码、TIDAL、Spotify、NAS 串流、音乐服务器于......
  13. 2010年计算机专业考研大纲解析
  14. 单片机---STM8开发环境搭建与标准库工程创建
  15. TeXLive2021+TeXStudio安装及配置,亲测有效!
  16. 万物互联天下 创造未来奇迹
  17. RabbitMQ之消息确认机制(事务+Confirm) - 朱小厮的博客 - CSDN博客
  18. 每日一面 - 从 innodb 的索引结构分析,为什么索引的 key 长度不能太长?
  19. 01蓝桥杯特训课程第一次总结
  20. python方差检验分析(ANOVA)

热门文章

  1. ZK框架笔记3、窗体组件
  2. 设计:抽象类类还是接口
  3. [BZOJ 1025] [SCOI2009] 游戏 【DP】
  4. 为什么要进行软件著作权登记?
  5. 基于预训练语言模型的文本生成研究综述
  6. 这样的AI技术实战方式,大boss都看不下去了!
  7. 【机器学习案例】酒店用机器学习,预测哪些客人会放鸽子
  8. 腾讯、百度、滴滴最新NLP算法面经
  9. 干货 | 集成学习综述与代码实现
  10. 【收藏】从A到Z,26个实用Python模块/函数速览