目录

 

为啥用eureka集群

分布式和集群有啥区别?

搭建eureka集群

创建server端项目

pom文件配置

配置application.yml

还要注意:配置hosts文件  位置  C:\Windows\System32\drivers\etc

启动类上添加@EnableEurekaServer 注解

配置两个server,分别启动

client客户端

pom文件

配置application.yml

 启动类

启动项目


为啥用eureka集群

Eureka,作为spring cloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置。单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况,具有较强容灾能力的eureka服务。

分布式和集群有啥区别?

所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其他服务节点可以顶上来,从而保证了服务的健壮性。你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性。

搭建eureka集群

创建server端项目

pom文件配置

注意:要写 dependencyManagement    spring-cloud-starter-eureka-server server端需要加server

<?xml version="1.0" encoding="UTF-8"?>
<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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.lgh</groupId>
	<artifactId>eurekapeer1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eurekapeer1</name>
	<description>Demo project for Spring Boot</description>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR5</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
	</properties>

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

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

</project>

配置application.yml

spring:
  application:
    name: eureka
  profiles:
    active: server1

配置application-server1.yml和application-server2.yml

给这两个配置文件两个不同的接口。

instance.hostname是唯一标识。

互相给他们两个对方的url      

application-server1.yml

server:
  port: 8001
eureka:
  instance:
    hostname: server1
  client:
    # 这里是集群,则不需要配置这两个
    # 表示是否注册自身到eureka服务器
    # register-with-eureka: false
    # 是否从eureka上获取注册信息
    # fetch-registry: false
    service-url:
      defaultZone: http://server2:8002/eureka/

application-server2.yml

server:
  port: 8002
eureka:
  instance:
    hostname: server2
  client:
    service-url:
      defaultZone: http://server1:8001/eureka/

还要注意:配置hosts文件  位置  C:\Windows\System32\drivers\etc


 

127.0.0.1        server1
127.0.0.1        server2 

启动类上添加@EnableEurekaServer 注解

启动服务

配置两个server,分别启动

然后分别启动这两个服务就可以了。当启动第一个服务的时候,因为第二个服务没有启动,所以,会一直报错。但不影响。虽然报错,项目依然正常启动,然后启动第二个项目。

注:EUREKA_CLIENT 是我写的的一个客户端client项目,client项目停掉后,并不会消失

这时两个注册中心就都有互相的地址了。

解释一下上面的红色的问题

这是Eureka的自我保护模式。如果在Eureka Server的首页看到以下这段提示,则说明Eureka已经进入了保护模式。

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

这里eureka  AMIs n/a(2)

因为我们没有为这两个注册中心进行命名,所以系统默认了名称,所以会出现两个。

当我们给两个配置文件各自给一个名字。

server 1

spring:
  application:
    name: spring-cloud-eureka1

server2

spring:
  application:
    name: spring-cloud-eureka2

这样我们也可以更明显的看出来没有配置

# 表示是否注册自身到eureka服务器
# register-with-eureka: false
# 是否从eureka上获取注册信息
# fetch-registry: false

的结果是,会将自己当成客户端进行注册。

以上就是server端的搭建配置

client客户端

搭建项目

pom文件

和上面的一样,就是把eureka-server去掉server

<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR5</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

配置application.yml

这里只需要配置一个server1 8001就可以了。然后启动后会发现,server2也能发现这个客户端项目

spring:
  application:
    name: eureka_client
eureka:
  client:
    service-url:
      defaultZone:  http://server1:8001/eureka

 启动类

添加注解@EnableEurekaClient

启动项目

刷新server1和server2管理界面。会发现两个注册中心都能发现,client项目

 这样的话,无论那一个server停掉宕机,都不会造成多大的影响。当我们停掉server1时,server2同样还能发现client客户端。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐