微服务2.0:2022

#博学谷IT学习技术支持#

个人笔记后续会进行内容改进

微服务技术栈:

 

Nacos注册中心;

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

使用:

  1. 引入依赖

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-alibaba-dependencies</artifactId>

    <version>2.2.6.RELEASE</version>

    <type>pom</type>

    <scope>import</scope>

</dependency>

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

  1. 配置application.yml

spring:

  cloud:

    nacos:

      server-addr: localhost:8848

Nacos流程:

 

 

Naocs分级;

spring:

  cloud:

    nacos:

      server-addr: localhost:8848

      discovery:

        cluster-name: HZ # 集群名称

启动多实例的方式:

-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH

Nacos统一集群负载均衡:

userservice:

  ribbon:

NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

Nacos权重配置;

服务器之前的差异可以配置权重比,或者在服务进行升级的时候可以设置权重

Nacos环境隔离:

Nacos提供了namespace来实现环境隔离功能。

- nacos中可以有多个namespace

- namespace下可以有group、service等

- 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

流程:

在ui界面命名空间进行新增,获取命名空间id

在消费者application中配置:

spring:

  cloud:

    nacos:

      server-addr: localhost:8848

      discovery:

        cluster-name: HZ

        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

Nacos和eureka的区别:

- Nacos与eureka的共同点

  - 都支持服务注册和服务拉取

  - 都支持服务提供者心跳方式做健康检测

- Nacos与Eureka的区别

  - Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

  - 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

  - Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

  - Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

Nacos统一配置:

流程:

Ui界面新增配置:

  1. 配置名称{服务名称+生产环境+后缀}
  2. 分组,默认
  3. 配置格式:yaml
  4. 微服务拉取
    1. 引入nacos-config客户端依赖
    2. 配置bootstrap.yml配置naocs地址

applicationname+profiles+file-extension三要素)

spring:

  application:

    name: userservice # 服务名称

  profiles:

    active: dev #开发环境,这里是dev

  cloud:

    nacos:

      server-addr: localhost:8848 # Nacos地址

      config:

        file-extension: yaml # 文件后缀名

    1. 通过@value注解获取

配置热更新:

方式一:在@Value注入的变量所在类上添加注解@RefreshScope

方式二:使用@ConfigurationProperties注解代替@Value注解。

@ConfigurationProperties(prefix = "pattern")

配置共享:

优先级:applicationname+profiles+file-extension  >applicationname+file-extension >本地配置

Feign远程调用:

步骤:

① 引入依赖

② 添加@EnableFeignClients注解

③ 编写FeignClient接口

④ 使用FeignClient中定义的方法代替RestTemplate

Gateway网关:

步骤:

1. 创建项目,引入nacos服务发现和gateway依赖

2. 配置application.yml,包括服务基本信息、nacos地址、路由

路由配置包括:

1. 路由id:路由的唯一标示

2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡

3. 路由断言(predicates):判断路由的规则,

4. 路由过滤器(filters):对请求或响应做处理

Application配置:

server:

  port: 10010 # 网关端口

spring:

  application:

    name: gateway # 服务名称

  cloud:

    nacos:

      server-addr: localhost:8848 # nacos地址

    gateway:

      routes: # 网关路由配置

        - id: user-service # 路由id,自定义,只要唯一即可

          # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址

          uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称

          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件

            - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求

断言工厂:

| **名称**   | **说明**                       | **示例**                                                     

| After      | 是某个时间点后的请求           | -  After=2037-01-20T17:42:47.789-07:00[America/Denver]       |

| Before     | 是某个时间点之前的请求         | -  Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]       |

| Between    | 是某两个时间点之前的请求       | -  Between=2037-01-20T17:42:47.789-07:00[America/Denver],  2037-01-21T17:42:47.789-07:00[America/Denver] |

| Cookie     | 请求必须包含某些cookie         | - Cookie=chocolate, ch.p                                     

| Header     | 请求必须包含某些header         | - Header=X-Request-Id, \d+                                   

| Host       | 请求必须是访问某个host(域名) | -  Host=**.somehost.org,**.anotherhost.org                   

| Method     | 请求方式必须是指定方式         | - Method=GET,POST                                            

| Path       | 请求路径必须符合指定规则       | - Path=/red/{segment},/blue/**                               

| Query      | 请求参数必须包含指定参数       | - Query=name, Jack或者-  Query=name                          

| RemoteAddr | 请求者的ip必须是指定范围       | - RemoteAddr=192.168.1.1/24                                  

| Weight     | 权重处理                       |                                                              

全局过滤器;

实现GlobalFilter

过滤器执行顺序:

请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器:

排序规则:

- 每一个过滤器都必须指定一个int类型的order值,**order值越小,优先级越高,执行顺序越靠前**。

- GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定

- 路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增。

- 当过滤器的order值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter的顺序执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值