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机试】 选修课
题目描述 现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序…...

225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int to…...

IDEA将本地项目上传到码云
一、创建本地仓库并关联 用IDEA打开项目,在菜单栏点击vcs->create git repository创建本地仓库, 选择当前项目所在的文件夹当作仓库目录。 二、将项目提交本地仓库 项目名右键就会出现“GIT”这个选项->Add->Commit Directory, 先将项目add…...

Ubuntu更改虚拟机网段(改成桥接模式无法连接网络)
因为工作需要,一开始在安装vmware和虚拟机时,是用的Nat网络。 现在需要修改虚拟机网段,把ip设置成和Windows端同一网段,我们就要去使用桥接模式。 环境: Windows10、Ubuntu20.04虚拟机编辑里打开虚拟网络编辑器&#…...

谷粒商城第七天-商品服务之分类管理下的删除、新增以及修改商品分类
目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 删除功能 2.2 新增功能 2.3 修改功能 三、后端部分 3.1 删除接口 3.2 新增接口 3.3 修改接口 四、总结 一、总述 1.1 前端思路 删除和新增以及修改的前端无非就是点击按钮,就向后端发送请求…...

Redis学习路线(1)—— Redis的安装
一、NoSQL SQL VS NoSQL 1、名称 SQL 主要是指关系数据库。NoSQL 主要是指非关系数据库。 2、存储结构 SQL 是结构化的数据库,以表格的形式存储数据。NoSQL 是非结构化的数据库,以Key-Value(Redis),JSON格式文档&…...

《MySQL 实战 45 讲》课程学习笔记(五)
数据库锁:全局锁、表锁和行锁 根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。 MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要…...

使用GADL对高程数据进行填洼
对于DEM数据中存在的洼地(sink)问题,可以使用GADL(Geospatial Data Abstraction Library)中的功能进行填洼操作。GADL是一个开源的GIS库,提供了许多对地理空间数据进行处理和分析的功能。 下面是使用GADL对…...

Spring Boot集成Swagger3.0,Knife4j导出文档
文章目录 Spring Boot集成Swagger3.0,Knife4j导出文档效果展示如何使用简要说明添加依赖添加配置类测试接口token配置位置 官网 说明情况 demo Spring Boot集成Swagger3.0,Knife4j导出文档 效果展示 如何使用 简要说明 Knife4j的前身是swagger-bootstrap-ui,前身swagger-boo…...

在.NET Framework中的连接字符串ConnectionStrings属性
在.NET Framework中,ConfigurationManager.ConnectionStrings属性是用来访问在Visual Studio IDE应用程序配置文件中配置的数据库连接字符串的。每个连接字符串在Visual Studio IDE配置文件中都以<add>元素的形式出现,该元素是<connectionStrin…...

kafka消费报错卡死:内存溢出OutOfMemoryError: Java heap space
文章目录 现象排查解决 现象 我们信控平台使用Java语言开发,Spring Cloud微服务架构,采用容器化部署,所有服务都部署在docker里面,使用docker-compose进行管理,使用portainer进行监控平台部署客户现场后,一…...