【Nacos】使用Nacos进行服务发现、配置管理

Nacos

Nacos是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

版本说明:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

<properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><spring-cloud.version>2021.0.5</spring-cloud.version><spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>

Quick Start

Windows安装Nacos(Linux同理)

去GitHub下载压缩包,将conf文件夹里的nacos-mysql.sql表存储到数据库中

取消application.properties这三行的注释,修改user和password

启动:双击startup.cmd会报错,在cmd中输入startup.cmd -m standalone。这是因为默认以集群方式启动,而集群启动需要配置,不配置会报错,所以以单例启动就可以

启动后访问:http://localhost:8848/nacos/index.html#

遇到的坑

  1. 初始化完成后登录显示用户名或密码错误,这是系统bug,重启服务
  2. 2.x版本连接报错Client not connected, current status:STARTING,防火墙开启8848、8948、8949
  3. 2.x版本集群8848、8849、8850时,8849启动失败。设置为8848、8850、8852即可

Nacos注册中心

服务注册与发现

概念

微服务与传统单体式应用架构最大区别就是强调软件模块的拆分。在单体架构下,一个应用系统的多个功能模块由于组织在一起在同一个应用进程内部署与运行,因此,模块之间直接通过方法调用即可完成对一次请求的响应。但在微服务系统中,需要对一个应用系统根据其功能特点,按照一定粒度进行拆分后单独部署,以便实现模块内的高内聚,模块间的低耦合,实现整个微服务系统的高可扩展性:

原来一次在一个应用内即可完成的请求处理,会出现跨进程跨主机的服务调用,如何让这个服务之间能互相发现像单体式应用一样提供统一对外的服务调用能力是微服务框架层面需要重点解决的核心问题之一。 在 Spring Cloud 生态中,采用了如下服务注册与发现模型,来实现微服务之间的互相发现与调用。

通过在微服务系统中引入一个叫做注册中心的组件,来作为协调者。其最简化的过程是,所有的微服务应用在启动过程中会将自身包含服务名称、主机IP地址和端口号等信息发送到注册中心中,然后上游的微服务在处理请求过程中,根据服务名称到注册中心中查找对应服务的所有实例IP地址和端口号来进行服务调用,整个过程如图中虚线所示。从而让分散的微服务系统之间能像一个整体一样对外提供请求处理能力。

项目demo1

创建一个springboot项目,加入相关依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

编写applicant.yml配置文件

# 端口
server:port: 8081# 应用名称
spring:application:name: nacos-client-02# nacos配置cloud:nacos:username: nacospassword: edishena# 向哪里注册server-addr: 43.139.248.149:8848discovery:# 注册的服务名service: nacos-service# 注册到哪个命名空间namespace: 79151db2-6086-49be-b3ac-17eaa5946e2c# 注册到哪个组group: A_GROUP

开启服务发现

package priv.happy.nacosclient01;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
// 开启服务发现
@EnableDiscoveryClient 
public class NacosClient01Application {public static void main(String[] args) {SpringApplication.run(NacosClient01Application.class, args);}
}

启动项目后即可在nacos控制台看到当前的服务

跨命名空间调用

不能跨命名空间、跨组调用

集成OpenFeign

注意事项

添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

注意,SpringCloud Feign在Hoxton.M2 RELEASE版本之后不再使用ribbon,而是使用spring-cloud-loadbalancer,所以在不引入spring-cloud-loadbalancer情况下会报错

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testController': Unsatisfied dependency expressed through field 'feign'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'priv.happy.nacosclient01.feign.FoodFeign': Unexpected exception during bean creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?……at priv.happy.nacosclient01.NacosClient01Application.main(NacosClient01Application.java:14) [classes/:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'priv.happy.nacosclient01.feign.FoodFeign': Unexpected exception during bean creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?... 20 common frames omitted
Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?... 28 common frames omitted

解决方法

  • 第一中,通过修改依赖解决
    1. 排除nacos中的ribbon依赖
    2. 添加loadbalancer依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion></exclusions>
</dependency><!--客户端负载均衡loadbalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  • 第二种,通过修改配置解决
spring.cloud.loadbalancer.ribbon.enabled=false
spring.cloud.loadbalancer.nacos.enabled=true

注意:需要在同一个namespace的同一个group下才能调用成功,否则报错503

2023-08-21 11:01:45.278 ERROR 9388 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://nacos-service/food] [FoodFeign#getFood()]: [Load balancer does not contain an instance for the service nacos-service]] with root causefeign.FeignException$ServiceUnavailable: [503] during [GET] to [http://nacos-service/food] [FoodFeign#getFood()]: [Load balancer does not contain an instance for the service nacos-service]at feign.FeignException.serverErrorStatus(FeignException.java:256) ~[feign-core-11.10.jar:na]at feign.FeignException.errorStatus(FeignException.java:197) ~[feign-core-11.10.jar:na]at feign.FeignException.errorStatus(FeignException.java:185) ~[feign-core-11.10.jar:na]at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:92) ~[feign-core-11.10.jar:na]at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:98) ~[feign-core-11.10.jar:na]at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:141) ~[feign-core-11.10.jar:na]at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:91) ~[feign-core-11.10.jar:na]at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-11.10.jar:na]at com.sun.proxy.$Proxy69.getFood(Unknown Source) ~[na:na]at priv.happy.nacosclient01.controller.TestController.test(TestController.java:33) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221]

项目demo2

服务提供者

新建一个上述的springboot项目,作为服务服务提供者,编写一个controller对外提供服务(这个服务的名称是nacos-service)

package priv.happy.nacosclient02.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ProviderController {@GetMapping("food")public String getFood() {return "大米饭一碗";}
}

服务消费者(由消费者发起远程调用)

新建一个demo1中的springboot项目,作为消费者,添加openfeign依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

开启远程调用

package priv.happy.nacosclient01;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
// 开启远程调用
@EnableFeignClients
public class NacosClient01Application {public static void main(String[] args) {SpringApplication.run(NacosClient01Application.class, args);}}

编写Feignclient,发起远程调用

package priv.happy.nacosclient01.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;// value是要调用的那个服务的名称
@FeignClient(value = "nacos-service")
public interface FoodFeign {@GetMapping("food")String getFood() ;
}

编写消费者的controller,对用户提供访问功能

package priv.happy.nacosclient01.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import priv.happy.nacosclient01.feign.FoodFeign;import java.util.List;/*** @Author: HAPPY* @Project_name: nacos-practice* @Package_name: priv.happy.nacosclient01.controller* @Date: 2023/8/21 10:22* @Description:*/
@RestController
public class TestController {@AutowiredDiscoveryClient discoveryClient;@AutowiredFoodFeign feign;@GetMapping("test")public String test(){List<ServiceInstance> instances = discoveryClient.getInstances("nacos-service");System.out.println(instances);return feign.getFood();}
}

集成GateWay

加入gateway依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

端口:80

server:port: 80spring:application:name: gatewaycloud:nacos:server-addr: 43.139.248.149:8848username: nacospassword: edishena.discovery:group: A_GROUPnamespace: 79151db2-6086-49be-b3ac-17eaa5946e2cgateway:discovery:locator:# 开启动态路由enabled: truelower-case-service-id: true

nacos集群

  • 8848
    • 9848
    • 9849
  • 8850
    • 9850
    • 9851
  • 8852
    • 9852
    • 9853

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口

与主端口的偏移量

描述

9848

1000

客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求

9849

1001

服务端gRPC请求服务端端口,用于服务间同步等

7848

-1000

Jraft请求服务端端口,用于处理服务端间的Raft相关请求

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。 9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。

配置文件

server:port: 8080spring:application:name: nacos-client-01cloud:nacos:
#      server-addr: 43.139.248.149:8848# 配置集群server-addr: localhost:8848, localhost:8850, localhost:8852
#      username: nacos
#      password: edishena.discovery:namespace: c7ffbcd1-c4d8-425b-b41c-a1077693fa57group: A_GROUP

Nacos配置管理

在单体架构的时候将配置写在配置文件中,缺点就是每次修改配置都需要重启服务才能生效。当应用程序实例比较少的时候还可以维护。如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本。做到服务不重启就可以修改配置,产生了四个基础诉求:

  • 需要支持动态修改配置
  • 需要动态变更有多实时
  • 变更快了之后如何管控控制变更风险,如灰度、回滚等
  • 敏感配置如何做安全配置

采用分布式配置中心的软件架构如图所示,其可以在分布式场景中帮助解决以下问题:

  1. 管理应用程序配置:当有大量应用程序需要管理时,手动维护配置文件会变得非常困难。分布式配置中心提供了一个集中管理和分发配置信息的解决方案。
  2. 环境隔离:在开发、测试和生产等不同环境中,应用程序的配置信息往往都会有不用。使用分布式配置中心,可以轻松地管理和分发不同环境下的配置信息。
  3. 提高程序安全性:将配置信息存储在代码库或应用程序文件中可能会导致安全风险,因为这些信息可能会被意外地泄漏或被恶意攻击者利用。使用分布式配置,可以将配置信息加密和保护,并且可以进行访问权限控制。
  4. 动态更新配置:在应用程序运行时,可能需要动态地更新配置信息,以便应用程序可以及时响应变化。使用分布式配置中心,可以在运行时动态更新配置信息,而无需重新启动应用程序。

依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>

配置文件名称为:prefix-active.file-extension,需要在nacos控制台输入后缀

server:port: 8082
spring:application:name: nacos-config-01cloud:nacos:username: nacospassword: 123456server-addr: localhost:8848# 项目启动时在哪里找配置文件config:# 读哪个配置文件prefix: nacos-config-01# 配置文件格式file-extension: ymlnamespace: c7ffbcd1-c4d8-425b-b41c-a1077693fa57# 配置文件名称为  prefix-active.file-extension      profiles:active: dev

读取多个配置文件

server:port: 8082
spring:application:name: nacos-config-01cloud:nacos:username: nacospassword: 123456server-addr: localhost:8848# 项目启动时在哪里找配置文件config:# 配置文件格式file-extension: ymlnamespace: c7ffbcd1-c4d8-425b-b41c-a1077693fa57# 读取多个配置文件extension-configs:- data-id: nacos-config-01-dev.ymlgroup: DEFAULT_GROUPrefresh: true- data-id: nacos-config-02-dev.ymlgroup: A_GROUPrefresh: true

项目启动报错

[main] DEBUG org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - Application failed to start due to an exception
org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set***************************
APPLICATION FAILED TO START
***************************Description:No spring.config.import property has been definedAction: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.import-check.enabled=false.

加入bootstrap依赖

<!-- springcloud 2020 以后禁用了bootstrap,需要手动导入 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

问题

username和password不写也可以

使用Nacos时,如果不配置Nacos的用户名和密码,可以将username和password属性留空或不配置。Nacos客户端将以匿名方式连接到Nacos服务器。

standalone和cluster模式下点击下线没反应

Nacos已经下线了该功能,只是前端UI未进行修改

cluster配置集群的ip,每次电脑的ip都不一样,需要每次开机都修改cluster.conf中的ip地址

改成localhost:port即可

只启动了三个集群多了一个

这是因为在nacos的配置文件中没有指定nacos的ip,因此默认使用192.168.0.1这种,但集群的配置文件里的ip又是127.0.0.1这种,因此会显示两个。在application.properties文件中修改即可。

nacos控制台中,每个服务都有一个订阅者,且应用名是unknown

应用名unknown是因为需要进行配置,有两种方式(我只是了第一种),在运行配置中添加虚拟机选项 -Dproject.name=application

服务提供者的订阅者中,刚开始是没有消费者的,只有当消费者发送过请求,访问过服务提供者以后,服务提供者的订阅者中才会有消费者

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

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

相关文章

传统分拣弊端明显,AI机器视觉赋能物流行业包裹分类产线数智化升级

随着电子商务的快速发展&#xff0c;物流行业的包裹数量持续增长&#xff0c;给物流企业带来了巨大的运营压力。目前&#xff0c;国内大型物流运转中心已开始采用机器视觉自动化设备&#xff0c;但多数快递公司处于半自动化状态&#xff0c;中小型物流分拣中心目前仍靠人工录入…

AI机器视觉赋能电池缺陷检测,深眸科技助力新能源行业规模化发展

新产业周期下&#xff0c;新能源行业风口已至&#xff0c;现代社会对于新能源电池产品需求量加大&#xff0c;对产品的质量安全也更加重视。当前&#xff0c;传统的检测方法已经不能满足新能源电池行业的发展&#xff0c;越来越多的厂商开始应用创新机器视觉技术与产品于生产环…

Python 实战之ChatGPT + Python 实现全自动数据处理/可视化详解

本文目录 一、引言 二、成果演示——口述式数据可视化 三、远原理述 四、实现过程 &#xff08;一&#xff09;环境配置 &#xff08;二&#xff09;申请OpenAI账号 &#xff08;一&#xff09;调用ChatGPT API &#xff08;二&#xff09;设计AI身份&#xff0c;全自动处理数据…

java基于微信小程序的讲座预约系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈第三章 系统分析3.1初步需求分析 3.2 系统用例分析3.2.1 公告管理用例分析3.2.2 系…

华为云新生代开发者招募

开发者您好&#xff0c;我们是华为2012UCD的研究团队 为了解年轻开发者的开发现状和趋势 正在邀请各位先锋开发者&#xff0c;与我们进行2小时的线上交流&#xff08;江浙沪附近可线下交流&#xff09; 聊聊您日常开发工作中的产品使用需求 成功参与访谈者将获得至少300元京…

实现智能指针shared_ptr(难度3)(源码与测试用例)

本作业主要考察&#xff1a;复制控制/动态内存管理/模板编程/基于引用计数的智能指针原理/测试驱动开发 实现代码完成下面的my_shared_ptr以及main函数中的测试用例 本实现主要是利用复制控制来增加引用计数实现智能指针。 #include <iostream> #include <vector&g…

骨传导耳机十大品牌怎么选,骨传导耳机十大品牌排行榜分享

作为一个拥有20多款骨传导耳机来说&#xff0c;我也算是资深的使用者了&#xff0c;在骨传导耳机刚开始兴起的时候&#xff0c;我就开始接触了&#xff0c;近几年越来越多的骨传导耳机品牌诞生&#xff0c;我也是入手了不少&#xff0c;所以也算是对骨传导耳机非常熟悉了&#…

Flutter的未来与趋势,23年还学吗?

随着移动应用市场的不断扩大&#xff0c;跨平台开发框架的需求也越来越大。Flutter框架可以帮助开发者在不同平台上快速开发高质量的移动应用程序&#xff0c;这种趋势将进一步推动Flutter的发展和普及。 作为一名前端开发工程师&#xff0c;学习Flutter框架是非常有必要的。因…

亲测微信小程序备案流程,微信小程序如何备案,微信小程序备案所需准备资料

微信小程序为什么要备案&#xff0c;微信官方给出如下说明&#xff1a; 1、若微信小程序未上架&#xff0c;自2023年9月1日起&#xff0c;微信小程序须完成备案后才可上架&#xff1b; 2、若微信小程序已上架&#xff0c;请于2024年3月31日前完成备案&#xff0c;逾期未完成备案…

CSP的理解与绕过

文章目录 前言CSP简介CSP如何工作CSP指令CSP指令值 例题[AFCTF 2021]BABY_CSP 前言 刚学习完xss&#xff0c;把xsss-labs靶场都通了打算试试水&#xff0c;遇到此题[AFCTF 2021]BABY_CSP&#xff0c;借此机会学习下CSP CSP简介 Content Security Policy (CSP)内容安全策略&am…

华为OD七日集训第1期复盘 - 按算法分类,由易到难,循序渐进,玩转OD(文末送书)

目录 一、活动内容如下第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、双指针第5天、递归回溯第6天、二分查找第7天、贪心算法 && 二叉树 二、可观测性工程1、简介2、主要内容 大家好&#xff0c;我是哪吒。 最近一直在刷华为OD机试的算法题&#xff0c;坚持…

macOS Sonoma 14beta 7(23A5337a)更新发布,附黑/白苹果系统镜像

系统介绍&#xff08;镜像请前往黑果魏叔官网下载&#xff09; 黑果魏叔8 月 31 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 7 更新&#xff08;内部版本号&#xff1a;23A5337a&#xff09;&#xff0c;本次更新距离上次发布隔了 8 天。 …

运营超5000万公里,再签700辆订单,嬴彻卡车NOA引领商用车自动驾驶商业化

从主动安全到智能驾驶&#xff0c;商用车自动驾驶商业化进程已经明显提速。 8月29日&#xff0c;嬴彻科技举办以“奔跑吧 卡车NOA”为主题的第二届嬴彻科技日&#xff0c;宣布嬴彻卡车NOA&#xff08;导航辅助驾驶&#xff09;已经突破5000万公里&#xff0c;并实现安全运营零…

系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的&#xff0c;因为很多的好朋友也比较关注这方面的内容&#xff0c;所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给大家做个简单讲解&#xff0c;我这里只是抛砖引玉&#xff0c…

Debian 30 周年,生日快乐!

导读近日是 Debian 日&#xff0c;也是由伊恩-默多克&#xff08;Ian Murdock&#xff09;创立的 Debian GNU/Linux 通用操作系统和社区支持的 Debian 项目 30 周年纪念日。 不管你信不信&#xff0c;从已故的伊恩-默多克于 1993 年 8 月 16 日宣布成立 Debian 项目&#xff0c…

如何修复xinput1_4.dll丢失的问题?教你怎么快速修复xinput1_4.dll文件

在使用计算机的过程中&#xff0c;我们可能会遇到各种各样的错误和问题。其中之一就是xinput1_4.dll丢失的错误。这个错误会导致一些游戏或应用程序无法正常运行&#xff0c;给我们带来不便&#xff0c;但是不要担心&#xff0c;其实很简单&#xff0c;我们只要了解清楚xinput1…

15. Docker实战监控神器Uptime Kuma

目录 1、前言 2、什么是Uptime Kuma? 3、Docker部署Uptime Kuma 3.1、安装 3.2、访问 3.3、配置 3.4、集成飞书机器人 3.5、效果 1、前言 在利用Docker部署项目时&#xff0c;我们需要时刻知道已部署的容器的状态。且通常会把所有的站点监控配置到云平台上&#xff0c…

java 多线程

01.多线程类java.lang.Thread 这里继承Thread类的方法是比较常用的一种&#xff0c;如果说你只是想起一条线程。没有什么其它特殊的要求&#xff0c;那么可以使用Thread.&#xff08;笔者推荐使用Runable&#xff0c;后头会说明为什么&#xff09;。下面来看一个简单的实例&…

Metinfo6.0.0任意文件读取【漏洞复现】

文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称&#xff1a;MetInfo任意文件读取 漏洞简介&#xff1a;MetInfo是一套使用PHP和MySQL开发的内容管理系统&#xff0c;其…

ChatGPT的局限性及商业化应用限制讨论

首先&#xff0c;ChatGPT仅使用公开可用的信息&#xff0c;这是其第一个局限。如果基础信息缺失、过时、模糊或过于泛化&#xff0c;AI生成的内容就将不会准确。 只有在使用企业内部专有信息和知识创建特定的GPT时&#xff0c;才会出现真正的商业化解决方案。但对企业而言&…