IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springcloud之Eureka -> 正文阅读

[Java知识库]springcloud之Eureka


springcloud组件
在这里插入图片描述

1、Eureka服务注册与发现

Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,就可以访问到服务,而不需要修改调用的配置文件。

1.1、原理

Eureka包含两个组件:Eureka Server和Eureka Client。

  • Eureka Server提供服务注册服务,各个节点启动后,会在EurekaServer中进行注册,这样Eureka Server中的服务注册表中将会出现所有可用的服务节点信息。
  • Eureka Client是一个java客户端,用于剑豪EurekaServer的交互,客户点同时具备内置的轮询负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳(默认周期30秒)。如果EurekaServer在多个心跳周期没有收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认周期W)

三大角色

  • Eureka Server:提供服务的注册和发现
  • Server Provider:将自身服务注册到Eureka中,从而使消费方能够找到
  • Server Consumer:服务消息方从Eureka中获取注册服务列表,从而找到消费服务

在这里插入图片描述

1.2、构建微服务注册到EurekaServer

在这里插入图片描述

1.2.1、Eureka Server

启动类

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

yml文件

server:
  port: 7001


eureka:
  instance:
  	#eureka服务端的实例名称
    hostname: localhost 
  client:
  	#false表示不向注册中心注册自己
    register-with-eureka: false 
    #false表示自己端就是注册中心,职责是维护数据实例,并不需要去检索服务
    fetch-registry: false 
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 

1.2.2、Eureka Client 之服务提供方(支付微服务)

启动类

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

yml文件

server:
  port: 8001


spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://192.168.75.128:3306/db2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root


eureka:
  client:
  	#是否将自己注册进eurekaServer默认true
    register-with-eureka: true 
    #是否从eurekaServer抓取已有的注册信息,默认true。集群必须设置true才能配合Ribbon使用负载均衡
    fetch-registry: true 
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务
      defaultZone: http://localhost:7001/eureka 


mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.xc.springcloud.entities

1.2.3、Eureka Client 之服务消费方(订单微服务)

启动类:

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

yml文件

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order


eureka:
  client:
  	#是否将自己注册进eurekaServer默认true
    register-with-eureka: true 
    #是否从eurekaServer抓取已有的注册信息,默认true。集群必须设置true才能配合Ribbon使用负载均衡
    fetch-registry: true 
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务
      defaultZone: http://localhost:7001/eureka 

启动三个微服务

http://localhost:7001/

在这里插入图片描述
没有EurekaServer本身是因为ym中配置了不将自己注册到服务注册中心。

1.3、Eureka集群原理(互相注册,互相守望)

在这里插入图片描述

1.3.1、Eureka集群搭建

本地搭建为了区分ip,做一些域名映射
在这里插入图片描述
本地模拟集群,创建两个Module项目
在这里插入图片描述
7001yml文件

server:
  port: 7001


eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7001.com
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护数据实例,并不需要去检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务
      defaultZone: http://eureka7002.com:7002/eureka/

7002yml文件

server:
  port: 7002


eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7002.com
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护数据实例,并不需要去检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务
      defaultZone: http://eureka7001.com:7001/eureka/

Eureka Server地址互相注册

在这里插入图片描述
在这里插入图片描述

1.3.2、支付和订单微服务注册到Eureka集群

订单微服务yml
在这里插入图片描述
支付微服务yml同上

在这里插入图片描述

在这里插入图片描述

1.3.2、支付微服务搭建集群

支付微服务(服务方)
在这里插入图片描述
订单服务8002和8001服务一样,服务名字都叫CLOUD-PAYMENT-SERVICE,只是端口号不一样。

订单微服务(消费方)
在这里插入图片描述
订单服务利用RestTemplate跨服务调用。订单微服务接口调用支付微服务接口

@Configuration
public class ApplicationConfig {
    @Bean
    @LoadBalanced //赋予RestTemplate负载均衡的能力,调用的服务是集群版使用,单机版不需要
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

跨服务调用
订单服务(消费方)调用支付服务(服务提供方),支付服务已经注册到EurekaServer中,服务名为CLOUD-PAYMENT-SERVICE,已包含ip和端口,故可以写成 url = http://CLOUD-PAYMENT-SERVICE;

@RestController
@Slf4j
public class OrderController {

//    public static final String PAYMENT_URL = "http://localhost:8001";
    public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment){
        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable Long id){
        return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
    }
}

在这里插入图片描述
访问地址

http://localhost/consumer/payment/get/1

第一次
在这里插入图片描述
第二次
在这里插入图片描述
端口轮询交替,证明访问支付微服务8001和8002轮询交替发送请求

1.4、微服务信息完善

1.4.1、服务名称修改

在这里插入图片描述
修改yml文件
在这里插入图片描述

修改后
在这里插入图片描述

1.4.2、访问信息有ip信息提示

在这里插入图片描述
修改yml文件
在这里插入图片描述
修改后

在这里插入图片描述

2、服务发现Discovery

启动类

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}
@RestController
@Slf4j
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @Resource
    private DiscoveryClient discoveryClient;

    @GetMapping("/payment/discovery")
    public Object discovery(){
        List<String> services = discoveryClient.getServices();
        log.info("微服务名称:"+services.toString());

        //支付微服务实例集合
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instances) {
            log.info("微服务id:"+instance.getServiceId()+", ip:"+instance.getHost()+", 端口:"+instance.getPort()+", url: "+instance.getUri());
        }
        
        return this.discoveryClient;
    }
}

访问地址

http://localhost:8001/payment/discovery

在这里插入图片描述
控制台结果

在这里插入图片描述

3、Eureka自我保护

为了防止EurekaClient可以正常运行,但是与Eureka网络不通情况下,EurekaServer不会like将EurekaClient服务剔除。

在这里插入图片描述

原则就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。

出现一下这段话,则证明进入自我保护机制
在这里插入图片描述

3.1、禁止自我保护

EurekaServer
在这里插入图片描述
EurekaClient

在这里插入图片描述

4、不同注册中心异同点

4.1、CAP原则

  • C(Consistency)强一致性
  • A(Avaiability)可用性
  • P(Partiton tolerance)分区容错性

CAP核心理论,一个分布式系统不可能同时满足一致性,可用性,容错性这三个需求,由于分区容错性P在分布式中是必须保证的,因此只能在A和C之间权衡。

  • Zookeeper/Consul 保证的是CP,满足数据一致性。(服务可用挂,数据不能错)
  • Eureka 保证的AP,满足高可用,对数据一致性不是特别高。(服务不可挂,数据可以错)
  • Eureka/Consul有图形界面,Zookeeper没有
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 15:48:10  更:2021-12-14 15:49:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:05:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码