微服务学习笔记(一)基础概念+Eureka

1 服务架构

单体架构

业务所有功能集中在一个项目

优点:架构简单、部署成本低

缺点:耦合度高

分布式架构

根据业务功能对系统进行拆分,每个业务模块作为独立项目

优点:降低服务耦合、有利于服务升级扩展

微服务

一种经过良好架构设计的分布式架构方案

特征

  • 单一职责

  • 面向服务

  • 自治

  • 隔离性强

微服务技术对比

在这里插入图片描述
比较springcloud和springboot详细版本对应:https://start.spring.io/actuator/info

微服务架构组件更新换代

在这里插入图片描述

2 微服务使用

服务拆分

注意事项

  1. 不同微服务,不要重复开发相同业务

  2. 微服务数据独立,不要访问其它微服务的数据库

  3. 微服务可以将自己的业务暴露为接口,供其它微服务调用

服务远程调用

在服务启动类中注册RestTemplate,在service注入RestTemplate发送http请求,调用其它服务

服务调用关系

  • 服务提供者:暴露接口给其它服务调用

  • 服务消费者:调用其它服务提供的接口

一个服务既可以是提供者也可以是消费者

3 Eureka注册中心

原理

eureka-server:服务端,注册中心

eureka-client:客户端,所有微服务

eureka作用

  • 服务提供者启动时向eureka注册自己信息

  • eureka保存这些信息

  • 消费者根据服务名称向eureka拉取提供者信息

  • 服务消费者利用负载均衡算法,从服务列表中挑选一个服务提供者

  • 服务提供者每隔30秒向注册中心发送心跳请求,报告健康状态

  • eureka更新记录服务列表信息,心跳不正常会被剔除

  • 消费者可以拉取到最新信息

在这里插入图片描述

搭建注册中心

  1. 引入依赖

父工程加入springcloud依赖

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

当前工程加入eureka-server依赖

<dependencies>
    <!--eureka服务端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>
  1. 启动类加上注解@EnableEurekaServer

  2. 配置文件

server:
  port: 8081 #服务端口
spring:
  application:
    name: eurekaserver #eureka服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8081/eureka #eureka地址

访问localhost:8081
在这里插入图片描述

服务注册

  1. 添加eureka-client依赖,注意要有spring-boot-starter-web依赖,不然服务启动失败
<dependencies>
    <!--eureka客户端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
  1. 启动类添加@EnableEurekaClient注解

  2. 配置文件

server:
  port: 8082 #服务端口
spring:
  application:
    name: userservice #服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8081/eureka #eureka地址

一个服务注册多个实例

idea-services, 某个服务右键-copy configuration

修改服务名称,修改环境配置VM options: -Dserver.port=xxx

服务发现

调用其它服务时用服务名称代替ip和端口

在启动类的RestTemplate添加负载均衡注解@LoadBalanced

  1. 注入DiscoveryClient

  2. discoveryClient.getServices()获取所有服务

  3. discoveryClient.getInstances()获取一个服务下的所有实例

  4. 启动类加入@EnableDiscoveryClient注解

@EnableDiscoveryClient和@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到该服务。

@EnableEurekaClient只适用于Eureka作为注册;@EnableDiscoveryClient 可以是其他注册中心。

搭建集群

目的:高可用,提高故障容错率,集群内部每台eureka相互注册

server:
  port: 8761

eureka:
  instance:
    hostname: eureka8761 #eureka服务端实例名称
  client:
    register-with-eureka: false #不需要注册自己
    fetch-registry: false #不需要检索服务
    service-url:
      defaultZone: http://eureka8861:8861/eureka/ #eureka地址
server:
  port: 8861

eureka:
  instance:
    hostname: eureka8861 #eureka服务端实例名称
  client:
    register-with-eureka: false #不需要注册自己
    fetch-registry: false #不需要检索服务
    service-url:
      defaultZone: http://eureka8761:8761/eureka/ #eureka地址

actuator信息完善

加入spring-boot-starter-actuator依赖

服务配置实例id、访问路径显示ip地址

eureka:
  instance:
    instance-id: mall-user-service8081
    prefer-ip-address: true #访问路径可以显示ip

自我保护

某时刻一个微服务不可用,Eureka不会立刻清理,依旧保留该服务的信息

防止Eureka客户端本身健康,但出现网络分区故障的情况下清理客户端的信息

属于CAP里面的AP分支

禁止自我保护:

eureka服务端

eureka:
  server:
    enable-self-preservation: false #关闭自我保护机制
    eviction-interval-timer-in-ms: 2000 #剔除服务的间隔时间

eureka客户端

eureka:
  instance:
    lease-renewal-interval-in-seconds: 1 #eureka客户端向服务端发送心跳的时间间隔
    lease-expiration-duration-in-seconds: 2 #eureka服务端在收到最后一次心跳后等待时间上限,超时将剔除服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值