微服务实用篇笔记(一)

219 阅读4分钟

1 服务拆分及远程调用

1.1 服务拆分

1.1.1 服务拆分注意事项

  • 单一职责:不同微服务,不要重复开发相同业务
  • 数据独立:微服务数据独立,不要访问其它微服务的数据库
  • 面向服务:微服务可以将自己的业务暴露为接口,供其他微服务调用

image.png

1.1.2 案例:根据订单id查询订单功能

不同服务不同端口,使用远程调用

image.png

1.2 远程调用

1.2.1 代码实现

image.png

  1. 注册RestTemplate,在order-service的OrderApplication中注册并注入Spring容器

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTemplate并注入Spring容器
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
   }
  1. 服务远程调用RestTemplate,修改order-service的OrderService的queryOrderById方法 restTemplate.getfor Object:远程调用

image.png

1.2.2 消费者与提供者

  • 服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)

  • 服务消费者:一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)

  • 服务调用关系:提供者与消费者角色其实是相对的,一个服务可以同时是服务提供者和服务消费者

2 Eureka注册中心

2.1 简介

服务调用出现的问题

  • 服务消费者该如何获取服务提供者的地址信息
  • 如果有多个服务提供者,消费者该如何选择
  • 消费者如何得知服务提供者的健康状态

Eureka的作用

image.png

image.png

image.png

2.2 Eureka注册

2.2.1 搭建EurekaServer

需要创建新的微服务(模块),EureKaServer也是一个微服务,也需要配置将自己注册到注册中心

image.png

2.2.2 注册user-service、order-service

image.png

image.png

image.png

image.png

2.3 服务发现

image.png

服务消费者添加负载均衡注解

3 Ribbon负载均衡

3.1 负载均衡流程

image.png

image.png

3.2 负载均衡策略

添加@LoadBalanced注解表示由Ribbon拦截

image.png

image.png

3.2.1 负载均衡自定义rule

image.png

  • 第一种方法:全局有效,order拉去任意服务都是随机的
  • 第二种方法:指定拉取某个服务随机

3.2.2 饥饿加载

image.png

4 nacos注册中心

4.1 快速入门

image.png

image.png

4.2 nacos服务分级存储模型

  • 一级是服务,例如userservice
  • 二级是集群,例如杭州上海
  • 三级是实例,例如杭州机房的某台部署了userservice的服务器

image.png

4.2.1 服务跨集群调用问题

  • 服务调用尽可能选择本地集群的服务,跨集群调用延迟高
  • 本地集群不可访问,再去访问其他集群

image.png

4.2.2 代码实现配置集群

模拟多个实例:修改完后放在一个集群的启动,在修改再启动为另一个集群

image.png

4.2.3 根据集群负载均衡

  • nacos默认轮询机制,不按照本地集群优先

修改user-service集群属性配置,达到下面的效果

image.png

image.png

image.png

4.2.4 根据权重负载均衡

image.png

image.png

4.3 环境隔离-namespace

image.png

image.png

image.png

image.png

image.png

image.png

5 Nacos配置管理

5.1 统一配置管理:配置更改热更新

image.png 在Nacos中添加配置信息

image.png 配置内容填写那些需要随时变化的热更新的配置信息

image.png

image.png

5.1.1 代码实现

image.png

image.png

5.2 配置自动刷新

Nacos中的配置文件变更后。微服务无需重启就可以感知

5.2.1 方式一:@RefreshScope

image.png

5.2.2 方式二:@ConfigurationProperties

image.png

5.3 多环境配置共享

image.png

image.png

5.4 多服务共享配置

5.4.1 方式一

image.png

5.4.2 方式二

image.png

image.png

5.5 Nacos集群搭建

image.png

image.png

6 http客户端Feign

6.1 介绍

6.1.1 RestTemplate方式调用存在的问题

image.png

6.1.2 Feign客户端定义和使用

image.png

image.png

image.png

6.2 自定义Feign的配置

image.png

6.2.1 配置Feign日志

image.png

image.png

6.3 Feign的性能优化

image.png

image.png

6.4 Feign的最佳实践

image.png

image.png

7 统一网关Gateway

image.png

7.1 介绍

网关功能:

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 请求限流

网关的技术实现

  • gateway
  • zuul

Zuul是基于Servlet的实现,属于是阻塞式编程。而SpringCloudGateway则是基于Spring5提供的WebFlux,属于响应式编程的实现,具备更好的技能

7.2 统一网关Gateway

7.2.1 搭建网关服务

image.png

image.png

image.png

7.2.2 路由断言工厂Route Predicate Factory

image.png

image.png

image.png

7.3 路由过滤器GatewayFilter

image.png

image.png

7.3.1 案例

image.png

7.3.2 默认过滤器

image.png

7.4 全局过滤器GlobalFilter

image.png

7.4.1 定义全局过滤器,拦截并判断用户身份

image.png

image.png

7.5 过滤器执行顺序

image.png

image.png

7.6 跨域

image.png

image.png

7.7 限流过滤器

image.png

image.png

image.png

image.png

image.png