Nacos
spring:
cloud:
nacos:
#nacos中注册发现的功能
discovery:
#填写nacos的服务端地址
server-addr: localhost:8848
#当前启动进程是永久实例还是临时实力 true 表示临时实力 false表示永久实例
#true是默认值
ephemeral: true
#nacos实例的ip地址
ip: 127.0.0.1
#命名空间
namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
#分组
group: 1.0
#心跳检测的间隔时间
heart-beat-interval: 5
#超时心跳删除时间
ip-delete-timeout: 20
spring:
profiles:
#开启不同环境配置
active: dev
#bootstrap定义不同环境,在同一个文件bootstrap.yaml
#---区分,每个环境中定义名称
---
spring:
config:
activate:
on-profile: dev
#告诉bootstrap 远程配置中心nacos地址 和我们要读取的配置文件(先读默认的)
application:
#所有的application.name都是服务名称
name: xxx-xxxx
cloud:
nacos:
config:
#必须配置的值
server-addr: localhost:8848
#文件类型 后缀 默认是properties txt json yaml xml html
file-extension: yaml
#前缀,默认是服务名称,不想使用默认值,可以自定义
#prefix: sdlaslkdfjsdlj
#多环境运行的 namespace 命名空间的id
namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
#持续发布中,保证灰度发布 分组
group: 1.0
#是否支持刷新.远程配置一旦修改,本地进程内存数据是否刷新,如果刷新,true,不需要重启
#false 重启,内存才变动 默认也是true
refresh-enabled: true
#读取指定的文件
shared-configs:
- data-id: redis.yaml
group: 1.0
refresh-enable: true
- data-id: datasource.yaml
group: 1.0
refresh-enable: true
- data-id: es.yaml
group: 1.0
refresh-enable: true
dubbo
调用业务选择和dubbo角色
spring:
application:
name: xxx-xxxx
dubbo:
application:
#dubbo客户端 在nacos注册,携带的服务名称
name: ${spring.application.name}
protocol:
#port表示dubbo底层通信协议使用的端口 -1 自增的端口号
#20880开始,查看当前服务,哪个没有被占用
port: -1
name: dubbo
registry:
#告诉dubbo注册中心类型和地址
address: nacos://localhost:8848
#禁止dubbo在nacos中自动创建一些无效的配置文件
use-as-config-center: false
use-as-metadata-center: false
cloud:
#明确当前服务,订阅的其他服务,如果需要调用其他服务,用多个服务拼接,
#不配置这个属性,会导致当前的dubbo客户端默认订阅nacos所有服务
# 不给值,订阅空
subscribed-services:
consumer:
#如果当前程序 有consumer的角色,不会在启动时检查provider是否存在
#如果当前程序不是consumer,这个配置没有任何作用
check: false
注解:
-
@EnableDubbo:用于启用Dubbo服务。被标注的类通常是一个配置类,用于初始化Dubbo的核心组件,如注册中心、协议等。
-
@DubboService:用于标注服务提供者接口的实现类。被标注的类会自动注册为Dubbo服务,并暴露给服务消费者。
-
@DubboReference:用于标注服务消费者接口的成员变量。被标注的成员变量会被Dubbo框架自动注入一个指定接口的代理对象,用于进行远程调用。
Gateway
spring:
application:
name: xxx-xxxx
#由于gateway底层不是tomcat 和mvc有冲突的
main:
web-application-type: reactive
#配置cloud gateway 逻辑,实现转发需求
cloud:
gateway:
#路由转发配置 路由逻辑可以配置多个
routes:
# 一个- 是一个路由信息,配置一个路由的对象属性
# id表示唯一的标识
- id: stock-redirect
# 目的地请求地址
uri: http://127.0.0.1:20003
# 断言,assert,判断进入网关的请求,哪些符合这个路由匹配
# 所有请求都到网关转发给stock
# /** 匹配所有请求 ** 代表多级路径,且每一级都可以是任意长度字符串
# ant匹配规范 * ? **
predicates:
- Path=/**
nacos整合网关案例
spring:
application:
name: xxx-xxxx
#由于gateway底层不是tomcat 和mvc有冲突的
main:
web-application-type: reactive
#配置cloud gateway 逻辑,实现转发需求
cloud:
nacos:
#nacos中注册发现的功能
discovery:
#填写nacos的服务端地址
server-addr: localhost:8848
#命名空间
namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
#分组
group: 1.0
gateway:
#路由转发配置 路由逻辑可以配置多个
routes:
# 一个- 是一个路由信息,配置一个路由的对象属性
# id表示唯一的标识
- id: stock-redirect
# 负载均衡的访问服务名称csmall-stock
uri: lb://csmall-stock
# 断言,assert,判断进入网关的请求,哪些符合这个路由匹配
# 所有请求都到网关转发给stock
# /** 匹配所有请求 ** 代表多级路径,且每一级都可以是任意长度字符串
# ant匹配规范 * ? **
predicates:
- Path=/**
- Host=localhost:8099
在网关中,我们可以通过上述对路由转发的学习,实现微服务集群的各种服务的路由匹配routes的配置.Gateway中,提供了一种动态路由配置服务的方式.根据服务名称自动拼接url地址,实现路由功能,要想使用,需要满足一定访问条件.
spring:
application:
name: xxx-xxxx
#由于gateway底层不是tomcat 和mvc有冲突的
main:
web-application-type: reactive
#配置cloud gateway 逻辑,实现转发需求
cloud:
nacos:
#nacos中注册发现的功能
discovery:
#填写nacos的服务端地址
server-addr: localhost:8848
#命名空间
namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
#分组
group: 1.0
gateway:
#动态路由
discovery:
locator:
enabled: true
routes:
- id: stock
uri: lb://csmall-stock
predicates:
- Path=/csmall-stock/**
filters:
#会在转发时,去掉拼接的1级路径
- StrimFilter = 1
- id: cart
uri: lb://csmall-cart
predicates:
- Path=/csmall-cart/**
filters:
#会在转发时,去掉拼接的1级路径
- StrimFilter = 1
过滤器
网关除了路由匹配功能意外,为了微服务集群访问安全考虑,还需要实现管理入口流量,身份校验的问题(解析JWT).
网关提供了过滤器功能.
网关Gateway跨域的问题
Path Host断言都可以实现多服务网关入口.
Path做断言没有跨域问题的(路径断言 域名和端口统一的)
跨域: 只要资源访问请求原始域和目标域其中域名和端口有一个不一样,就叫做跨域.
spring:
application:
name: xxx-xxxx
#由于gateway底层不是tomcat 和mvc有冲突的
main:
web-application-type: reactive
#配置cloud gateway 逻辑,实现转发需求
cloud:
nacos:
#nacos中注册发现的功能
discovery:
#填写nacos的服务端地址
server-addr: localhost:8848
#命名空间
namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
#分组
group: 1.0
gateway:
#动态路由
discovery:
locator:
enabled: true
globalcors:
#解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
cors-configurations:
#对那些路径请求,通过gateway网关管理跨域 /**
'[/**]':
#允许的跨域原地址 匹配范围
allowedOriginPatterns: "*"
#- "http://**.csmall.com"
#- "http://*.baidu.com"
#允许跨域原地址 具体的值
#allowedOrigins: "http://www.csmall.com"
allowedHeaders: "*"
#- "Accept"
#- "Cache-Enabled"
allowedMethods: "*"
#- "POST"
#- "GET"
#- "PUT"
#- "DELETE"
#- "OPTIONS"
#是否允许携带凭证 比如jwt token等
allowCredentials: true
#预检测请求Options成功之后,有效时长,超过时长,再次预检测
maxAge: 7200
sentinel
熔断降级
限流降级
sentinel重要的核心概念
spring:
cloud:
sentinel:
datasource:
#定义一个数据源的名称
key1:
nacos:
#数据源具体属性 nacos address namespace group-id 文件名称
server-addr: localhost:8848
#public DEFAULT_GROUP
data-id: flowRules.json
data-type: json
#如果sentinel版本高于1.7 必须配置nacos用户名密码
username: nacos
password: nacos
限流的规则
-
resource: 定义当前规则绑定限制的资源id 名称
-
count: 限流的阈值,grade=1 表示qps上限,grade=0 表示并发上限
-
grade: 1 qps类型的限流 0 并发类型限流
-
strategy: 限流策略.以哪种方案和逻辑来限流 0直接 1关联 2链路
-
limitApp: 流控针对的调用来源,默认default不区分调用来源,配合strategy=1的是后和2的时候使用.
-
controlBehavior: 限流效果(0直接拒绝,1Warm up,2排队)
[
{
"resource":"addOrder",
"count":"1",
"grade":"1",
"strategy":"1",
"limitApp":"queryOrder",
"controlBehavior":"0"
}
]
常用注解:
-
@SentinelResource:用于标注需要进行流量控制和熔断的方法。被标注的方法会被Sentinel框架自动保护,可以配置流控规则和熔断规则对方法的访问进行限制。
-
@SentinelParam:用于标注方法参数,指示此参数应该被用于定义流量控制规则。被标注的参数会被用作限流规则的条件。
-
@SentinelTransportFilter:用于标注需要进行流控的方法。可以通过在方法上标注该注解,并配置相应的流控规则,实现对方法的访问进行限制。
-
@SentinelAuthority:用于标注需要进行授权的方法。被标注的方法会被Sentinel框架自动进行权限校验,只有通过授权的用户才能调用该方法。
-
@SentinelFallback:用于标注熔断方法。被标注的方法会在被保护方法出现异常或触发熔断时被调用,用于提供降级的逻辑处理。