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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spring Cloud学习笔记-Eureka,Zookeeper,Consul(老好人样子的死胖子都会背后捅刀子) -> 正文阅读

[大数据]Spring Cloud学习笔记-Eureka,Zookeeper,Consul(老好人样子的死胖子都会背后捅刀子)

在这里插入图片描述

新建项目

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

模块间调用,RestTemplate

package com.hzl.springcloud.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及
 * 一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,
 * 其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。接下来我们就来看看这些操作方法的使用
 */
@Configuration
@Slf4j
public class ApplicationContextConfig {

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

@RestController
@Slf4j
public class OrderController {

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

    @Resource
    private RestTemplate restTemplate;

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

    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getById(@PathVariable("id") Long id){
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }
}

一、服务注册与发现

  • 1、Eureka使用

  • Eureka釆用了CS(Client/Server 的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服,使用 Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server来监控系统中各个微服务是否正常运行。
  • 在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用
  • RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理毎个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息接口地址)
    在这里插入图片描述
    Eureka包含两个组件: Eureka Server和 Eureka client
  • Eureka Server提供服务注册服务:
    各个微服务节点通过配置启动后,会在 EurekaServer中进行注册,这样 EurekaServer中的服务注册表中将会存储所有可用服务节点的
    信息,服务节点的信息可以在界面中直观看到。
  • Eureka Client通过注册中心进行访问:
    是—个java客户端,用于简化 Eureka server的交互,客户端同时也具备一个内置的、使用轮迿( round- robin)负载算法的负载均衡器
    。在应用启动后,将会向 Eureka Server发送心跳(默认周期为30秒)。如果 Eureka server在多个心跳周期内没有接收到某个节点的心
    跳, EurekaServery将会从服务注册表中把这个服务节点移除(默认90秒)
/**
 * @author swl
 * @create 2021/8/9 20:47
 */
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@EnableEurekaServer
public class EurekaMain {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain.class,args);
    }
}

  • 单机eurekaServer
server:
  port: 7001
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    # false表示不向注册中心注册自己
    register-with-eureka: false
    # false表示自己端就是注册中心,不需要取检索服务
    fetch-registry: false
    service-url:
      # 设置与Eureka Server 交互的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

eureka:
  client:
    # 表示将自己注册进Eureka Server
    register-with-eureka: true
    # 是否从EurekaServer抓取已有的注册信息,集群必须为true才能配合ribbon使用
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
  • 配置本地hosts

# C:\WINDOWS\system32\drivers\etc
127.0.0.1   eureka7001.com
127.0.0.1   eureka7002.com
127.0.0.1   eureka7003.com
127.0.0.1   myzuul.com
127.0.0.1   config-3344
127.0.0.1	client-config.com
127.0.0.1	cloud-provider-payment
  • EurekaServer集群版,7001与7002相互注册,互相守望

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com
  client:
    # false表示不向注册中心注册自己
    register-with-eureka: false
    # false表示自己端就是注册中心,不需要取检索服务
    fetch-registry: false
    # 设置与Eureka Server 交互的地址,查询服务和注册服务都需要依赖这个地址
    service-url:
      # 与7002相互注册
      defaultZone: http://eureka7002.com:7002/eureka/

  • EurekaClient集群版,同时注册7001,7002

server:
  port: 8001

eureka:
  client:
    # 表示将自己注册进Eureka Server
    register-with-eureka: true
    # 是否从EurekaServer抓取已有的注册信息,集群必须为true才能配合ribbon使用
    fetch-registry: true

    service-url:
      # 同时注册进7001,7002
      defaultZone: http://eureka7001.com:7001/eureka , http://eureka7002.com:7002/eureka

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

在这里插入图片描述

  • 仅仅只有服务名称,java无法识别

在这里插入图片描述

  • @LoadBalanced

在这里插入图片描述

  • 8001和8002交替出现

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

在这里插入图片描述

  • 主机名称:服务名称修改
  • 访问信息有ip信息提示
    在这里插入图片描述
    在这里插入图片描述
  • 服务发现,@EnableDiscoveryClient

在这里插入图片描述

  • Eureka自我保护机制

在这里插入图片描述

自我保护机制:默认情况下 Eurekaclient走时向 Eurekaserver端发送心跳包,如果 Eureka在 servel端在一定时间内(默认90秒)股有收到 Eurekaclient发送心跳包,便会直接从服务注册列表中剔除该服务,但是在短时间(90秒中)内丢失了大量的服务实例心跳,这时候 Eurekaserver会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通,但是 EurekaClient为出现宕机,此时如果换做别的注册中心如果一定时间内没有收到心跳会将剔除该服务,这样就出现了严重失误,因为喜户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的)

  • 关闭自我保护

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com
  client:
    # false表示不向注册中心注册自己
    register-with-eureka: false
    # false表示自己端就是注册中心,不需要取检索服务
    fetch-registry: false
    # 设置与Eureka Server 交互的地址,查询服务和注册服务都需要依赖这个地址
    service-url:
      #与7002相互注册
      defaultZone: http://eureka7002.com:7002/eureka/
  server:
    # 关闭自我保护
    enable-self-preservation: false
    # 清理间隔
    eviction-interval-timer-in-ms: 2000
  • Eureka使用模块

在这里插入图片描述

  • 2、Zookeeper代替Eureka

  • zookeeper是一个分布式协调工具,可以实现注册中心功能
  • 关闭Linux服务器防火墙后启动zookeeper
[root@swl123 ~]# systemctl stop firewalld
[root@swl123 ~]# systemctl status firewalld
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
# 8004注册进zookeeper
server:
  port: 8004

spring:
  application:
    name: hzl-payment-service
  cloud:
  	# zookeeper
    zookeeper:
      connect-string: 111.55.34.111:2181
@SpringBootApplication
@EnableDiscoveryClient          //该注解用于向使用consul或者zookeeper作为注册中心时,注册服务
public class Payment4Main {
    public static void main(String[] args) {
        SpringApplication.run(Payment4Main.class,args);
    }
}

  • Zookeeper使用模块

在这里插入图片描述

  • 注意zk服务器的版本与项目zk的版本,如果报错jar冲突,修改pom文件
		<!--SpringBoot整合zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <!--排除discovery自带的zookeeper-->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--添加zookeeper版本-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.7.0</version>
        </dependency>
  • 3、Consul的服务注册与发现

Consu是一套开源的分布式服务发现和配置管理系统,由 HashiCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以-起使用以构建全方位的服务网格,总之 Consul提供了一种完整的服务网格解决方案。

Consul下载文档
Consul中文文档

win10启动:
consul agent -dev
在这里插入图片描述

consul访问地址:http://localhost:8500/

  • Consul使用模块

在这里插入图片描述

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>
server:
  port: 8006

spring:
  application:
    name: hzl-payment-service
  # consul注册中心地址
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        service-name: ${spring.application.name}

在这里插入图片描述

Eureka、Zookeeper和Consul三者区别

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

  • CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

  • CAP理论关注粒度是数据,而不是整体系统设计的策略

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:28:56  更:2021-08-11 12:31: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/23 17:16:24-

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