Nacos的搭建及服务调用
文章目录
- 一、搭建Nacos服务
- 1、Nacos
- 2、安装Nacos
- 3、Docker安装Nacos
- 二、OpenFeign和Dubbo远程调用Nacos的服务
- 1、搭建SpringCloudAlibaba的开发环境
- 1.1 构建微服务聚合父工程
- 1.2 创建子模块cloud-provider-payment8001
- 1.3 创建子模块cloud-consumer-order80
- 2、远程服务调用OpenFeign
- 2.1 Dubbo和OpenFeign的区别
- 2.2 创建子模块cloud-consumer-openfeign-order80
- 2.3 OpenFeign实现服务降级
- 3、远程服务调用Dubbo
- 3.1 创建接口服务工程cloud-service-api
- 3.2 创建支付生产者工程cloud-dubbo-provider-payment8001
- 3.3创建消费者cloud-dubbo-consumer-order80
- 3.4 Dubbo实现服务降级
- 总结
一、搭建Nacos服务
1、Nacos
- Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。
Nacos包含了SpringCloud的注册中心Eureka、服务配置Config、服务总线Bus。 - Nacos提供四大功能,分别是服务发现和服务健康监测、动态配置服务、动态DNS服务、服务及其元数据管理。
1)服务发现和服务健康监测
Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
2)动态配置服务
动态配置服务允许在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序,这使得配置的更改更加高效和灵活。
3)动态DNS服务
Nacos提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以域名的方式暴露端点,让第三方应用方便查阅及发现。
4)服务及其元数据管理
Nacos能让你从微服务平台建设的视觉去管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。
2、安装Nacos
- 在官网下载Linux的Nacos安装包:
https://github.com/alibaba/nacos/releases
- 通过mobax将安装包上传到虚拟机的/opt目录下
- 解压到/usr/local目录下:
tar -zxvf nacos-server-2.2.3.tar.gz -C /usr/local
- 需要在虚拟机上配置JDK8以上的环境:
https://blog.csdn.net/weixin_49076273/article/details/126636650
- 进入到nacos的bin目录下,启动单机模式的nacos服务器:
sh startup.sh -m standalone
- 在浏览器访问:
http://192.168.126.32:8848/nacos/
3、Docker安装Nacos
-
安装Docker:
https://blog.csdn.net/weixin_49076273/article/details/126532188
-
使用Docker拉取镜像:
docker pull nacos/nacos-server:v2.2.0
-
单机版部署:
docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone -e NACOS_SERVER_IP=192.168.126.32 nacos/nacos-server:v2.2.0
-
在浏览器访问:
http://192.168.126.32:8848/nacos/
帐号密码都是nacos
使用docker容器搭建nacos,如果是nacos2.x需要把9848,9849这两个端口开放出来即可,这样就可以使用IDEA连接上Nacos。如果是1.x则直接使用8848端口即可
二、OpenFeign和Dubbo远程调用Nacos的服务
1、搭建SpringCloudAlibaba的开发环境
1.1 构建微服务聚合父工程
-
创建父工程springcloudalibaba
-
配置注解生效激活
-
Java编译版本选择
-
父工程的POM文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zzx</groupId><artifactId>springcloudalibaba</artifactId><version>1.0-SNAPSHOT</version><!-- 统一管理jar包版本 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><spring-cloud.version>2021.0.0</spring-cloud.version><spring-boot.version>2.6.3</spring-boot.version></properties><!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version --><dependencyManagement><dependencies><!--spring boot 2.6.3--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud 2021.0.0--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>
-
IDEA开启Dashboard
1)修改配置文件.idea/workspace.xml
2)添加如下配置<component name="RunDashboard"><option name="ruleStates"><list><RuleState><option name="name" value="ConfigurationTypeDashboardGroupingRule" /></RuleState><RuleState><option name="name" value="StatusDashboardGroupingRule" /></RuleState></list></option><option name="configurationTypes"><set><option value="SpringBootApplicationConfigurationType" /></set> </option> </component>
-
删除src目录
1.2 创建子模块cloud-provider-payment8001
-
在父工程下,右键创建子模块cloud-provider-payment8001
-
在cloud-provider-payment8001的POM文件中添加如下依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>
-
创建cloud-provider-payment8001的主启动类
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 主启动类*/// 注解开启注册发现服务功能 @EnableDiscoveryClient @SpringBootApplication @Slf4j public class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class,args);log.info("****** PaymentMain8001 启动成功 ******");} }
-
在cloud-provider-payment8001的com.zzx.controller包下,创建PaymentController
package com.zzx.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** 支付控制层*/ @RestController @RequestMapping("payment") public class PaymentController {@GetMapping("index")public String index(){return "payment success";} }
-
在cloud-provider-payment8001的resources中,创建application.yml文件
server:port: 8001 spring:application:name: payment-providercloud:nacos:discovery:# Nacos服务的地址server-addr: 192.168.126.32:8848
-
启动payment8001项目后,在Nacos中的服务管理的服务列表中会出现该服务
1.3 创建子模块cloud-consumer-order80
-
在父工程下,右键创建子模块cloud-consumer-order80
-
在cloud-consumer-order80的POM文件中添加如下依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>
-
创建cloud-consumer-order80的主启动类
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 主启动类*/// 注解开启注册发现服务功能 @EnableDiscoveryClient @SpringBootApplication @Slf4j public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class,args);log.info("****** OrderMain80 启动成功 ******");} }
-
在cloud-consumer-order80的resources中,创建application.yml文件
server:port: 80 spring:application:name: order-consumercloud:nacos:discovery:# Nacos服务的地址server-addr: 192.168.126.32:8848
-
启动order80项目后,在Nacos中的服务管理的服务列表中会出现该服务
2、远程服务调用OpenFeign
2.1 Dubbo和OpenFeign的区别
- Apache Dubbo是一款微服务开发框架,他提供了RPC通信与微服务治理两大关键能力。这意味着使用Dubbo开发的微服务,将具备相互之间的远程发现和通信能力,同时利用Dubbo提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调控等服务治理诉求。
- SpringCloud的通信采用OpenFeign组件。Feign基于Http传输协议,底层实现是Rest。从OSI7层模型上来看Rest属于应用层。
OpenFeign在高并发场景下性能不够理想,成为性能瓶颈。
使用场景:并发不高,性能要求也不高 - Dubbo框架的通信协议采用RPC协议,属于传输层协议,性能上自然比rest高。提升了交互的性能,保持了长连接,高性能。
Dubbo性能更好,比如支持异步调用、Netty性能更好。
使用场景:数据小,并发高
2.2 创建子模块cloud-consumer-openfeign-order80
-
在父工程下,右键创建子模块cloud-consumer-openfeign-order80
-
在cloud-consumer-openfeign-order80的POM文件中添加如下依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- 引入openfeign依赖包 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 引入负载均衡器依赖包 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency> </dependencies>
-
创建cloud-consumer-openfeign-order80的主启动类
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients;/*** 主启动类*/// 注解开启注册发现服务功能 @EnableDiscoveryClient // 开启feign扫描 @EnableFeignClients @SpringBootApplication @Slf4j public class OrderOpenFeignMain80 {public static void main(String[] args) {SpringApplication.run(OrderOpenFeignMain80.class,args);log.info("****** OrderOpenFeignMain80 启动成功 ******");} }
-
在cloud-consumer-openfeign-order80的com.zzx.service包中,创建IPaymentFeignService接口
package com.zzx.service;import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping;/*** OpenFeign远程调用*/ @Service @FeignClient(value = "payment-provider") public interface IPaymentFeignService {@GetMapping("/payment/index")String index(); }
-
在cloud-consumer-openfeign-order80的com.zzx.controller包中,创建OrderController
package com.zzx.controller;import com.zzx.service.IPaymentFeignService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** 订单微服务*/ @RestController @RequestMapping("order") public class OrderController {@Autowiredprivate IPaymentFeignService iPaymentFeignService;/*** 测试OpenFeign* @return*/@GetMapping("index")public String index(){return iPaymentFeignService.index();} }
-
在cloud-consumer-openfeign-order80的resources中,创建application.yml文件
server:port: 80 spring:application:name: order-consumer-openfeigncloud:nacos:discovery:# Nacos服务的地址server-addr: 192.168.126.32:8848
-
启动openfeign-order80项目后,在Nacos中的服务管理的服务列表中会出现该服务
-
在浏览器上测试使用OpenFeign进行远程服务调用,输入:
http://localhost/order/index
此时返回payment success即调用成功
2.3 OpenFeign实现服务降级
-
在cloud-consumer-openfeign-order80的POM文件中,引入服务降级的依赖
<!-- 引入服务降级依赖包 --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
-
在cloud-consumer-openfeign-order80的resources下的application.yml文件中,添加如下配置开启openfeign对sentinel的支持
feign:sentinel:enabled: true
-
在cloud-provider-payment8001的PaymentController中添加如下超时方法
@GetMapping("timeout") public String timeout(){try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {throw new RuntimeException(e);}return "payment success"; }
-
在cloud-consumer-openfeign-order80的OrderController中添加如下超时方法
@GetMapping("timeout") public String timeout(){return iPaymentFeignService.timeout(); }
-
在cloud-consumer-openfeign-order80的IPaymentFeignService中添加如下超时方法
@GetMapping("/payment/timeout") String timeout();
-
在浏览器上测试使用OpenFeign进行远程服务调用,输入:
http://localhost/order/timeout
此时返回报500错误,控制台显示读取超时
-
实现服务降级的回调方法
-
需要在cloud-consumer-openfeign-order80的IPaymentFeignService接口中指定服务降级回调类
@FeignClient(value = "payment-provider",fallback = PaymentServiceFallback.class)
2)在cloud-consumer-openfeign-order80的com.zzx.fallback包下,创建PaymentServiceFallback服务降级回调类
package com.zzx.fallback;import com.zzx.service.IPaymentFeignService; import org.springframework.stereotype.Component;@Component public class PaymentServiceFallback implements IPaymentFeignService {@Overridepublic String index() {return null;}/*** 服务降级方法* @return*/@Overridepublic String timeout() {return "系统繁忙,请稍后再试";} }
- 在浏览器访问:
http://localhost/order/timeout
此时会进行服务降级,回调服务降级类对应的方法
3、远程服务调用Dubbo
3.1 创建接口服务工程cloud-service-api
-
在父工程下,右键创建子模块cloud-service-api
-
创建一个公共支付接口
package com.zzx.service;/*** 支付接口*/ public interface IPaymentService {String index(); }
3.2 创建支付生产者工程cloud-dubbo-provider-payment8001
-
在父工程下,右键创建子模块cloud-dubbo-provider-payment8001
-
在cloud-dubbo-provider-payment8001的POM文件中,添加如下依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.zzx</groupId><artifactId>cloud-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId><version>2021.0.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency> </dependencies>
-
在cloud-dubbo-provider-payment8001中创建主启动类PaymentDubboMain8001
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 主启动类*/ @SpringBootApplication @Slf4j @EnableDiscoveryClient public class PaymentDubboMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentDubboMain8001.class,args);log.info("********** PaymentDubboMain8001 启动成功 ***********");} }
-
在cloud-dubbo-provider-payment8001的resources中,创建application.yml,添加如下配置
server:port: 8001 spring:main:allow-bean-definition-overriding: trueallow-circular-references: trueapplication:# 应用名name: payment-provider-dubbocloud:nacos:discovery:# Nacos服务地址server-addr: 192.168.126.32:8848 # dubbo配置 dubbo:# dubbo 服务实现类扫描包scan:base-packages: com.zzx.serviceregistry:# 注册地址address: nacos://192.168.126.32:8848timeout: 10000# Dubbo服务暴露协议的配置protocol:name: dubbo# port为协议端口,(-1表示自增端口,从20880开始)port: -1
-
在cloud-dubbo-provider-payment8001中,创建支付业务层PaymentServiceImpl
package com.zzx.service.impl;import com.zzx.service.IPaymentService; import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.Method;/*** 支付业务层*/ //以下是只将index方法注册到dubbo中 @DubboService(timeout = 5000,methods = {@Method(name="index",retries = 2)}) public class PaymentServiceImpl implements IPaymentService {@Overridepublic String index() {return "dubbo payment";} }
-
启动该服务后,查看该服务是否在Nacos中注册
3.3创建消费者cloud-dubbo-consumer-order80
-
在父工程下,右键创建子模块cloud-dubbo-consumer-order80
-
在cloud-dubbo-consumer-order80的POM文件中,添加如下依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.zzx</groupId><artifactId>cloud-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId><version>2021.0.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency></dependencies>
-
创建cloud-dubbo-consumer-order80的主启动类
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @Slf4j @EnableDiscoveryClient public class OrderDubboMain80 {public static void main(String[] args) {SpringApplication.run(OrderDubboMain80.class,args);log.info("******* OrderDubboMain80 启动成功 ******");} }
-
在cloud-dubbo-consumer-order80的resources中,创建application.yml配置文件,添加如下配置
server:port: 80 spring:main:allow-circular-references: true#在 Spring Boot 2.1 以及更高的版本增加该设定,因为 Spring Boot 默认调整了 Bean 定义覆盖行为。allow-bean-definition-overriding: trueapplication:#应用名字name: order-consumer-dubbocloud:nacos:discovery:#Nacos地址server-addr: 192.168.126.32:8848#dubbo配置 dubbo:cloud:#dubbo.cloud.subscribed-services:表示要订阅服务的服务名,可以配置'*',代表订阅所有服务,不推荐使用。若需订阅多应用,使用 "," 分割。subscribed-services: "*"registry:# 注册至Nacosaddress: nacos://192.168.126.32:8848# 超时时间timeout: 10000protocol:# 协议Dubboname: dubbo# 端口号port: -1consumer:check: false
-
在cloud-dubbo-consumer-order80中创建订单业务层OrderService
package com.zzx.service;import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service;/*** 订单业务层*/ @Service public class OrderService {//支付服务远程调用@DubboReferenceprivate IPaymentService iPaymentService;public String index(){return iPaymentService.index();} }
-
在cloud-dubbo-consumer-order80中创建订单控制层OrderController
package com.zzx.controller;import com.zzx.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** 订单控制层*/ @RestController @RequestMapping("/order") public class OrderController {@Autowiredprivate OrderService orderService;/*** 测试Dubbo远程调用服务* @return*/@GetMapping("/index")public String index(){return orderService.index();} }
-
启动该服务后,在浏览器访问:
http://localhost/order/index
3.4 Dubbo实现服务降级
-
在cloud-dubbo-provider-payment8001的PaymentServiceImpl实现类中,设置服务生产者集群容错模式cluster
@DubboService(timeout = 5000,methods = {@Method(name="index",retries = 2)},cluster = "failfast")
1)Failfast Cluster模式:这种模式称为快速失败模式,调用只执行一次,失败则立即报错。
2)Failsafe Cluster模式:失败安全模式,如果调用失败, 则直接忽略失败的调用,而是要记录下失败的调用到日志文件。
3)Failback Cluster模式:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
4)Forking Cluster模式:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
5)Broadcast Cluster模式:配置值为broadcast。广播调用所有提供者,逐个调用,任意一台报错则报错(2.1.0开始支持)。通常用于通知所有提供者更新缓存或日志等本地资源信息。 -
在cloud-dubbo-consumer-order80中,创建服务降级的回调类PaymentServiceFallback
package com.zzx.service.fallback;import com.zzx.service.IPaymentService;/*** 支付服务降级处理*/ public class PaymentServiceFallback implements IPaymentService {@Overridepublic String index() {return "服务繁忙,请稍后再试!";} }
-
在cloud-dubbo-consumer-order80的OrderService中,在DubboReference注解中添加一个mock指定回调类
@DubboReference(mock = "com.zzx.service.fallback.PaymentServiceFallback")
-
先将dubbo的生产者跟消费者启动,然后关闭生产者,再访问:
http://localhost/order/index
即配置了访问服务生产者失败后,立刻调用服务降级类的对应方法。
总结
- 在高并发场景下使用Dubbo,因为Dubbo长连接,如果不是高并发会浪费资源;低并发或者性能要求不高使用OpenFeign,因为OpenFeign不是长连接并且便于使用。
相关文章:

Nacos的搭建及服务调用
文章目录 一、搭建Nacos服务1、Nacos2、安装Nacos3、Docker安装Nacos 二、OpenFeign和Dubbo远程调用Nacos的服务1、搭建SpringCloudAlibaba的开发环境1.1 构建微服务聚合父工程1.2 创建子模块cloud-provider-payment80011.3 创建子模块cloud-consumer-order80 2、远程服务调用O…...

uniapp小程序自定义loding,通过状态管理配置全局使用
一、在项目中创建loding组件 在uniapp的components文件夹下创建loding组件,如图: 示例代码: <template><view class"loginLoading"><image src"../../static/loading.gif" class"loading-img&q…...
leetcode 45. 跳跃游戏 II
2023.7.30 class Solution { public:int jump(vector<int>& nums) {int step 0;int cover 0;int largest 0;if(nums.size() 1) return step;for(int i0; i<nums.size(); i){cover max(cover , inums[i]); //最大覆盖范围if(cover > nums.size()-1) retur…...

力扣热门100题之矩阵置0【中等】
题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 示例 2ÿ…...

【机器学习】Classification using Logistic Regression
Classification using Logistic Regression 1. 分类问题2. 线性回归方法3. 逻辑函数(sigmod)4.逻辑回归5. 决策边界5.1 数据集5.2 数据绘图5.3 逻辑回归与决策边界的刷新5.4 绘制决策边界 导入所需的库 import numpy as np %matplotlib widget import m…...

全方位支持图文和音视频、100+增强功能,Facebook开源数据增强库AugLy
Facebook 近日开源了数据增强库 AugLy,包含四个子库,每个子库对应不同的模态,每个库遵循相同的接口。支持四种模态:文本、图像、音频和视频。 最近,Facebook 开源了一个新的 Python 库——AugLy,该库旨在帮…...

RxSwift 使用方式
背景 最近项目业务,所有模块已经支持Swift混编开发,正在逐步使用Swift 方式进行开发新业务,以及逐步替换老业务方式进行发展,所以使用一些较为成熟的Swift 的三方库,成为必要性,经过调研发现RxSwift 在使用…...
HTML5 Web Worker
HTML5 Web Worker是一种浏览器提供的JavaScript多线程解决方案,它允许在后台运行独立于页面主线程的脚本,从而避免阻塞页面的交互和渲染。Web Worker可以用于执行计算密集型任务、处理大量数据、实现并行计算等,从而提升前端应用的性能和响应…...

25.9 matlab里面的10中优化方法介绍—— 惩罚函数法求约束最优化问题(matlab程序)
1.简述 一、算法原理 1、问题引入 之前我们了解过的算法大部分都是无约束优化问题,其算法有:黄金分割法,牛顿法,拟牛顿法,共轭梯度法,单纯性法等。但在实际工程问题中,大多数优化问题都属于有约…...

django channels实战(websocket底层原理和案例)
1、websocket相关 1.1、轮询 1.2、长轮询 1.3、websocket 1.3.1、websocket原理 1.3.2、django框架 asgi.py在django项目同名app目录下 1.3.3、聊天室 django代码总结 小结 1.3.4、群聊(一) 前端代码 后端代码 1.3.5、群聊(二)…...

学习使用axios,绑定动态数据
目录 axios特性 案例一:通过axios获取笑话 案例二:调用城市天气api接口数据实现天气查询案例 axios特性 支持 Promise API 拦截请求和响应(可以在请求前及响应前做某些操作,例如,在请求前想要在这个请求头中加一些…...

c语言内存函数的深度解析
本章对 memcpy,memmove,memcmp 三个函数进行详解和模拟实现; 本章重点:3个常见内存函数的使用方法及注意事项并学会模拟实现; 如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作的动力…...

低代码平台介绍(国内常见的)
文章目录 前言1、阿里云宜搭2、腾讯云微搭3、百度爱速搭4、华为云Astro轻应用 Astro Zero(AppCube)5、字节飞书多维表格6、云程低代码平台7、ClickPaaS8、网易轻舟9、用友YonBuilder10、金蝶苍穹云平台11、泛微平台12、蓝凌低代码平台13、简道云14、轻流…...

matlab RRR机械臂 简略代码
RRR机器人!启动! gazebo在arm mac上似乎难以运行,退而选择Matlab,完成老师第一个作业,现学现卖,权当记录作业过程,有不足之处,多多指教。 作业!启动! RRR机…...
集成测试,单元测试隔离 maven-surefire-plugin
详见 集成测试,单元测试隔离 maven-surefire-plugin maven的goal生命周期 Maven生存周期 - 含 integration-test Maven本身支持的命令(Goals)是有顺序的,越后面执行的命令,会将其前面的命令和其本身按顺序执行一遍,…...

渗透测试基础知识(1)
渗透基础知识一 一、Web架构1、了解Web2、Web技术架构3、Web客户端技术4、Web服务端组成5、动态网站工作过程6、后端存储 二、HTTP协议1、HTTP协议解析2、HTTP协议3、http1.1与http2.0的区别4、HTTP协议 三、HTTP请求1、发起HTTP请求2、HTTP响应与请求-HTTP请求3、HTTP响应与请…...

Android NDK开发
工程目录图 NDK中文官网 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:TestNDK 参考文献 Android NDK 从入门到精通(汇总篇)Android JNI(一)——NDK与JNI基础Android之…...
使用python爬取淘宝商品信息
要使用Python爬取淘宝商品信息,您可以按照以下步骤: 安装必要的库 您需要安装Python的requests库和BeautifulSoup库。 要使用Python爬取淘宝商品信息,您可以按照以下步骤:安装必要的库 您需要安装Python的requests库和Beautifu…...
QEMU源码全解析18 —— QOM介绍(7)
接前一篇文章:QEMU源码全解析17 —— QOM介绍(6) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上一回完成了对…...
【华为OD机试】 选修课
题目描述 现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...