当前位置: 首页 > news >正文

【微服务】Nacos(配置中心)

文章目录

    • 1.AP和CP
        • 1.基本介绍
        • 2.说明
    • 2.Nacos配置中心实例
        • 1.架构图
        • 2.在Nacos Server加入配置
          • 1.配置列表,加号
          • 2.加入配置
          • 3.点击发布,然后返回
          • 4.还可以编辑
        • 3. 创建 Nacos 配置客户端模块获取配置中心信息
          • 1.创建子模块 e-commerce-nacos-config-client5000
          • 2.pom.xml引入配置中心依赖
          • 3.application.yml 指定当前为开发环境(对应于配置中心文件的-dev)
          • 4.bootstrap.yml(这个文件会在application.yml之前读取,也可作为配置文件) 配置服务注册和配置中心
          • 5.编写启动类
          • 6.src/main/java/com/sun/springcloud/controller/NacosConfigController.java 编写业务类获取配置中心信息
          • 7.测试
            • 1.首先确保Nacos启动
            • 2.启动这个模块,浏览器访问http://localhost:8848/nacos/查看注册信息
            • 3.浏览器访问http://localhost:5000/nacos/config/mes查看结果
        • 4.Nacos配置中心细节
          • 1.关于@Value注解引用的包
          • 2.配置中心的文件不可以是yml,只能是yaml
          • 3.在项目初始化时,如果无法从配置中心获取数据,项目是启动不了的
          • 4.bootstrap.yml 的优先级高于 application.yml
          • 5.application name必须与配置中心的配置文件的名字对应(-dev之前)
          • 6.@RefreshScope是springcloud的原生注解,可以实现配置信息自动刷新
            • 演示
    • 3.Nacos配置隔离
        • 1.命名空间 + 分组 + Data ID管理配置
          • 命名空间:按照环境隔离配置
          • 分组:按照业务类型来划分
          • Data ID:按照服务名,环境,文件后缀来配置
        • 2.应用实例
          • 1.需求分析
          • 2.设置命名空间(namespace)
            • 1.新建命名空间
            • 2.填写空间名和描述
            • 3.自动生成命名空间id
          • 3.分组设置(group)和 文件命名(data id)
            • 1.新建配置
            • 2.进行配置
            • 3.bootstrap.yml 配置服务注册以及配置中心
            • 4.application.yml 指定dev环境(对应于data id的 -dev)也可以在启动的时候通过命令指定开发环境
            • 5.pom.xml 引入配置中心和服务发现的依赖
            • 6.编写启动类 开启服务发现
            • 7.编写业务类,读取配置文件@RefreshScope实现配置信息自动刷新
            • 8.启动测试
        • 3.流程说明
          • 1.首先创建一个模块
          • 2.为这个模块在配置中心指定一个配置文件,按照命名空间 + 分组 + Data ID管理配置
          • 3.编写模块的bootstrap.yml 配置端口、服务注册以及配置中心
          • 4.编写application.yml 指定环境
          • 5.编写启动类,开启服务发现并执行测试
        • 4.关于使用Nacos配置中心,配置文件的读取顺序(后面的会覆盖前面的)

1.AP和CP

1.基本介绍

image-20240327202049559

2.说明

image-20240327202206270

2.Nacos配置中心实例

1.架构图

image-20240327203108046

2.在Nacos Server加入配置
1.配置列表,加号

image-20240327203343601

2.加入配置
  • 这里的配置文件名需要跟application name一致(-dev前面的部分)

image-20240327203754183

3.点击发布,然后返回

image-20240327203906059

4.还可以编辑

image-20240327203924073

image-20240327203931321

3. 创建 Nacos 配置客户端模块获取配置中心信息
1.创建子模块 e-commerce-nacos-config-client5000

image-20240327204123547

2.pom.xml引入配置中心依赖
    <dependencies><!-- 引入nacos的配置中心依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--引入nacos的服务发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-discovery</artifactId></dependency><!-- springboot web starter 用来监听端口--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 如果在子工程/模块指定了 version,则以指定为准 --></dependency><!--1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息等2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. --><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 公共模块的jar包 --><dependency><groupId>org.example</groupId><artifactId>e_commerce_center-common-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
3.application.yml 指定当前为开发环境(对应于配置中心文件的-dev)
spring:profiles:active: dev # 指定当前环境为开发环境,对应于配置中心文件的-dev
4.bootstrap.yml(这个文件会在application.yml之前读取,也可作为配置文件) 配置服务注册和配置中心
  • 关于找到配置中心的文件的解释
    • localhost:8848可以找到配置中心
    • e-commerce-nacos-config-client + -dev可以找到配置文件的名字
    • yaml可以找到配置文件的后缀
server:port: 5000 # 配置服务端口spring:application:name: e-commerce-nacos-config-client # 配置服务的名称,这里的name需要参考nacos配置中心里配置文件的名字cloud:nacos:# encos服务注册discovery:server-addr: localhost:8848# 配置中心config:server-addr: localhost:8848 # 查找到配置中心file-extension: yaml # 文件后缀
5.编写启动类
package com.sun.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** Description:** @Author sun* @Create 2024/3/27 21:21* @Version 1.0*/
@SpringBootApplication
@EnableDiscoveryClient // 开启nacos服务发现 
public class NacosConfigClientApplication5000 {public static void main(String[] args) {SpringApplication.run(NacosConfigClientApplication5000.class, args);}
}
6.src/main/java/com/sun/springcloud/controller/NacosConfigController.java 编写业务类获取配置中心信息
package com.sun.springcloud.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** Description: 获取配置中心的数据** @Author sun* @Create 2024/3/27 21:27* @Version 1.0*/
@RestController
@Slf4j
public class NacosConfigController {/* 使用Value注解可以获取配置中心中对应于这个微服务集群的配置文件的信息,注意:如果获取不到信息,则微服务直接启动不了 */@Value("${config.ip}")private String ip;@Value("${config.name}")private String name;@GetMapping("/nacos/config/mes")public String getConfigIpAndName() {return "ip:" + ip + " name:" + name;}
}
7.测试
1.首先确保Nacos启动
2.启动这个模块,浏览器访问http://localhost:8848/nacos/查看注册信息

image-20240327214404987

3.浏览器访问http://localhost:5000/nacos/config/mes查看结果

image-20240327214516431

4.Nacos配置中心细节
1.关于@Value注解引用的包

image-20240327214653811

2.配置中心的文件不可以是yml,只能是yaml
3.在项目初始化时,如果无法从配置中心获取数据,项目是启动不了的
4.bootstrap.yml 的优先级高于 application.yml
5.application name必须与配置中心的配置文件的名字对应(-dev之前)
6.@RefreshScope是springcloud的原生注解,可以实现配置信息自动刷新

image-20240327215903215

演示

image-20240327220026347

image-20240327220058148

image-20240327220123558

3.Nacos配置隔离

1.命名空间 + 分组 + Data ID管理配置
命名空间:按照环境隔离配置
  • development
  • testing
  • production
分组:按照业务类型来划分
  • 用户模块
  • 订单模块
Data ID:按照服务名,环境,文件后缀来配置
  • 格式:[application-name]-[environment].[file-extension]
  • 示例:
    • user-service-dev.yml
    • order-service-prod.yml
2.应用实例
1.需求分析

要为开发环境用户模块的一个服务指定配置文件

2.设置命名空间(namespace)
1.新建命名空间

image-20240328113752771

2.填写空间名和描述

image-20240328114046118

3.自动生成命名空间id

image-20240328114106230

3.分组设置(group)和 文件命名(data id)
1.新建配置

image-20240328125946056

2.进行配置

image-20240328125858970

3.bootstrap.yml 配置服务注册以及配置中心

image-20240328130224577

server:port: 5000 # 配置服务端口spring:application:name: e-commerce-nacos-config-client # 配置服务的名称,这里的name需要参考nacos配置中心里配置文件的名字cloud:nacos:# nacos服务注册discovery:server-addr: localhost:8848 # nacos服务注册中心地址# 配置中心config:server-addr: localhost:8848 # 配置中心地址file-extension: yaml # 指定配置文件的格式group: user # 指定配置文件的分组namespace: 122114f8-b2eb-480a-9ef3-1f8d30446736 # 指定命名空间id
4.application.yml 指定dev环境(对应于data id的 -dev)也可以在启动的时候通过命令指定开发环境
spring:profiles:active: dev # 指定当前环境为开发环境
5.pom.xml 引入配置中心和服务发现的依赖
    <dependencies><!-- 引入nacos的配置中心依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--引入nacos的服务发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-discovery</artifactId></dependency><!-- springboot web starter 用来监听端口--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 如果在子工程/模块指定了 version,则以指定为准 --></dependency><!--1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息等2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. --><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 公共模块的jar包 --><dependency><groupId>org.example</groupId><artifactId>e_commerce_center-common-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
6.编写启动类 开启服务发现
package com.sun.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** Description:** @Author sun* @Create 2024/3/27 21:21* @Version 1.0*/
@SpringBootApplication
@EnableDiscoveryClient // 开启nacos服务发现
public class NacosConfigClientApplication5000 {public static void main(String[] args) {SpringApplication.run(NacosConfigClientApplication5000.class, args);}
}
7.编写业务类,读取配置文件@RefreshScope实现配置信息自动刷新
package com.sun.springcloud.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** Description: 获取配置中心的数据** @Author sun* @Create 2024/3/27 21:27* @Version 1.0*/
@RestController
@RefreshScope // 实现配置信息自动刷新
public class NacosConfigController {/* 使用Value注解可以获取配置中心中对应于这个微服务集群的配置文件的信息,注意:如果获取不到信息,则微服务直接启动不了 */@Value("${config.ip}")private String ip;@Value("${config.name}")private String name;@GetMapping("/nacos/config/mes")public String getConfigIpAndName() {return "ip:" + ip + " name:" + name;}
}
8.启动测试

image-20240328131812655

image-20240328131818457

3.流程说明
1.首先创建一个模块
2.为这个模块在配置中心指定一个配置文件,按照命名空间 + 分组 + Data ID管理配置
3.编写模块的bootstrap.yml 配置端口、服务注册以及配置中心
4.编写application.yml 指定环境
5.编写启动类,开启服务发现并执行测试
4.关于使用Nacos配置中心,配置文件的读取顺序(后面的会覆盖前面的)
  • bootstrap.yml
  • application.yml
  • application-prod.yml(还可以是-test,-dev)
  • 配置中心文件
  • 启动时命令行指定配置

相关文章:

【微服务】Nacos(配置中心)

文章目录 1.AP和CP1.基本介绍2.说明 2.Nacos配置中心实例1.架构图2.在Nacos Server加入配置1.配置列表&#xff0c;加号2.加入配置3.点击发布&#xff0c;然后返回4.还可以编辑 3. 创建 Nacos 配置客户端模块获取配置中心信息1.创建子模块 e-commerce-nacos-config-client50002…...

比较AI编程工具Copilot、Tabnine、Codeium和CodeWhisperer

主流的几个AI智能编程代码助手包括Github Copilot、Codeium、Tabnine、Replit Ghostwriter和Amazon CodeWhisperer。 你可能已经尝试过其中的一些&#xff0c;也可能还在不断寻找最适合自己或公司使用的编程助手。但是&#xff0c;这些产品都会使用精选代码示例来实现自我宣传…...

顺应互联网发展大潮流,红河农资招商火爆开启

顺应互联网发展大潮流&#xff0c;红河农资招商火爆开启 进入新世纪&#xff0c;生态农业建设成为了影响和改变农村、农业工作的重要领域。尤其是在互联网的快速发展之下&#xff0c;实现农业结构调整&#xff0c;推动互联网模式的发展&#xff0c;成为了当前生态农业发展的主流…...

网络七层模型之传输层:理解网络通信的架构(四)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

微信小程序实现图片懒加载的4种方案

实现图片懒加载的意义 实现图片懒加载可以提高小程序的性能和用户体验&#xff0c;是微信小程序开发中非常重要的一项优化手段。微信小程序实现图片懒加载的目的主要有以下几点&#xff1a; 提高页面加载速度&#xff1a;图片通常是页面中最耗时的资源&#xff0c;如果一次性…...

各大pdf转word软件都用的哪家的ocr引擎?

国内一般的PDF软件一般都调用某国际PDF原厂的OCR接口&#xff0c;但这家公司是主要做PDF&#xff0c;在OCR方面并不专注&#xff0c;一些不是很复杂的场景还能应付得过来&#xff0c;复杂一点的效果就强差人意了&#xff0c;推荐用金鸣表格文字识别系统&#xff0c;它主要有以下…...

学习没有速成可言

那些声称几天就能让你精通软件的书籍&#xff0c;往往是夸大其词的宣传。学习软件需要时间和实践&#xff0c;没有什么快速的捷径可以让你在短时间内成为专家。 对于速成软件书&#xff0c;我个人持保留态度。它们可能提供一些基础知识和技巧&#xff0c;可以给初学者一个入门…...

快速上手Pytrch爬虫之爬取某应图片壁纸

一、前置知识 1 爬虫简介 网络爬虫&#xff08;又被称作网络蜘蛛、网络机器人&#xff0c;在某些社区中也经常被称为网页追逐者)可以按照指定的规则&#xff08;网络爬虫的算法&#xff09;自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…...

如何在Apache Arrow中定位与解决问题

如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更&#xff0c;出现了一个 crash问题&#xff0c;底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题&#xff0c;在这篇文章中以实际工作中resize导致crash为例&#xff0c;引出如何…...

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…...

怎样去保证 Redis 缓存与数据库双写一致性?

解决方案 那么我们这里列出来所有策略&#xff0c;并且讨论他们优劣性。 先更新数据库&#xff0c;后更新缓存先更新数据库&#xff0c;后删除缓存先更新缓存&#xff0c;后更新数据库先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后更新缓存 这种方法是不推…...

RuoYi-Vue若依框架-新增子模块启动后,前端页面报接口404

如何新建子模块可以参考RuoYi-Vue若依框架-如何新增子模块 我在新增依赖的时候提过版本号的问题&#xff0c;如果不是按照我的博客走的&#xff0c;然后接口报了404&#xff0c;可以选择添加父版本号&#xff0c;官方的参考文档是没写的&#xff0c;但添加了确实能解决这个问题…...

node.js 常见命令

1. npm init: 初始化一个新的Node.js项目&#xff0c;创建一个package.json文件。 2. npm install: 安装项目所需的所有依赖项。 3. npm run: 运行在package.json文件中定义的脚本。 4. node index.js: 运行一个Node.js文件。 5. node -v: 查看当前安装的Node.js版本号。 6. np…...

教育信创,重磅发布!Coremail联合飞腾发布全场景教育信创白皮书

3月28日&#xff0c;Coremail参与编制的《教育行业数字化自主创新 飞腾生态解决方案白皮书》正式发布。白皮书历时一年&#xff0c;由25所代表院校、66位专家&#xff0c;119家生态伙伴共同编写。 本次白皮书围绕教育数字化转型和信创人才培养两大领域&#xff0c;聚焦办公、教…...

滑动窗口_水果成篮_C++

题目&#xff1a; 题目解析&#xff1a; fruits[i]表示第i棵树&#xff0c;这个fruits[i]所表示的数字是果树的种类例如示例1中的[1,2,1]&#xff0c;表示第一棵树 的种类是 1&#xff0c;第二个树的种类是2 第三个树的种类是1随后每一个篮子只能装一种类型的水果&#xff0c;我…...

线程的状态:操作系统层面和JVM层面

在操作系统层面&#xff0c;线程有五种状态 初始状态&#xff1a;线程被创建&#xff0c;操作系统为其分配资源。 可运行状态(就绪状态)&#xff1a;线程被创建完成&#xff0c;进入就绪队列&#xff0c;参与CPU执行权的争夺。或因为一些原因&#xff0c;从阻塞状态唤醒的线程…...

在Isaac-sim中弧度转四元数以及四元数转弧度的问题

问题&#xff1a; 在Isaac-sim中如果采用set_world_pose()和get_world_pose()得到的都是四元数&#xff0c;如何将弧度转四元数&#xff0c;或者将四元数转为弧度是需要解决的一个问题&#xff0c; 这里的弧度是以x轴为0度&#xff0c;y轴为90度&#xff0c;逆时针方向逐渐增大…...

【计算机网络】高级IO模型

高级IO模型 一、 理解 IO二、认识五种高级 IO 模型1. 阻塞 IO2. 非阻塞IO3. 信号驱动 IO4. IO 多路转接5. 异步 IO 三、高级 IO 重要概念1. 阻塞和非阻塞2. 同步通信和异步通信 四、非阻塞 IOfcntl 一、 理解 IO 当我们调用系统接口 write、read 的时候&#xff0c;本质是把数…...

LabVIEW电动汽车直流充电桩监控系统

LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及&#xff0c;充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台&#xff0c;设计了一套电动汽车直流充电桩监控系统&#xff0c;能实时监测充电桩的温度、电压和电流&#xff0c;并进行数…...

前端学习<二>CSS基础——08-CSS属性:定位属性

CSS的定位属性有三种&#xff0c;分别是绝对定位、相对定位、固定定位。 position: absolute; <!-- 绝对定位 -->​position: relative; <!-- 相对定位 -->​position: fixed; <!-- 固定定位 -->​ 下面逐一介绍。 相对定位 相对定位&#xff1a;让…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...