Titan笔记

  • 首页
  • Java
  • 数据结构
  • C语言
  • Web
  • 杂谈
  • 移动开发
  • 逸笔挥墨
Titan笔记
分享学习,研究与开发的点滴记忆
  1. 首页
  2. Java
  3. 正文

Spring Cloud 微服务学习笔记 - Eureka 服务注册与发现

2021年1月27日 980点热度 3人点赞 0条评论

4.1 Eureka的概念

4.1.1 什么是Eureka

Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。

4.1.2 Eureka的用途

Eureka相当于一个服务注册和发现的中心,Eureka的客户端连接到Eureka的服务端并通过心跳包保持连接,服务端就可以通过这种方式来判断各个微服务是否正常运行,并且能够动态的将非正常运行的微服务实例节点移出。

4.2 Eureka单机模式构建

4.2.1 IDEA生成EurekaServer端服务注册中心

4.2.1.1 新建模块

新建一个Module:Cloud-Eureka-Server-7001,包含 Eureka Server服务

4.2.1.2 application.yml中进行配置
server:
  port: 7001
spring:
  application:
    name: cloud-eureka-server-7001
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false # 不向注册中心注册自己(本身是服务端)
    fetch-registry: false
    service-url:
      # 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
4.2.1.3 在SpringBoot启动类中添加注解

添加 @EnableEurekaServer 注解

4.2.1.4 访问Eureka的Web面板

通过访问 http://localhost:7001/ 即可查看Eureka当前状态

4.2.2 Cloud-Provider-Payment-8001微服务注册进入Eureka

4.2.2.1 在Payment微服务的pom.xml中添加dependency
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
4.2.2.2 添加相关配置文件至application.yml
eureka:
  client:
    register-with-eureka: true # 向注册中心注册自己(本身是客户端)
    fetch-registry: true # 抓取已有的注册信息
    service-url:
      # 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
      defaultZone: http://localhost:7001/eureka/
4.2.2.3 添加@EnableEurekaClient注解

4.2.3 Cloud-Consumer-Order-80微服务注册进入Eureka

与4.2.2步骤类似^_^

4.3 Eureka集群环境部署

4.3.1 Eureka集群原理

Eureka集群依据”互相注册“原理,所有集群中的单节点相互注册,相互守望,对外是作为一个整体。

4.3.2 Eureka Server 集群部署记录

  1. 先按照单机版的环境Cloud-Eureka-Server-7001,新建Cloud-Eureka-Server-7002模块

  2. 本地hosts修改

    127.0.0.1 eureka7001.test # 7001服务端
    127.0.0.1 eureka7002.test # 7002服务端
  3. 7001、7002 的 application.yml修改

    eureka:
     instance:
       hostname: eureka7001.test
     client:
       register-with-eureka: false # 不向注册中心注册自己(本身是服务端)
       fetch-registry: false
       service-url:
         # 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
         defaultZone: http://eureka7002.test:7002/eureka/
    eureka:
     instance:
       hostname: eureka7002.test
     client:
       register-with-eureka: false # 不向注册中心注册自己(本身是服务端)
       fetch-registry: false
       service-url:
         # 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
         defaultZone: http://eureka7001.test:7001/eureka/
  4. 分别启动两个 Cloud-Eureka-Server 即可

4.4 微服务使用Eureka集群注册与发现

4.4.1 微服务注册进入Eureka集群

只需要修改微服务对应的 Application.yml即可

server:
  port: 80
spring:
  application:
    name: cloud-order-service
eureka:
  client:
    register-with-eureka: true # 向注册中心注册自己(本身是客户端)
    fetch-registry: true # 抓取已有的注册信息
    service-url:
      # 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
      defaultZone: http://eureka7001.test:7001/eureka/,http://eureka7002.test:7002/eureka/

4.4.2 Cloud-Provider-Payment微服务提供者集群搭建

4.4.2.1 微服务提供者集群部署

基于Cloud-Provider-Payment-8001,搭建Cloud-Provider-Payment-8002微服务

4.4.2.2 Cloud-Consumer-Order-80微服务消费者重构
  • 修改 Cloud-Consumer-Order-80 中 Controller 之前固定写的PAYMENT_URL

    private static final String PAYMENT_URL = "http://localhost:8001";

    替换为

    private static final String PAYMENT_URL = "http://cloud-payment-service";
  • RestTemplate开启@LoadBalanced注解,负载均衡支持

  • 再次访问Order的相关API,可以发现已经成功实现了负载均衡!

4.5 Actuator微服务信息完善

Application.yml添加如下配置

  instance:
    instance-id: payment8001
    prefer-ip-address: true

4.6 Eureka Discovery 服务发现

在Payment服务中使用Discovery Client的示例

    @Resource
    private DiscoveryClient discoveryClient;
    @GetMapping("/payment/discovery")
    public Object discovery() {
        List<String> services = discoveryClient.getServices();
        services.forEach(x -> log.info("Service: " + x));
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        instances.forEach(x -> log.info(
                "Instance: " + x.getInstanceId() + "," + x.getHost() + "," + x.getPort() + "," + x.getUri()
        ));
        return this.discoveryClient;
    }

4.7 Eureka 自我保护机制

Eureka的自我保护特性主要用于减少在网络分区或者不稳定状况下的不一致性问题。

Eureka在运行期间会统计心跳失败的比例,在15分钟内是否低于85%,如果出现了低于的情况,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。

5. ZooKeeper\Consul等注册中心

配置方式与Eureka大同小异

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: Eureka服务注册与发现 Java JavaWeb Spring SpringCloud SpringCloud微服务
最后更新:2021年1月27日

Titan

不为岁月流逝蹉跎,不为潮流的势头去附和

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
最新 热点 随机
最新 热点 随机
Docker配置IPv6容器网络支持 什么是Elastic Stack,ELK的发展历程 K8s中Pod的基本概念 Pushkin AI - 基于OpenAI-ChatGPT / GPT3的问答机器人 云原生 - 浅谈容器基础与K8S架构设计 腾讯Serverless体验,使用TypeScript编写并部署云函数
Docker配置IPv6容器网络支持
[DEMO] Titan的WEB期末项目 Spring与Mybatis的整合 关于Hive使用的一些实例 Java 开发环境与IDE 配置与安装教程 (二) 使用Mybatis完成CRUD操作 [数据结构]结构体练习之复数运算
分类
  • Android
  • C语言
  • Elasticsearch
  • Hadoop
  • Hive
  • Java
  • JavaWeb
  • Kubernetes
  • Linux运维之道
  • Mybatis学习笔记
  • Python
  • SpringCloud
  • Web
  • Web前端
  • Web后端
  • 云原生
  • 并发编程
  • 开发工具
  • 数据库
  • 数据结构
  • 杂谈
  • 移动开发
  • 移动测试
  • 诗词歌赋
  • 软件测试
  • 逸笔挥墨
  • 随摘
标签聚合
Java Mybatis学习笔记 链式存储 数据结构 二叉树 Apache-Hive JavaWeb Python

COPYRIGHT © 2013-2021 Titan. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备20001822号-1

豫公网安备 41010502004418号