第十一章 Spring Cloud Eureka的高可用

官网翻译过来的:

Eureka服务器没有后端存储,但是注册表中的服务实例都必须发送心跳以保持其注册的最新状态(所以这可以在内存中完成)。客户端也有一个内存缓存的eureka注册(因此他们不必去注册表中每一个请求到一个服务)

默认情况下,每个Eureka服务器都是一个Eureka客户端,并且需要(至少一个)服务URL来定位一个对等点。如果您不提供它,服务将运行和工作,但是它将会为您的日志带来大量的噪声,因为它们无法注册到对等点。

两个缓存(客户端和服务器)heartbeats的组合使独立的Eureka服务器对失败有相当的适应性,只要有某种监视或弹性运行时保持它的存活(例如云计算)。在独立模式下,您可能更倾向于关闭客户端的行为,因此它不会继续尝试,也不会到达它的同类。例子:

http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-eureka-server-zones-and-regions

Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步


EurekaHostNameApplication

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * 
 * Eureka的高可用
 *
 */

@SpringBootApplication  //开启启动程序入口类
@EnableEurekaServer //该注解表示一个EurekaServer
public class EurekaHostNameApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaHostNameApplication.class, args);
  }
}

application.yml配置

spring:
  application:
    name: spring-cloud-eureka_hostname
---
server:
  port: 8761  #端口号
spring:
  profiles: peer1  #多环境配置
eureka:
  instance:
    hostname: peer1  #此处的hostname为主机名,若是本地调试,则要配置本机的hostname,配置本机的hostname方法:window+R键,输入drivers,然后进入etc目录,然后编辑hosts文件,加入127.0.0.1 peer1即可
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/   #把peer2和peer3注册到peer1中
---
server:
  port: 8762  #端口号
spring:
  profiles: peer2   #多环境配置
eureka:
  instance:
    hostname: peer2  #此处的hostname为主机名,若是本地调试,则要配置本机的hostname,配置本机的hostname方法:window+R键,输入drivers,然后进入etc目录,然后编辑hosts文件,加入127.0.0.1 peer2即可
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/  #把peer1和peer3注册到peer2中
---
server:
  port: 8763  #端口号
spring:
  profiles: peer3  #多环境配置
eureka:
  instance:
    hostname: peer3  #此处的hostname为主机名,若是本地调试,则要配置本机的hostname,配置本机的hostname方法:window+R键,输入drivers,然后进入etc目录,然后编辑hosts文件,加入127.0.0.1 peer3即可
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/  #把peer1和peer2注册到peer3中

pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example.demo</groupId>
	<artifactId>spring-cloud-eureka_hostname</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>spring-cloud-eureka_hostname</name>
	<description>spring-cloud-eureka_hostname</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>

	<properties>
		<!-- 文件拷贝时的编码 -->  
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		  <!-- 编译时的编码 -->  
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>  
        <!-- jdk版本 -->  
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
			<!-- 注册中心 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>	
	</dependencies>
	<dependencyManagement>
		<dependencies>
		<!-- 版本依赖管理,故之后添加依赖无需指定version -->
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR2</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<!-- 用以为integration-test提供支持。 -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

peer2中有三个节点,其实在application.yml配置中只配置了两个节点,但是由于它是累计增加的,故才会有三个节点。(

在最开始时,我们就说了官网中Eureka高可用说明,官网告诉我们注册表中的实例都要发送心跳以保持注册更新。简单来说,就是各服务之间通过相互发送心跳来保持同步,所以就会在实例表中包含了自己本省的实例。

 这样的话,要是其中一个服务节点访问不了的话,这样也不会影响服务直接的访问,由于它有多个节点。运行如下:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值