SpringCloud系列(2)---Netfilx-Eureka

上一篇笔记写到的两个问题,Netfilx-Eureka和Ribbo会给我们一一解决。如果有看过dubbo 应该知道zookeeper,Eureka的角色就是zookeeper。

Eureka和Zookeeper主要都是作为微服务的注册和发现。

Eureka和Zookeeper不一样的是,Zookeeper是作为一个单独的应用程序,而Eureka是直接嵌套在SpringCloud当中的。所以 Eureka Server本身就是一个SpringBoot的项目。


一、服务注册和发现概念


上面的图是我网上找的。由于微服务的地址变革可能会影响很大,所以就引入了服务注册中心的角色。所有服务提供者必须将IP地址或者主机名注册到服务器注册中心当中,我们使用注册中心就是Eurika Server。服务的消费者在调用服务器之前,先要到服务注册中心查询服务提供者的网络地址信息,然后进行调用,这个原理非常相似于我们的DNS。获得服务提供者的网络地址的操作,我们称为服务发现。服务注册中心一般提供一下功能组件:

1、服务注册表:记录各个微服务的信息,例如名称、网络地址、端口号等。服务器注册表提供查询和管理的API,用于管理和查询可用的微服务实例。

2、服务注册和发现:刚刚已经说过了,微服务在启动时,将自己的信息注册到服务器注册中心当中。在消费者可以通过服务注册中心发现服务实例。

3、服务检查:检查微服务的健康情况,如果微服务实例在一段时间没有心跳信息,就会从服务实例注册表中移除该实例。


二、Eureka

Eureka是Netfilx开源的服务发现组件,本身是基于REST的服务。包含Server和Client两个部分。SpingCloud 将其集成到SpringCloud Netflix子项目中。

Eureka有两个概念分别 Region和Availability Zone。他们都是Amazon AWS的概率。其中,Region表示AWS中的地理位置,每个Region都有多个Availability Zone,各个Region之间完全隔离。

Spring Cloud 默认使用的Region是us-east-1,在非AWS环境下,可以将Availability Zone理解成机房,将Region理解为夸机房的Eureka集群。


三、Eureka Server 和 Client

Eureka Server 提供服务器的发现的能力,各个微服务启动时,都会在Eureka Server中注册自己的信息,Eureka Server 会将这些信息存储到注册表当中。

Eureka Client 这个就是一个JAVA客户端,用于简化于Eureka Server的交互。当然如果你的微服务是跨平台的,各个服务存在不同的开发语言,那就只能通过REST的方式去与Eureka Server进行交互了。REST不是我们的重点,因为我们作为一个JAVA狗,Eureka Client足够简化我们的操作。

以下是笔者的从参考书中摘录的重点概念:

1、微服务启动后,会周期性向Eureka Server 发送心跳信息默认是30秒。如果Eureka在一定的时间内(默认90秒)无法获得实例的心跳信息,Eureka Server 将会注册该实例。

2、默认情况下,Eureka Server 同时也是Eureka Client。多个Eureka Server实例,互相之间通过复制的方式,来实现服务注册表的同步。

3、Eureka Client 会缓存服务注册表中的信息。这样有非常多的好处,微服务无需每次都请求查询Eureka Server,从而降低Eureka Server的服务压力和网络压力;即使所有Eureka Server都挂了,Eureka Client还是可以根据自己的缓存注册表自给自足。


四、动手编写Eureka Server

笔者此事已经开了第三个IDE了,我的MacBook的内存开始吃不消了。建议这些还是在内存比较大的计算机上进行测试,而且同时去编译和加载会导致非常耗时间。唉··· 一会还要再加多一个Eureka Server 做高可用,呵呵!搞事情!

在Maven上我们的依赖配置如下:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
然后在配置类当中打上@EnableEurekaServer 

@SpringBootApplication
@EnableEurekaServer
public class EurekaserveraApplication {

   public static void main(String[] args) {
      SpringApplication.run(EurekaserveraApplication.class, args);
   }
}
最后配置一下我们的application.properties

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://lcoalhost:8761/eureka/

端口就不说了看看其他配置是什么回事:

1、register-with-eureka 这个配置是否将自己的注册到Eureka Server当中,默认true。由于当前应用就是Eureka Server 所以为false

2、fetch-registry 表示是否从Eureka Server 中获得注册信息,默认为true。目前是单点Eureka Server 所以不需要和其他Eureka Server 节点做同步,所以为false

3、service-url.default-zone 设置与Eureka Server交互的地址,查询服务和注册服务都依赖这个地址。如果多个地址即多个Eureka Server节点需要用“,”分隔。默认是http://localhost:8761/eureka

配置完成,跑起!

需要注意的是,笔者之前是使用最新的SpringCloud版本1.5.4.RELEASE 但是实际当我打开页面的过程当中发现无法打开上面的UI界面,只是有一个XML。笔者在查找了很多网上的资料后,也无法解决。但是在stackoverflow中我找到了一个帖子,说将其降级到1.5.2.RELEASE就正常出现页面了。至于1.5.4为什么不可以显示,可能后续我会有所补充。但是1.5.4其他的功能还是正常可以使用的。

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>1.5.4.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>
改成:

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

五、Eureka Server 高可用

Eureka Server作为一个服务注册中心当然是不允许出现单点异常的,所以Eureka Server 做高可用是一个必须的操作。上面已经介绍过Eureka Server高可用的理论了,现在就操作一下。环境上笔者就不搞两台设备来做了,笔者会在hosts文件当中添加两条记录,表示当前的两台计算机的主机名:

127.0.0.1       eurekaservera eurekaserverb


然后在同一个项目当中配置两个profile,然后通过不同的profile分别代表eureka-servera、eureka-serverb的配置,然后分别启动。不清楚profile的可以看看我之前的SpringBoot的笔记SpringBoot系列(5)---SpringBoot-Web和SpringBoot基础 搜索profile即可。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值