SpringCloud从零开始(三)之Eureka注册中心

一、 什么是Eureka

在上一篇我们谈到,零散的微服务需要个大管家,来管理,那么这个服务注册的管家,就是Eureka了。他是用来主管服务的注册与发现类似于zookeeper。它是C-S结构的,基于客户端和服务器端。Eureka Client是他的客户端,主要用简化跟Eureka Server的交互。Eureka Server主要负责服务的注册。
Eureka中的三大角色:

  • Eureka Server:服务的注册与发现
  • Service provider 服务的提供者,将服务注册到Eureka,当中
  • Servce consumer 服务发消费者 ,从Eureka服务列表中获得服务,然后进行消费

二、工程的代建

这篇文章 我们只需要对三个模块进行操作

创建microservice_eureka_7001
改造microservice_product_provider8001
改造microservice_product_consumer80

(1) Eureka Server微服务的创建

在父工程下,新建一个模块microservice_eureka_7001,这个模块是Eureka的服务中心。创建过程如正常maven模块。
在这里插入图片描述
创建完成之后。
1、引入相关依赖

<?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">
    <parent>
        <artifactId>microservice</artifactId>
        <groupId>com.kuke</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>microservice_eureka_7001</artifactId>

    <dependencies>
        <!--eureka-server服务端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <!-- 修改后立即生效,热部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
</project>

2、进行配置application.yml

server:
  port: 7001 #服务端口名称

eureka:
  instance:
    hostname: eureka7001
  client:
    fetch-registry: false # 不用检索服务 自己是注册中心
    register-with-eureka: false #不向注册中心注册自己
    service-url:
      defaultZone: http://eureka7001:7001/eureka

为了后面区分多个eureka,我在本机的hosts文件中进行了配置,将eureka7001 映射到了127.0.0.1

fetch-registry: false不用检索服务 自己是注册中心,因为这个服务是Eureka-server,主要是用来注册的,所有不需要去发现另外的服务
register-with-eureka: false不用像注册中心自己。自己就是注册中心。就好比房东去收房租,他的租户需要向他缴纳房租,但是他自己确不需要。
defaultZone: http://eureka7001:7001/eureka 配置注册中心的地址

3、编写主启动类Eureka7001Application
添加注解@EnableEurekaServer标识这是一个注册中心的服务端。

@EnableEurekaServer
@SpringBootApplication
public class Eureka7001Application {
    public static void main(String[] args) {
        SpringApplication.run(Eureka7001Application.class,args);
    }
}

4、访问http://eureka7001:7001
在这里插入图片描述
浏览器显示这个,那么就说明Eureka的注册服务中心已经搭建成功了。

(2)Service provider服务的提供者的创建

我们就直接对上一篇文章中创建的microservice_product_provider8001进行改造。
1、引入相关依赖(这个我们创建改工程的时候已经引入)

 <!--引入eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

2、增加配置

eureka:  #设置eureka注册服务的地址
  client:
    service-url:
       defaultZone: http://eureka7001:7001/eureka/
  instance:
    instance-id: microservice-provider-dept-8001 #配置服务的别名
    prefer-ip-address: true # 注册的时候使用ip注册

3、注解开启Eureka客户端

//在启动类上标注
@EnableEurekaClient //开启服务注册功能

4、修改完成之后,启动microservice_product_provider8001(Eureka-server注册中心这个服务要一直保持开启)
在此访问服务注册中心的地址http://eureka7001:7001

在这里插入图片描述
我可以发现,有一个服务名为MICROSERVICE-PROVIDER,在注册中心列表。其实这个服务名就是我们在下面配置的。

spring:
    application:
   		 name: microservice-provider

所以我们现在知道这个name,就是我们对外暴露服务的名字。我们还发现,他有红色的警告提示,至于原因。我下面会介绍。

(3)Servce consumer 服务发消费者

这个也就是Eureka的第三部分,服务的消费者。有服务注册到了注册中心,需要有另外的服务去消费。那么这个消费者如何才能找到注册中心呢,所有这也要进行相关的配置。步骤与创建Eureka服务的提供者大致相同,
改造microservice_product_consumer80模块进行改造
1、引入相关依赖(这个我们创建改工程的时候已经引入)

 <!--引入eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

2、增加配置

eureka:
  client:
    service-url:
#eureka发现服务的列表
       defaultZone: http://eureka7001:7001/eureka
#自己不能注册 自己只需要通过eureka发现服务
    register-with-eureka: false
  instance:
    appname: microserviceconsumer
#使用ip索取服务
    prefer-ip-address: true

3、注解开启Eureka客户端

//在启动类上标注 
@EnableDiscoveryClient

关于eureka的自我保护机制:
Eureka遵守AP(高可用,分区容错性),Eureka各个节点都是平等的,几个节点挂点,不会影响的剩余的节点提供服务。只要有Eureak服务还在工作,当Eureka-client向某个eureka节点注册或查询服务时如果发现连接失败,就会自动连接到其他eureka服务器,只不过查询到是数据可能不是最新的(因为eureka无法保证数据的一致性),在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有
接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。如果在15分钟内,超过85%节点没哟正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障。
自我保护机制:

1、Eureka不会从注册列表中移除长时间没有心跳的服务(好死不如赖活着)。

2、Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他的节点当中。

3、当网络稳定时候,当前新实例的注册信息会被同步到其他节点当中

这样消费者也就配置好了。但是消费者通过哪种方式来访问注册中心的服务呢。那么这就就把这个问题的详细解答留给下一篇博客。
(先剧透一下:其实也是使用RestTemplate,但是带有Ribbon功能的)

发布了98 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43732955/article/details/97560730