Spring Cloud 服务治理(注册中心)

初识Spring Cloud

微服务架构

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

在这里插入图片描述

在这里插入图片描述

Spring Cloud的主要组件

  • 注册中心【★★★★★】
  • 网关 【★★★★★】
  • 配置中心【★★☆☆☆】
  • 熔断器【★★☆☆☆】
  • 负载均衡【★★☆☆☆】
  • 消息总线【★☆☆☆☆】
  • 数据监控【★☆☆☆☆】

Spring Cloud 与 Dubbo 对比

在这里插入图片描述
• Spring Cloud 与 Dubbo 都是实现微服务有效的工具。
• Dubbo 只是实现了服务治理,而Spring Cloud 子项目分别覆盖 了微服务架构下的众多部件。
• Dubbo 使用 RPC 通讯协议,Spring Cloud 使用 RESTful 完成 通信,Dubbo 效率略高于 Spring Cloud。

小节

• 微服务就是将项目的各个模块拆分为可独立运行、部署、测试的架构设计风格。
• Spring 公司将其他公司中微服务架构常用的组件整合起来,并使用 SpringBoot 简化其开发、配置。称为Spring Cloud
• Spring Cloud 与 Dubbo都是实现微服务有效的工具。Dubbo 性能更好,而Spring Cloud 功能更全面。

Spring Cloud 服务治理

Eureka

• Eureka 是 Netflix 公司开源的一个服务注册与发现的组件。
• Eureka 和其他 Netflix 公司的服务组件(例如负载均衡、熔断器、网关等)一起,被 Spring Cloud 社区整合为 Spring-Cloud-Netflix 模块。
• Eureka 包含两个组件:Eureka Server (注册中心) 和 Eureka Client (服务提供者、服务消费者)。

在这里插入图片描述

使用步骤

  1. 搭建 Provider 和 Consumer 服务。

  2. 使用 RestTemplate 完成远程调用。
    • Spring提供的一种简单便捷的模板类,用于在java 代码里访问 restful 服务。
    • 其功能与 HttpClient 类似,但是 RestTemplate 实现更优雅,使用更方便。

  3. 搭建 Eureka Server 服务。
    ① 创建 eureka-server 模块
    ② 引入 SpringCloud 和 euraka-server 相关依赖
    ③ 完成 Eureka Server 相关配置
    ④ 启动该模块

  4. 改造 Provider 和 Consumer 称为 Eureka Client。
    ① 引入 eureka-client 相关依赖
    ② 完成 eureka client 相关配置
    ③ 启动 测试

  5. Consumer 服务 通过从 Eureka Server 中抓取 Provider 地址 完成 远程调用

在这里插入图片描述

  • Eureka Server依赖:
<!-- eureka-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • Eureka Server 配置:
eureka:
  instance:
    hostname: localhost # 主机名
  client:
    register-with-eureka: false # 是否将自己的路径 注册到eureka上。eureka server 不需要的,eureka provider client 需要
    fetch-registry: false # 是否需要从eureka中抓取路径。eureka server 不需要的,eureka consumer client 需要
  • Eureka Server 启动类注解
@EnableEurekaServer
  • Eureka client 依赖:
<!-- eureka-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • Eureka client 配置
eureka:
  instance:
    hostname: localhost # 主机名
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
    register-with-eureka: true # 是否将自己的路径 注册到eureka上。eureka server 不需要的,eureka provider client 需要
    fetch-registry: true # 是否需要从eureka中抓取路径。eureka server 不需要的,eureka consumer client 需要
  • Eureka client 启动类注解
@EnableEurekaClient

Eureka客户端如何获取服务列表

@Autowired
DiscoveryClient discoveryClient;

List<ServiceInstance> ins = discoveryClient.getInstances("服务名称");
String host = instance.getHost();//获取ip
int port = instance.getPort();//获取端口

Eureka 相关配置及特性

eureka 一共有4部分配置

  1. server : eureka 的服务端配置
  2. client : eureka 的客户端配置
  3. instance : eureka 的实例配置
  4. dashboard : eureka 的web控制台配置

Eureka – 相关配置及特性 - instance

在这里插入图片描述

Eureka – 相关配置及特性 - server

在这里插入图片描述

Eureka – 相关配置及特性 - client

在这里插入图片描述

Eureka – 相关配置及特性 - dashboard

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

Eureka – 高可用

在这里插入图片描述

  • 准备两个Eureka Server
  • 分别进行配置,相互注册
  • Eureka Client 分别注册到这两个Eureka Server中

server1:

server:
  port: 8761


eureka:
  instance:
    hostname: eureka-server1 # 主机名 单机环境需要修改hosts文件 对应127.0.0.1
  client:
    service-url:
      defaultZone: http://eureka-server2:8762/eureka
    register-with-eureka: true # 是否将自己的路径 注册到eureka上。eureka server 不需要的,eureka provider client 需要
    fetch-registry: true # 是否需要从eureka中抓取路径。eureka server 不需要的,eureka consumer client 需要


spring:
  application:
    name: eureka-server-ha

server2:

server:
  port: 8762


eureka:
  instance:
    hostname: eureka-server2 # 主机名 单机环境需要修改hosts文件 对应127.0.0.1
  client:
    service-url:
      defaultZone: http://eureka-server1:8761/eureka

    register-with-eureka: true # 是否将自己的路径 注册到eureka上。eureka server 不需要的,eureka provider client 需要
    fetch-registry: true # 是否需要从eureka中抓取路径。eureka server 不需要的,eureka consumer client 需要
spring:
  application:
    name: eureka-server-ha

client:

server:
  port: 8001


eureka:
  instance:
    hostname: localhost # 主机名
    prefer-ip-address: true # 将当前实例的ip注册到eureka server 中。默认是false 注册主机名
    ip-address: 127.0.0.1 # 设置当前实例的ip
    instance-id: ${eureka.instance.ip-address}:${spring.application.name}:${server.port} # 设置web控制台显示的 实例id
  client:
    service-url:
      defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
spring:
  application:
    name: eureka-provider # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径

访问:http://localhost:8761/
在这里插入图片描述
访问:http://localhost:8762/
在这里插入图片描述

Consul

• Consul 是由 HashiCorp 基于 Go 语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件。
• 用于实现分布式系统的服务发现与配置。
• 使用起来也较 为简单。具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件, 方便部署 。
• 官网地址:https://www.consul.io

spring:
  cloud:
    consul:
      host: localhost # consul 服务端的 ip
      port: 8500 # consul 服务端的端口 默认8500
      discovery:
        service-name: ${spring.application.name} # 当前应用注册到consul的名称
        prefer-ip-address: true # 注册ip

  application:
    name: consul-provider # 应用名称

Nacos

• Nacos(Dynamic Naming and Configuration Service) 是阿里巴巴2018年7月开源的项目。
• 它专注于服务发现和配置管理领域 致力于帮助您发现、配置和管理微服务。Nacos 支持几乎所有主流类型的“服 务”的发现、配置和管理。
• 一句话概括就是Nacos = Spring Cloud注册中心 + Spring Cloud配置中心。
• 官网:https://nacos.io/
• 下载地址: https://github.com/alibaba/nacos/releases

依赖:

<!--nacos-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.0</version>
        </dependency>
spring:
  cloud:
    nacos:
      discovery:
        server-addr:  127.0.0.1:8848 # 配置nacos 服务端地址
  application:
    name: nacos-consumer # 服务名称

Ribbon 客户端负载均衡(了解)

Ribbon 概述

在这里插入图片描述
eureka集成Ribbon,使用不需要导入依赖
在这里插入图片描述

Ribbon 远程调用

  • Ribbon 可以简化RestTemplate 的远程调用
    1.在声明restTemplate的Bean时,添加一个注解@LoadBalanced
    2.在使用restTemplate发起请求时,需要定义url时,host:port可以替换为服务提供方的应用名称

Ribbon 负载均衡

在这里插入图片描述

  • 怎么修改负载均衡策略(默认轮询策略)

1.注解方式

@RibbonClient(name="服务提供方 应用名称",configuration=MyRule.class//设置负载均衡的策略类Bean)

在这里插入图片描述
2.配置方式
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值