什么是Eureka?

服务注册组件:将微服务注册到Eureka中。

为什么需要服务注册?

微服务开发重点在一个"微"字,大型应用拆分成微型服务,意味着服务的数量不可能少。

服务之间存在调用关系,假设没有服务注册,微服务之间的调用关系就会是这个样子:

微服务的部署可能不会在同一台服务器上,而是需要通过远程调用,然后就涉及到IP地址了。理论上来说,直接通过IP地址直接通信也没有什么问题。 但是如果服务出问题,需要换一台服务器部署,ip地址就需要更改了。同时如果该服务被多个其他服务依赖,那么每一个IP地址都需要重置。

服务注册可以形象的理解为一张表,表的左边写着服务名称,而右侧对应的是IP地址。服务的调用使用名称来替代IP地址,那么当IP地址发生改变,直接修改服务注册中心的名称与IP的映射关系。其他服务由于是用名称来远程调用,所以并不需要更改。

Eureka与Zookeeper的区别

Eureka满足Ap原则,而Zookeeper满足CP原则。

(CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者最多同时满足俩)

Eureka三个角色

Eureka Server 提供服务注册和发现

Service Provider服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到

Service Consumer服务消费方从Eureka获取注册服务列表,从而能够消费服务

消费方与提供方:调用另一个服务称为消费。被另一个服务调用称为提供。

所以,同一个服务可能既是消费方也是提供方。

【注】:Eureka隐藏IP地址的功能体现在整个微服务的内部。

搭建Eureka集群

创建工程

  • 创建文件夹Eureka Cluster,用IDEA打开:

  • 创建msc-eureka-6001,msc-eureka-6002,msc-eureka-6003工程【jdk1.8】,

导入pom依赖

 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</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>

配置application.yaml

  • 配置地址映射

C:\Windows\System32\drivers\etc

msc-eureka-6001,

server:
port: 6001 eureka:
instance:
hostname: eureka6001.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己是注册中心,职责是维护服务,而不是调用服务
service-url:
defaultZone: http://eureka6003.com:6003/eureka/,http://eureka6002.com:6002/eureka/ # 注册到eureka6003和eureka6002里

msc-eureka-6002,

server:
port: 6002 eureka:
instance:
hostname: eureka6002.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己是注册中心,职责是维护服务,而不是调用服务
service-url:
defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6003.com:6003/eureka/

msc-eureka-6003

server:
port: 6003 eureka:
instance:
hostname: eureka6003.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己是注册中心,职责是维护服务,而不是调用服务
service-url:
defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/

创建主启动类并添加注解@EnableEurekaServer

package zkrun.top;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer // EurekaServer服务器端启动类,接受其它微服务注册进来
@SpringBootApplication
public class App_msc_eureka_6001
{
public static void main(String[] args)
{
SpringApplication.run(App_msc_eureka_6001.class, args);
}
}

启动Eureka集群

访问任意一个端口,都会显示另外两个Eureka服务

创建注册服务测试Eureka集群的高可用性

  • 新建工程msc-provider-5001

  • 导入pom依赖

     <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent> <properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties> <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency> <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <!-- Eureka客户端启动需要依赖web模块-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </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>
  • 配置application.yaml
server:
port: 5001
spring:
application:
name: msc-provider #应用名称
eureka:
client:
service-url:
defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/,http://eureka6003.com:6003/eureka/
instance:
instance-id: msc-provider-5001
prefer-ip-address: true #访问路径可以显示IP地址
  • 创建主启动类添加注解@EnableEurekaClient
package zkrun.top;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication
@EnableEurekaClient
public class App_msc_provider_5001
{
public static void main(String[] args)
{
SpringApplication.run(App_msc_provider_5001.class, args);
}
}

  • 测试Eureka集群高可用

手动停掉eureka6001,

eureka6001无法访问:

6002和6003仍然提供注册服务:


小结:

  • 三个Eureka和注册服务都没有继承父工程,其pom依赖都是独立的。其中注册服务依赖spring-boot-starter-web。今后在设计父工程的pom时,应该考虑到每个子工程的依赖。
  • 与Eureka同级别的服务注册组件还有Zookeeper,Consul等。根据具体的应用场景和组件的优势来决定技术选取是软件开发更应该注意的。(除了Eureka之外,同级别的其他组件也需要了解)

代码参考:https://github.com/Noneplus/JavaDev-Note/tree/master/SpringCloud代码

服务注册组件——Eureka高可用集群搭建的更多相关文章

  1. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  2. SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制

    第四章:服务注册中心 Eureka 4-1. Eureka 注册中心高可用集群概述在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性 问题,不能有单点故障,由于注册中心 eurek ...

  3. SpringCloud全家桶学习之服务注册与发现及Eureka高可用集群搭建(二)

    一.Eureka服务注册与发现 (1)Eureka是什么? Eureka是NetFlix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故 ...

  4. Eureka高可用集群搭建

    就是搭建Eureka的集群. 每个Eureka Server需要相互注册,确保数据一致. 我这里准备两个Eureka Server  他两的POM文件配置是一样的 <dependencies&g ...

  5. SpringCloud之Eureka高可用集群环境搭建

    注册中心集群 在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式. Eureka集群相当简单:相互注册 ...

  6. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  7. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  8. RabbitMQ高级指南:从配置、使用到高可用集群搭建

    本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...

  9. zookeeper+activemq高可用集群搭建

    一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...

随机推荐

  1. Java集合对象比对

    1. 场景描述 通过java代码从外围接口中获取数据并落地,已经存在的不落地,不存在的落地,因有部分字段变化是正常的,只需比对3个字段相同即为相同. 2. 解决方案 设置定时任务(三个标签完成spri ...

  2. Excel催化剂开源第28波-调用Google规划求解库

    在Excel催化剂的自定义函数中,有规划求解的函数,用于在一些凑数的场景,某财务工作网友向我提出的需求,例如用于凑发票额使用. 一般开发票的场景是多次采购合在一起开具,即多个订单产生后开,同时发票一般 ...

  3. 解决 mysql多表联合查询时出现的分页问题

    mysql一对多分页问题 部门表:tbl_dept 员工表:tbl_emp 数据库sql文件 CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm-crud` /* ...

  4. 小米OJ 12. 找出可能的合的组合

    利用dfs解决,从给出的数组左边或右边开始遍历,对每一个数字进行判断,有三种情况: 1. 加上当前数字的值,遍历下一个数字 2. 加上当前数字的值,继续遍历该数字 3. 不加上当前的数字的值,遍历下一 ...

  5. [PTA] 数据结构与算法题目集 6-3 求链式表的表长

    Length( List L ){ int res=0; while(L!=NULL){ res++; L=L->Next; } return res; }

  6. 线程锁,threadinglocal,线程池,生产者消费者模型

    1.线程锁 1.锁Lock(只能锁一次) import threading import time v = [] lock = threading.Lock() def func(arg): lock ...

  7. JDK(Windows)

    百度云:链接:http://pan.baidu.com/s/1dEEsIUd     密码:15cn 官网下载网址:http://www.oracle.com/technetwork/java/jav ...

  8. Django实现web端tailf日志文件

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇<Django使用Channels实现WebS ...

  9. 解决Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。

    解决Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常. 这个问题他们说是oracle的版本问题 但是好像不是...(我感觉VS版本问题,我 ...

  10. 段落超出div部分隐藏显示

    overflow: hidden; white-space: nowrap; text-overflow: ellipsis;