Nacos-服务注册,服务发现(二)

Nacos健康检查

两种健康检查机制

Nacos作为注册中⼼, 需要感知服务的健康状态, 才能为服务调⽤⽅提供良好的服务。

Nacos 中提供了两种健康检查机制:

客⼾端主动上报机制:

  • 客⼾端通过⼼跳上报⽅式告知服务端(nacos注册中⼼)健康状态, 默认⼼跳间隔5秒;
  • nacos会在超过15秒未收到⼼跳后将实例设置为不健康状态, 超过30秒将实例删除

服务器端反向探测机制:

  • nacos主动探知客⼾端健康状态, 默认间隔为20秒.
  • 健康检查失败后实例会被标记为不健康, 不会被⽴即删除.

⽐如领导管理员⼯的⼯作

  1. 员⼯主动汇报: 员⼯每天主动汇报⾃⼰⼯作进度
  2. 领导主动问询: 领导每周向员⼯了解⼯作进度

Nacos 中的健康检查机制不能主动设置,健康检查机制是和 Nacos 的服务实例类型强相关的.

Nacos服务实例类型

Nacos的服务实例(注册的节点)分为临时实例和⾮临时实例.

临时实例

临时实例:如果实例宕机超过⼀定时间, 会从服务列表剔除, 默认类型.

⾮临时实例

⾮临时实例:如果实例宕机, 不会从服务列表剔除, 也可以叫永久实例

Nacos对临时实例, 采取的是 客⼾端主动上报机制, 对⾮临时实例, 采取服务器端反向探测机制

配置⼀个服务实例为永久实例

spring:cloud:nacos:discovery:ephemeral: false # 设置为⾮临时实例

重启服务,观察nacos:

停止服务,再次观察nacos:

节点依然不会消失。

常⻅问题

1.Nacos服务实例类型不允许改变

设置服务实例类型, 重新启动Nacos可能会报错

报错信息参考:

Caused by: com.alibaba.nacos.api.exception.NacosException: failed to req 
API:/nacos/v1/ns/instance after all servers([110.41.51.65:10020]) tried: 
caused: errCode: 400, errMsg: Current service DEFAULT_GROUP@@product-service isephemeral service, can't register persistent instance. ;at 
com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.reqApi(Naming
HttpClientProxy.java:410) ~[nacos-client-2.2.1.jar:na]at 
com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.reqApi(Naming
HttpClientProxy.java:351) ~[nacos-client-2.2.1.jar:na]at 
com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.reqApi(Naming
HttpClientProxy.java:346) ~[nacos-client-2.2.1.jar:na]
//.......

原因: Nacos会记录每个服务实例的IP和端⼝号, 当发现IP和端⼝都没有发⽣变化时, Nacos不允许⼀个

服务实例类型发⽣变化, ⽐如从临时实例,变为⾮临时实例, 或者从⾮临时实例, 变成临时实例.

解决办法:

  1. 停掉nacos
  2. 删除nacos ⽬录下 /data/protocol/raft 信息, ⾥⾯会保存应⽤实例的元数据信息

2.服务正常, Nacos健康检查失败

原因和解决办法:

参考:如何解决Nacos持久化实例HTTP/TCP的健康检查不通过问题_微服务引擎(MSE)-阿里云帮助中心

Nacos环境隔离

企业开发中, ⼀个服务会分为开发环境, 测试环境和⽣产环境.

  1. 开发环境:开发⼈员⽤于开发的服务器, 是最基础的环境. ⼀般⽇志级别设置较低, 可能会开启⼀些调试信息.
  2. 测试环境:测试⼈员⽤来进⾏测试的服务器, 是开发环境到⽣产环境的过渡环境.
  3. ⽣产环境:正式提供对外服务的环境, 通常关掉调试信息.

通常情况下, 这⼏个环境是不能互相通信的. Nacos提供了namespace(命名空间)来实现环境的隔离. 不

同的namaspace的服务不可⻅

创建Namespace

默认情况下,所有服务都在同⼀个namespace,名为public

点击左侧命名空间, 就可以对namespace进⾏操作

新增命名空间

配置namespace

namespace创建完成后, 对服务进⾏配置

配置项Key默认值说明
命名空间spring.cloud.nacos.discovery.namespace常⽤场景之⼀是不同环境的注册的区分隔离,
例如开发测试环境和⽣产环境的资源(如配置、服务)隔离等。

修改order-service的命名空间

spring:cloud:nacos:discovery:namespace: 8078d722-567c-4e27-9ff1-a42d6101a546  #(为命名空间ID)

测试远程调⽤

1. 启动服务, 观察Nacos控制台

public 命名空间下只有product-service服务(order-service 那个不用管,之前设置的是非临时实例,所以还在,但它的健康检查是为false,就不用管它)

order-service在dev命名空间下

2.访问接⼝, 测试远程调⽤

发现服务报错

java.lang.IllegalStateException: No instances available for product-serviceat org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.execute(BlockingLoadBalancerClient.java:78) ~[spring-cloud-loadbalancer-4.0.3.jar:4.0.3]at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:56) ~[spring-cloud-commons-4.0.3.jar:4.0.3]at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:87) ~[spring-web-6.0.14.jar:6.0.14]at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:71) ~[spring-web-6.0.14.jar:6.0.14]at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-6.0.14.jar:6.0.14]at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) ~[spring-web-6.0.14.jar:6.0.14]at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:862) ~[spring-web-6.0.14.jar:6.0.14]at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:764) ~[spring-web-6.0.14.jar:6.0.14]at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:378) ~[spring-web-6.0.14.jar:6.0.14]at com.reggie.order.service.OrderService.selectOrderById(OrderService.java:27) ~[classes/:na]at com.reggie.order.controller.OrderController.getOrderById(OrderController.java:19) ~[classes/:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]........

3. 修改product-service的其中⼀个实例, 命名空间改为dev

spring:cloud:nacos:discovery:namespace: 8078d722-567c-4e27-9ff1-a42d6101a546  #(为命名空间ID)

4.启动服务

观察Nacos控制台

再次访问接⼝ 127.0.0.1:8080/order/1 , 发现远程调⽤成功

Nacos配置中⼼

除了注册中⼼和负载均衡之外, Nacos还是⼀个配置中⼼, 具备配置管理的功能.

Namespace 的常⽤场景之⼀是不同环境的配置区分隔离. 例如开发测试环境和⽣产环境的配置隔离.

为什么需要配置中⼼

当前项⽬的配置都在代码中, 会存在以下问题:

  1. 配置⽂件修改时, 服务需要重新部署. 微服务架构中, ⼀个服务可能有成百个实例, 挨个部署⽐较⿇

    烦, 且容易出错.

  2. 多⼈开发时, 配置⽂件可能需要经常修改, 使⽤同⼀个配置⽂件容易冲突.

配置中⼼就是对这些配置项进⾏统⼀管理. 通过配置中⼼, 可以集中查看, 修改和删除配置, ⽆需再逐个

修改配置⽂件. 提⾼效率的同时, 也降低了出错的⻛险.

  1. 服务启动时, 从配置中⼼读取配置项的内容, 进⾏初始化.
  2. 配置项修改时, 通知微服务, 实现配置的更新加载.

快速上⼿

通过以下操作, 我们先来感受下Nacos 配置中⼼的使⽤

参考⽂档:Nacos 融合 Spring Cloud,成为注册配置中心 | Nacos 官网

添加配置

在Nacos控制台添加配置项

<aside> 💡

注意: 配置管理的命名空间和服务列表的命名空间是隔离的, 两个是分别设置的. 默认是public,也就是服务管理命名空间配置 ≠ 配置管理的命名空间 ???没懂

</aside>

新建配置项

说明:

  1. Data ID 设置为项⽬名称
  2. 配置内容的数据格式, ⽬前只⽀持 properties 和 yaml 类型
  3. 设置配置内容

获取配置

  1. 引入 nacos config 依赖
        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
  1. 配置bootstrap.properties

微服务启动前, 需要先获取nacos中配置, 并与application.yml配置合并. 在微服务运⾏之前, Nacos要求 必须使⽤ bootstrap.properties 配置⽂件来配置Nacos Server 地址

spring:application:name: product-servicecloud:nacos:config:server-addr: 127.0.0.1:8848
  • spring.application.name 需要和nacos配置管理的Data ID⼀致
  • spring.cloud.nacos.config.server-addr 为Nacos Server的地址

<aside> 💡

配置中⼼和注册中⼼的配置是隔离的 Nacos 配置中⼼: spring.cloud.nacos.config.server-addr Nacos 注册中⼼: spring.cloud.nacos.discovery.server-addr

</aside>

  1. 编写程序

    @RefreshScope
    @RestController
    public class NacosConteoller {@Value("${nacos.test}")private String nacosConfig;@RequestMapping("/getConfig")public String getConfig(){return "从nacos获取配置项nacos.config:" + nacosConfig;}
    }
    
  • @Value 读取配置
  • @RefreshScope 配置进⾏热更新
  1. 测试

访问接口:127.0.0.1:9090/getConfig

在Nacos控制台修改 nacos.config

再次访问接口:

常⻅问题

  1. 读取不到配置项

    可能原因:

    1. 配置错误: 检查配置Data ID, 配置格式, 配置空间等
    2. 未引⼊依赖
  2. No spring.config.import property has been defined

    启动报错⽇志:

    ***************************
    APPLICATION FAILED TO START
    ***************************
    Description:
    No spring.config.import property has been defined
    Action:
    Add a spring.config.import=nacos: property to your configuration.If configuration is not required add 
    spring.config.import=optional:nacos: instead.To disable this check, set spring.cloud.nacos.config.importcheck.enabled=false.
    

    原因: bootstrap.properties 是系统级的资源配置⽂件, ⽤于程序执⾏更加早期配置信息读

    取. 但是SpringCloud 2020.* 之后的版本把bootstrap禁⽤了, 导致在读取⽂件的时候读取不到⽽报

    错, 所以需要重新导⼊bootstrap 包进来就可以了

  3. Nacos Server地址配置错误

    报错信息如下:

    2023-12-28T17:12:53.070+08:00 ERROR 14356 --- [t.remote.worker] 
    c.a.n.c.remote.client.grpc.GrpcClient : Server check fail, please check 
    server 127.0.0.1 ,port 11020 is available , error ={}
    java.util.concurrent.ExecutionException: 
    com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io
    exceptionat 
    com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.ge
    tDoneValue(AbstractFuture.java:566) ~[nacos-client-2.2.1.jar:na]at 
    com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.ge
    t(AbstractFuture.java:445) ~[nacos-client-2.2.1.jar:na]
    // ...Caused by: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException:
    UNAVAILABLE: io exceptionat 
    com.alibaba.nacos.shaded.io.grpc.Status.asRuntimeException(Status.java:539) 
    ~[nacos-client-2.2.1.jar:na]at 
    com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClos
    e(ClientCalls.java:544) ~[nacos-client-2.2.1.jar:na]at 
    com.alibaba.nacos.shaded.io.grpc.internal.DelayedClientCall$DelayedListener$
    3.run(DelayedClientCall.java:471) ~[nacos-client-2.2.1.jar:na]// ...
    Caused by: 
    com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChann
    el$AnnotatedConnectException: Connection refused: no further information: 
    /127.0.0.1:11020
    Caused by: java.net.ConnectException: Connection refused: no further
    informationat java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]at 
    java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:
    946) ~[na:na]
    

配置中⼼详解

设置命名空间

Nacos配置管理的命名空间和服务列表的命名空间是分别设置的. 默认是public

Nacos命名空间配置依然在bootstrap.yml中进⾏配置

spring:cloud:nacos:config:server-addr: 127.0.0.1:8848namespace: 8078d722-567c-4e27-9ff1-a42d6101a546   #配置中心的命名空间

如果设置命名空间后, 项⽬启动时, 会从该命名空间下找对应的配置项:

再次访问接口:127.0.0.1:9090/getConfig

Data Id

Data Id 格式介绍

在 Nacos Spring Cloud 中, dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值, 也可以通过配置项spring.cloud.nacos.config.prefix 来配置.
  • spring.profiles.active 即为当前环境对应的 profile. 当 spring.profiles.active为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${fileextension}
  • file-exetension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。⽬前只⽀持 properties和 yaml 类型. 默认为properties.

微服务启动时, 会从Nacos读取多个配置⽂件:

  1. ${prefix}-${spring.profiles.active}.${file-extension} 如: product-service-dev.properties
  2. ${prefix}.${file-extension} , 如: product-service.properties
  3. ${prefix} 如product-service

<aside> 💡

${spring.application.name}, ${spring.profiles.active} 等通过配置⽂件来指定时, 必须放在 bootstrap.properties ⽂件中

</aside>

三个⽂件的优先级为: product-service-dev.properties > product-service.properties > productservice

观察⽇志

在bootstrap.yml中添加 spring.profiles.active 值

spring:profiles:active: dev
    #pom.xml<profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles>

启动服务, 观察⽇志

2023-12-28T18:48:08.614+08:00 INFO 36672 --- [ main] 
c.a.n.client.config.impl.ClientWorker : [fixed-51152a13-7911-49e3-bbdc-
16fd5670a257-110.41.51.65_10020] [subscribe] product-servicedev.properties+DEFAULT_GROUP+51152a13-7911-49e3-bbdc-16fd5670a257
2023-12-28T18:48:08.624+08:00 INFO 36672 --- [ main] 
c.a.nacos.client.config.impl.CacheData : [fixed-51152a13-7911-49e3-bbdc-
16fd5670a257-110.41.51.65_10020] [**add-listener**] ok, tenant=51152a13-7911-49e3-
bbdc-16fd5670a257, **dataId=product-service-dev.properties**, group=DEFAULT_GROUP, 
cnt=1
2023-12-28T18:48:08.624+08:00 INFO 36672 --- [ main] 
c.a.c.n.refresh.NacosContextRefresher : [Nacos Config] Listening config: 
dataId=product-service-dev.properties, group=DEFAULT_GROUP
2023-12-28T18:48:08.625+08:00 INFO 36672 --- [ main] 
c.a.n.client.config.impl.ClientWorker : [fixed-51152a13-7911-49e3-bbdc-
16fd5670a257-110.41.51.65_10020] [subscribe] productservice.properties+DEFAULT_GROUP+51152a13-7911-49e3-bbdc-16fd5670a257
2023-12-28T18:48:08.625+08:00 INFO 36672 --- [ main] 
c.a.nacos.client.config.impl.CacheData : [fixed-51152a13-7911-49e3-bbdc-
16fd5670a257-110.41.51.65_10020] [**add-listener**] ok, tenant=51152a13-7911-49e3-
bbdc-16fd5670a257, **dataId=product-service.properties**, group=DEFAULT_GROUP, 
cnt=1
2023-12-28T18:48:08.625+08:00 INFO 36672 --- [ main] 
c.a.c.n.refresh.NacosContextRefresher : [Nacos Config] Listening config: 
dataId=product-service.properties, group=DEFAULT_GROUP
2023-12-28T18:48:08.626+08:00 INFO 36672 --- [ main] 
c.a.n.client.config.impl.ClientWorker : [fixed-51152a13-7911-49e3-bbdc-
16fd5670a257-110.41.51.65_10020] [subscribe] productservice+DEFAULT_GROUP+51152a13-7911-49e3-bbdc-16fd5670a257
2023-12-28T18:48:08.627+08:00 INFO 36672 --- [ main] 
c.a.nacos.client.config.impl.CacheData : [fixed-51152a13-7911-49e3-bbdc-
16fd5670a257-110.41.51.65_10020] [**add-listener**] ok, tenant=51152a13-7911-49e3-
bbdc-16fd5670a257, **dataId=product-service**, group=DEFAULT_GROUP, cnt=1
2023-12-28T18:48:08.627+08:00 INFO 36672 --- [ main] 
c.a.c.n.refresh.NacosContextRefresher : [Nacos Config] Listening config: 
dataId=product-service, group=DEFAULT_GROUP

测试

bootstrap.yml配置如下:

spring:application:name: product-serviceprofiles:active: @profile.name@cloud:nacos:config:server-addr: 127.0.0.1:8848namespace: 8078d722-567c-4e27-9ff1-a42d6101a546   #配置中心的命名空间

配置项如下:

访问接⼝: http://127.0.0.1:9090/getConfig

服务获取到了 product-service-dev.properties 的值

删除 product-service-dev.properties 配置, 再次访问接⼝

<aside> 💡

注意:

  1. bootstrap.yml 设置的配置格式必须和nacos控制台配置的数据格式保持⼀致.
  2. 不设置配置格式(spring.cloud.nacos.config.file-extension)时, 默认为properties </aside>

Nacos与Eureka的区别

共同点:

  • 都⽀持服务注册和服务拉取

区别:

  1. 功能

    Nacos除了服务发现和注册之外, 还提供了配置中⼼, 流量管理和DNS服务等功能.

  2. CAP理论

    Eureka遵循AP原则, Nacos可以切换AP和CP模式,默认AP.

    Nacos 根据配置识别CP或者AP模式. 如果注册Nacos的Client的节点是临时节点, 那么Nacos对这个

    Client节点的效果就是AP, 反之是CP. AP和CP可以同时混合存在.

  3. 服务发现

    Eureka:基于拉模式. Eureka Client会定期从Server拉取服务信息, 有缓存, 默认每30秒拉取⼀次.

    Nacos:基于推送模式. 服务列表有变化时实时推送给订阅者, 服务端和客⼾端保持⼼跳连接.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90735.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手写PPO_clip(FrozenLake环境)

参考&#xff1a;白话PPO训练 成功截图 算法组件 四大部分 同A2C相比&#xff0c;PPO算法额外引入了一个old_actor_model. 在PPO的训练中&#xff0c;首先使用old_actor_model与环境进行交互得到经验&#xff0c;然后利用一批经验优化actor_model&#xff0c;最后再将actor_m…

人形机器人指南(八)操作

八、环境交互与操作能力——人形机器人的“灵巧双手”环境交互与操作能力是人形机器人区别于移动平台的核心能力标志。通过仿生学设计的运动链与智能控制算法&#xff0c;机器人得以在非结构化环境中执行抓取、操纵、装配等复杂任务。本章将系统解析机械臂运动学架构、灵巧手设…

管理 GitHub Pages 站点的自定义域(Windows)

管理 GitHub Pages 站点的自定义域(Windows) 你可以设置或更新某些 DNS 记录和存储库设置,以将 GitHub Pages 站点的默认域指向自定义域。 谁可以使用此功能? GitHub Pages 在公共存储库中提供 GitHub Free 和 GitHub Free for organizations,在公共和私有存储库中提供 Gi…

【PCIe 总线及设备入门学习专栏 5.1.3 -- PCIe PERST# 时序要求】

文章目录 Overview 什么是PERST# 第一条要求 术语解释 要求含义 第二条要求 术语解释 要求含义 Perst 示例说明 过程如下 总结 Overview 首先我们看下 PCIe x协议对 PERST 的要求: A component must enter the LTSSM Detect state within 20 rms of the end of Fundamental R…

图像认知与OpenCV——图像预处理

目录 一、颜色加法 颜色加法 颜色加权加法 示例 二、颜色空间转换 RGB转Gray&#xff08;灰度&#xff09; RGB转HSV HSV转RGB 示例 三、灰度化 最大值法 平均值法 加权平均值法 四、图像二值化处理 阈值法 反阈值法 截断阈值法 低阈值零处理 超阈值法 OTSU…

Vue 3 组件通信全解析:从 Props 到 Pinia 的深入实践

引言 Vue 3 作为现代前端框架的代表之一&#xff0c;以其灵活性和高效性受到开发者的广泛喜爱。在 Vue 3 中&#xff0c;组件是构建用户界面的核心单元&#xff0c;而组件之间的通信则是实现动态交互和数据流动的关键环节。无论是简单的父子组件通信&#xff0c;还是复杂的跨组…

CodeBuddy IDE实战:用AI全栈能力快速搭建课程表网页

声明&#xff1a;本文仅是实践测评&#xff0c;并非广告 1.前言 在数字化开发的浪潮中&#xff0c;工具的革新往往是效率跃迁的起点。腾讯云 CodeBuddy IDE 是 “全球首个产设研一体 AI 全栈开发平台” &#xff0c;它不仅打破了产品、设计与研发的职能壁垒&#xff0c;更重新…

11. HTML 中 DOCTYPE 的作用

总结H5 的声明HTML5 的 DOCTYPE 声明 HTML5 中的 <!DOCTYPE html> 声明用于告诉浏览器当前文档使用的是 HTML5 的文档类型。它必须是文档中的第一行内容&#xff08;在任何 HTML 标签之前&#xff09;&#xff0c;以确保浏览器能够正确地解析和渲染页面。DOCTYPE 的作用 …

Linux C 网络基础编程

基础知识在进行网络编程之前&#xff0c;我们需要简单回顾一下计算机网络五层模型的网络层和传输层&#xff0c;这两层在面向后端编程时用的最多。物理层和链路层过于底层&#xff0c;已经完全由内核协议栈实现&#xff0c;不再细述。这里假设读者已经对计算机网络有一个大致的…

循环神经网络--NLP基础

一、简单介绍NLP&#xff08;Natural Language Processing&#xff09;&#xff1a;自然语言处理是人工智能和语言领域的一个分支&#xff0c;它涉及计算机和人类语言之间的相互作用。二、NLP基础概念词表&#xff08;词库&#xff09;&#xff1a;文本数据集出现的所有单词的集…

【Android】约束布局总结(1)

三三要成为安卓糕手 零&#xff1a;创建布局文件方式 1&#xff1a;创建步骤ctrl alt 空格 设置根元素2&#xff1a;处理老版本约束布局 在一些老的工程中&#xff0c;constrainlayout可能没有办法被直接使用&#xff0c;这里需要手动添加依赖implementation androidx.const…

S7-200 SMART 数字量 I/O 组态指南:从参数设置到实战案例

在工业自动化控制中&#xff0c;PLC 的数字量输入&#xff08;DI&#xff09;和输出&#xff08;DO&#xff09;是连接传感器、执行器与控制系统的 “神经末梢”。西门子 S7-200 SMART 作为一款高性价比的小型 PLC&#xff0c;其数字量 I/O 的灵活组态直接影响系统的稳定性与响…

可调谐激光器原理与设计 【DFB 与 DBR 激光器剖析】

可调谐激光器原理与设计 【DFB 与 DBR 激光器剖析】1. 可调谐激光器的原理与分类简介2. DFB 与 DBR 激光器结构原理比较2.1 DFB&#xff08;Distributed Feedback Laser&#xff09;激光器2.2 DBR&#xff08;Distributed Bragg Reflector&#xff09;激光器2.3 DFB 激光器与 D…

【前端工程化】前端项目开发过程中如何做好通知管理?

在企业级后台系统中&#xff0c;通知是保障团队协作、监控系统状态和及时响应问题的重要手段。与 C 端产品不同&#xff0c;B 端更关注构建完成、部署状态、异常报警等关键节点的推送机制。 本文主要围绕通知场景、通知内容、通知渠道、自动化集成等方面展开&#xff0c;适用于…

MySQL 9.4.0创新版发布,AI开始辅助编写发布说明

2025 年 7 月 22 日&#xff0c;MySQL 9.4.0 正式发布。 作为一个创新版&#xff0c;MySQL 9.4.0 最大的创新应该就是使用 Oracle HeatWave GenAI 作为助手帮助编写版本发布说明了。难道下一步要开始用 AI 辅助编写数据库文档了&#xff1f; 该版本包含的核心功能更新以及问题修…

基于WebSockets和OpenCV的安卓眼镜视频流GPU硬解码实现

基于WebSockets和OpenCV的安卓眼镜视频流GPU硬解码实现 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 项目概述 本项目旨在实现一个通过WebSockets接收…

人大金仓 kingbase 连接数太多, 清理数据库连接数

问题描述 kingbase 连接数太多, 清理数据库连接数 [rootFCVMDZSZNST25041 ~]# su root [rootFCVMDZSZNST25041 ~]# [rootFCVMDZSZNST25041 ~]# su kingbase [kingbaseFCVMDZSZNST25041 root]$ [kingbaseFCVMDZSZNST25041 root]$ ksql could not change directory to "/r…

SpringMVC相关基础知识

1. servlet.multipart 大小配置 SpringBoot 文件上传接口中有 MultipartFile 类型的文件参数,上传较大文件时报错: org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateExceptio…

HCIP第一次实验报告

一.实验需求及拓扑图&#xff1a;二.实验需求分析根据提供的网络拓扑图和实验要求&#xff0c;以下是对实验需求的详细分析&#xff1a;R5作为ISP:R5只能进行IP地址配置&#xff0c;其所有接口均配置为公有IP地址。认证方式:R1和R5之间使用PPP的PAP认证&#xff0c;R5为主认证方…

React入门学习——指北指南(第五节)

React 交互性:过滤与条件渲染 在前文我们学习了 React 中事件处理和状态管理的基础。本节将聚焦两个重要的进阶技巧 ——条件渲染(根据状态动态显示不同 UI)和列表过滤(根据条件筛选数据),这两者是构建交互式应用的核心能力,能让界面根据用户操作呈现更智能的响应。 条…