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

Dubbo 融合 Nacos 成为注册中心

快速上手

Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单,大致步骤可分为“增加 Maven 依赖”以及“配置注册中心“。

增加 Maven 依赖

只需要依赖Dubbo客户端即可,关于推荐的使用版本,请参考Dubbo官方文档或者咨询Dubbo开发人员:

<dependencies>...<dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>3.0.5</version></dependency><!-- Dubbo Nacos registry dependency --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-registry-nacos</artifactId><version>3.0.5</version></dependency><!-- Alibaba Spring Context extension --><dependency><groupId>com.alibaba.spring</groupId><artifactId>spring-context-support</artifactId><version>1.0.11</version></dependency>...</dependencies>

配置注册中心

假设您 Dubbo 应用使用 Spring Framework 装配,将有两种配置方法可选,分别为:Dubbo Spring 外部化配置以及 Spring XML 配置文件以及,笔者强烈推荐前者。

Dubbo Spring 外部化配置

Dubbo Spring 外部化配置是由 Dubbo 2.5.8 引入的新特性,可通过 Spring Environment 属性自动地生成并绑定 Dubbo 配置 Bean,实现配置简化,并且降低微服务开发门槛。

假设您 Dubbo 应用的使用 Nacos 作为注册中心,并且其服务器 IP 地址为:10.20.153.10,同时,该注册地址作为 Dubbo 外部化配置属性存储在 dubbo-config.properties 文件,如下所示:

## application
dubbo.application.name = your-dubbo-application## Nacos registry address
dubbo.registry.address = nacos://10.20.153.10:8848
##如果要使用自己创建的命名空间可以使用下面2种方式
#dubbo.registry.address = nacos://10.20.153.10:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932
#dubbo.registry.parameters.namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932
...

随后,重启您的 Dubbo 应用,Dubbo 的服务提供和消费信息在 Nacos 控制台中可以显示:

image-20181213103845976-4668726.png | left | 747x284

如图所示,服务名前缀为 providers: 的信息为服务提供者的元信息,consumers: 则代表服务消费者的元信息。点击“详情”可查看服务状态详情:

image-20181213104145998-4668906.png | left | 747x437

如果您正在使用 Spring XML 配置文件装配 Dubbo 注册中心的话,请参考下一节。

Spring XML 配置文件

同样,假设您 Dubbo 应用的使用 Nacos 作为注册中心,并且其服务器 IP 地址为:10.20.153.10,并且装配 Spring Bean 在 XML 文件中,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="dubbo-provider-xml-demo"  /><!-- 使用 Nacos 注册中心 --><dubbo:registry address="nacos://10.20.153.10:8848" /><!-- 如果要使用自己创建的命名空间可以使用下面配置 --><!-- <dubbo:registry address="nacos://10.20.153.10:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932" /> -->...
</beans>

重启 Dubbo 应用后,您同样也能发现服务提供方和消费方的注册元信息呈现在 Nacos 控制台中:

image-20181213113049185-4671849.png | left | 747x274

您是否觉得配置或切换 Nacos 注册中心超级 Easy 呢?如果您仍旧意犹未尽或者不甚明白的话,可参考以下完整的示例。

完整示例

以上图片中的元数据源于 Dubbo Spring 注解驱动示例以及 Dubbo Spring XML 配置驱动示例,下面将分别介绍两者,您可以选择自己偏好的编程模型。在正式讨论之前,先来介绍两者的预备工作,因为它们皆依赖 Java 服务接口和实现。同时,请确保本地(127.0.0.1)环境已启动 Nacos 服务

示例接口与实现

完整代码归档位置: https://github.com/nacos-group/nacos-examples/tree/master/nacos-dubbo-example

首先定义示例接口,如下所示:

package com.alibaba.nacos.example.dubbo.service;public interface DemoService {String sayName(String name);
}

提供以上接口的实现类:


package com.alibaba.nacos.example.dubbo.service;import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.dubbo.rpc.RpcContext;
import org.springframework.beans.factory.annotation.Value;/*** Default {@link DemoService}*  https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html* @since 2.6.5*/
@Service(version = "${demo.service.version}")
public class DefaultService implements DemoService {@Value("${demo.service.name}")private String serviceName;public String sayName(String name) {RpcContext rpcContext = RpcContext.getContext();return String.format("Service [name :%s , port : %d] %s(\"%s\") : Hello,%s",serviceName,rpcContext.getLocalPort(),rpcContext.getMethodName(),name,name);}
}

接口与实现准备妥当后,下面将采用注解驱动和 XML 配置驱动各自实现。

Spring 注解驱动示例

Dubbo 2.5.7 重构了 Spring 注解驱动的编程模型。

服务提供方注解驱动实现

  • 定义 Dubbo 提供方外部化配置属性源 - provider-config.properties
## application
dubbo.application.name = dubbo-provider-demo## Nacos registry address
dubbo.registry.address = nacos://127.0.0.1:8848
##如果要使用自己创建的命名空间可以使用下面2种方式
#dubbo.registry.address = nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932
#dubbo.registry.parameters.namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932## Dubbo Protocol
dubbo.protocol.name = dubbo
dubbo.protocol.port = -1# Provider @Service version
demo.service.version=1.0.0
demo.service.name = demoServicedubbo.application.qosEnable=false
  • 实现服务提供方引导类 - DemoServiceProviderBootstrap
package com.alibaba.nacos.example.dubbo.provider;import com.alibaba.nacos.example.dubbo.service.DemoService;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.PropertySource;
import java.io.IOException;/*** {@link DemoService} provider demo* https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html*/
@EnableDubbo(scanBasePackages = "com.alibaba.nacos.example.dubbo.service")
@PropertySource(value = "classpath:/provider-config.properties")
public class DemoServiceProviderBootstrap {public static void main(String[] args) throws IOException {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.register(DemoServiceProviderBootstrap.class);context.refresh();System.out.println("DemoService provider is starting...");System.in.read();}
}

其中注解 @EnableDubbo 激活 Dubbo 注解驱动以及外部化配置,其 scanBasePackages 属性扫描指定 Java 包,将所有标注 @Service 的服务接口实现类暴露为 Spring Bean,随即被导出 Dubbo 服务。

@PropertySource 是 Spring Framework 3.1 引入的标准导入属性配置资源注解,它将为 Dubbo 提供外部化配置。

服务消费方注解驱动实现

  • 定义 Dubbo 消费方外部化配置属性源 - consumer-config.properties
## Dubbo Application info
dubbo.application.name = dubbo-consumer-demo## Nacos registry address
dubbo.registry.address = nacos://127.0.0.1:8848
##如果要使用自己创建的命名空间可以使用下面2种方式
#dubbo.registry.address = nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932
#dubbo.registry.parameters.namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932# @Reference version
demo.service.version= 1.0.0dubbo.application.qosEnable=false

同样地,dubbo.registry.address 属性指向 Nacos 注册中心,其他 Dubbo 服务相关的元信息通过 Nacos 注册中心获取。

  • 实现服务消费方引导类 - DemoServiceConsumerBootstrap
package com.alibaba.nacos.example.dubbo.consumer;import com.alibaba.nacos.example.dubbo.service.DemoService;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.PropertySource;
import javax.annotation.PostConstruct;
import java.io.IOException;/*** {@link DemoService} consumer demo* https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html*/
@EnableDubbo
@PropertySource(value = "classpath:/consumer-config.properties")
public class DemoServiceConsumerBootstrap {@DubboReference(version = "${demo.service.version}")private DemoService demoService;@PostConstructpublic void init() {for (int i = 0; i < 10; i++) {System.out.println(demoService.sayName("Nacos"));}}public static void main(String[] args) throws IOException {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.register(DemoServiceConsumerBootstrap.class);context.refresh();context.close();}
}

同样地,@EnableDubbo 注解激活 Dubbo 注解驱动和外部化配置,不过当前属于服务消费者,无需指定 Java 包名扫描标注 @Service 的服务实现。

@Reference 是 Dubbo 远程服务的依赖注入注解,需要服务提供方和消费端约定接口(interface)、版本(version)以及分组(group)信息。在当前服务消费示例中,DemoService 的服务版本来源于属性配置文件 consumer-config.properties

@PostConstruct 部分代码则说明当 DemoServiceConsumerBootstrap Bean 初始化时,执行十次 Dubbo 远程方法调用。

运行注解驱动示例

在本地启动两次 DemoServiceProviderBootstrap,注册中心将出现两个健康服务:

image-20181213123909636-4675949.png | left | 747x38

再运行 DemoServiceConsumerBootstrap,运行结果如下:

Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos

运行无误,并且服务消费方使用了负载均衡策略,将十次 RPC 调用平均分摊到两个 Dubbo 服务提供方实例中。

Spring XML 配置驱动示例

Spring XML 配置驱动是传统 Spring 装配组件的编程模型。

服务提供方 XML 配置驱动

  • 定义服务提供方 XML 上下文配置文件 - /META-INF/spring/dubbo-provider-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="dubbo-provider-xml-demo"/><!-- 使用 Nacos 注册中心 --><dubbo:registry address="nacos://127.0.0.1:8848"/><!-- 如果要使用自己创建的命名空间可以使用下面配置 --><!-- <dubbo:registry address="nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932" /> --><!-- 用dubbo协议在随机端口暴露服务 --><dubbo:protocol name="dubbo" port="-1"/><!-- 声明需要暴露的服务接口 --><dubbo:service interface="com.alibaba.nacos.example.dubbo.service.DemoService" ref="demoService" version="2.0.0"/><!-- 和本地bean一样实现服务 --><bean id="demoService" class="com.alibaba.nacos.example.dubbo.service.DefaultService"/>
</beans>
  • 实现服务提供方引导类 - DemoServiceProviderXmlBootstrap

package com.alibaba.nacos.example.dubbo.provider;import com.alibaba.dubbo.demo.service.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/*** {@link DemoService} provider demo XML bootstrap*/
public class DemoServiceProviderXmlBootstrap {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();context.setConfigLocation("/META-INF/spring/dubbo-provider-context.xml");context.refresh();System.out.println("DemoService provider (XML) is starting...");System.in.read();}
}

服务消费方 XML 配置驱动

  • 定义服务消费方 XML 上下文配置文件 - /META-INF/spring/dubbo-consumer-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="dubbo-consumer-xml-demo"/><!-- 使用 Nacos 注册中心 --><dubbo:registry address="nacos://127.0.0.1:8848"/><!-- 如果要使用自己创建的命名空间可以使用下面配置 --><!-- <dubbo:registry address="nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932" /> --><!-- 引用服务接口 --><dubbo:reference id="demoService" interface="com.alibaba.nacos.example.dubbo.service.DemoService" version="2.0.0"/></beans>
  • 实现服务消费方引导类 - DemoServiceConsumerXmlBootstrap

package com.alibaba.nacos.example.dubbo.consumer;import com.alibaba.dubbo.demo.service.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/*** {@link DemoService} consumer demo XML bootstrap*/
public class DemoServiceConsumerXmlBootstrap {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();context.setConfigLocation("/META-INF/spring/dubbo-consumer-context.xml");context.refresh();System.out.println("DemoService consumer (XML) is starting...");DemoService demoService = context.getBean("demoService", DemoService.class);for (int i = 0; i < 10; i++) {System.out.println(demoService.sayName("Nacos"));}context.close();}
}

运行 XML 配置驱动示例

同样地,先启动两个 DemoServiceProviderXmlBootstrap 引导类,观察 Nacos 注册中心服务提供者变化:

image-20181213125527201-4676927.png | left | 747x33

XML 配置驱动的服务版本为 2.0.0,因此注册服务无误。

再运行服务消费者引导类 DemoServiceConsumerXmlBootstrap,观察控制台输出内容:

Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos
Service [name :demoService , port : 20880] sayName("Nacos") : Hello,Nacos

结果同样运行和负载均衡正常,不过由于当前示例尚未添加属性 demo.service.name 的缘故,因此,“name”部分信息输出为 null

相关文章:

Dubbo 融合 Nacos 成为注册中心

快速上手 Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单&#xff0c;大致步骤可分为“增加 Maven 依赖”以及“配置注册中心“。 增加 Maven 依赖 只需要依赖Dubbo客户端即可&#xff0c;关于推荐的使用版本&#xff0c;请参考Dubbo官方文档或者咨询Dubbo开发人员&#…...

kafka--kafka基础概念-ISR详解

kafka基础概念-ISR详解 主要是讲 主 往 从同步中的问题 当绿色P1接收到写入的数据&#xff0c;要同步到紫色的P1S1和P1S2 如何保证一致性呢&#xff1f; 使用In Sync Replicas 也就是ISR概念 为什么不一致的&#xff1f; 因为P1S1同步数据 可能花费 50ms P1S2可能花费60ms…...

《Kubernetes部署篇:Ubuntu20.04基于外部etcd+部署kubernetes1.24.16集群(多主多从)》

一、架构图 如下图所示: 二、环境信息 1、部署规划 主机名K8S版本系统版本内核版本IP地址备注k8s-master-631.24.16Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.63master节点 + etcd节点k8s-master-641.24.16Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.64master节点 + …...

音频解码及如何在Java实现

本人并不干这个&#xff0c;但是被迫下水了解了一下这个&#xff0c;稍微做了一下整理。再就是感觉现在网上以及ChatGPT在这方面给出的答案太水了&#xff0c;在此开辟一篇。无意放出代码&#xff0c;这里只介绍一些可能重要的点。 本来以为有了ChatGPT写这些就没有必要了&…...

Webshell 及检测绕过

webshell 概念 web指的是在web服务器上&#xff0c;而shell是用脚本语言编写的脚本程序&#xff0c;WebShell是一种用来进行网站和服务器管理的脚本程序,webshell一般是被网站管理员用于网站管理、服务器管理等等一些用途&#xff0c;但是由于webshell的功能比较强大&#xff0…...

Ubuntu22.4系统mongodb数据库安装

Ubuntu22.4系统mongodb数据库安装 1、打开终端并运行以下命令&#xff0c;以导入 MongoDB GPG 密钥&#xff1a; wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -2、添加 MongoDB 仓库到你的系统。根据你的 Ubuntu 版本&#xff0c;选择…...

Vue初识别--环境搭建--前置配置过程

问题一&#xff1a; 在浏览器上的扩展程序上添加了vue-devtools后不生效&#xff1a; 解决方式&#xff1a;打开刚加入的扩展工具Vue.js devtools的允许访问文件地址设置 问题二&#xff1a;Vue新建一个项目 创建一个空文件夹hrsone&#xff0c;然后在VSCode中打开这个空文件夹…...

数据在内存中的储存·大小端(文字+画图详解)(c语言·超详细入门必看)

前言&#xff1a;Hello&#xff0c;大家好&#xff0c;我是心跳sy&#x1f618;&#xff0c;本节我们介绍c语言的两种基本的内置数据类型&#xff1a;数值类型和字符类型在内存中的储存方法&#xff0c;并对大小端进行详细介绍&#xff08;附两种大小端判断方法&#xff09;&am…...

Word怎么转换成PDF文档?多个Word转换成PDF步骤分享

word文档是一种非常好用的文件格式&#xff0c;可以帮助用户们很好的保存图片和文字内容&#xff0c;不过并不是只有word这一种文档类文件格式&#xff0c;还有一种pdf文档也深受用户们的欢迎&#xff0c;在工作或者学习过程中这两种文档是可以互相转换格式的&#xff0c;那么W…...

【C++习题集】-- 堆

&#xff08;用于复习&#xff09; 目录 树概念及结构 名词概念 二叉树概念及结构 特殊的二叉树 满二叉树 完全二叉树 运算性质 二叉树存储结构 顺序存储 链式存储 堆 - 顺序存储 堆的性质 堆的实现 堆的应用 堆排序 直接建堆法 树概念及结构 概念&#xff1a…...

vue + vue-office 实现多种文件(docx、excel、pdf)的预览

支持多种文件( docx、excel、pdf)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。 github: 《仓库地址》 演 示&#xff1a; 《演示效果》 功能特色 一站式&#xff1a;提供docx、pdf、excel多种文档的在线预览方案&#xff0c;有它就够了简单&#xff1a…...

30.Netty源码服务端启动主要流程

highlight: arduino-light 服务端启动主要流程 •创建 selector •创建 server socket channel •初始化 server socket channel •给 server socket channel 从 boss group 中选择一个 NioEventLoop •将 server socket channel 注册到选择的 NioEventLoop 的 selector •…...

ssh端口转发

在本地客户端操作&#xff1a; ssh远程连接一段时间会失效的问题 vim /etc/ssh_config或vim /etc/ssh/ssh_config 在末尾添加ServerAliveInterval 30&#xff0c;意思是30s会发送一次向服务器连接的请求&#xff0c;以保持会话始终在线 验证: 放一段时间不操作&#xff0c;…...

独立站SEO是什么意思?自主网站SEO的含义?

什么是独立站SEO优化&#xff1f;自建站搜索引擎优化是指什么&#xff1f; 独立站SEO&#xff0c;作为网络营销的重要一环&#xff0c;正在逐渐引起人们的关注。在当今数字化时代&#xff0c;独立站已经成为许多企业、个人宣传推广的首选平台之一。那么&#xff0c;究竟什么是…...

Android JNI系列详解之NDK和JNI介绍

一、前提 针对自己在Android JNI和NDK这块技术的空白知识点,进行这个JNI系列的学习,记录这一阶段的学习。学习的主要步骤:从概念原理解析--->边学边实战--->从易到难,循序渐进。(学习这一阶段的前提:需要有Android开发基础) 学完JNI-NDK开发系列,达到的目的有:…...

LeetCode //C - 20. Valid Parentheses

20. Valid Parentheses Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets.Open bracke…...

浅析Java设计模式之四策略模式

title: 浅析Java设计模式之四策略模式 date: 2018-12-29 17:26:17 categories: 设计模式 description: 浅析Java设计模式之四策略模式 1. 目录 1. 目录2. 概念 2.1. 应用场景2.2. 优缺点 2.2.1. 优点2.2.2. 缺点 3. 模式结构4. 样例 4.1. 定义策略4.2. 定义具体策略4.3. 定义…...

基于Spring Boot的餐厅订餐网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的餐厅订餐网站的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springbo…...

【图像分割】理论篇(1)评估指标代码实现

图像分割是计算机视觉中的重要任务&#xff0c;用于将图像中的不同区域分割成具有语义意义的区域。以下是几种常用的图像分割评价指标以及它们的代码实现示例&#xff08;使用Python和常见的计算机视觉库&#xff09;&#xff1a; 1. IoU (Intersection over Union) 与目标检…...

Git checkout 某个版本到指定文件夹下

文章目录 场景说明方案一&#xff1a;git archive 最简单省事方案二&#xff1a;git show 最灵活, 但文件较多时麻烦方案三&#xff1a;git --work-tree 有bug 场景说明 我不想checkout到覆盖本地工作区的文件&#xff0c; 而是想把该版本checkout到另外一个文件夹下&#xff…...

Java多态详解(2)

向上转型和向下转型 向上转型 定义&#xff1a;实际就是创建一个子类对象&#xff0c;将其当作父类对象来使用。 语法格式&#xff1a;父类类型 对象名 new 子类类型() Animal animal new Cat("元宝"&#xff0c; 2); animal是父类类型&#xff0c;但是可以引用子…...

Camtasia导入srt字幕乱码

我们在使用camtasia制作视频项目时&#xff0c;有时为了用户体验需要导入srt格式的字幕文件&#xff0c;在操作无误的情况下&#xff0c;一顿操作猛如虎之后字幕顺利的导入到软件中了&#xff0c;但字幕却出现了乱码的现象。如下图所示&#xff1a; 如何解决srt乱码问题呢&…...

YOLOv5、YOLOv8改进:SOCA注意力机制

目录 简介 2.YOLOv5使用SOCA注意力机制 2.1增加以下SOCA.yaml文件 2.2common.py配置 2.3yolo.py配置 简介 注意力机制&#xff08;Attention Mechanism&#xff09;源于对人类视觉的研究。在认知科学中&#xff0c;由于信息处理的瓶颈&#xff0c;人类会选择性地关注所有…...

机器人的运动范围

声明 该系列文章仅仅展示个人的解题思路和分析过程&#xff0c;并非一定是优质题解&#xff0c;重要的是通过分析和解决问题能让我们逐渐熟练和成长&#xff0c;从新手到大佬离不开一个磨练的过程&#xff0c;加油&#xff01; 原题链接 机器人的运动范围https://leetcode.c…...

学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

文章目录 2 函数的使用1.函数定义&#xff08;需要带类型&#xff09;2.函数声明&#xff08;需要带类型&#xff09;3.函数调用 3 新建文件&#xff0c;使用模块化编程新建xxx.c和xxx.h文件xxx.h格式&#xff1a;调用头文件验证代码调用&#xff1a;完整的文件结构如下&#x…...

微服务-Ribbon(负载均衡)

负载均衡的面对多个相同的服务的时候&#xff0c;我们选择一定的策略去选择一个服务进行 负载均衡流程 Ribbon结构组成 负载均衡策略 RoundRobinRule&#xff1a;简单的轮询服务列表来选择服务器AvailabilityFilteringRule 对两种情况服务器进行忽略&#xff1a; 1.在默认情…...

解决C#报“MSB3088 未能读取状态文件*.csprojAssemblyReference.cache“问题

今天在使用vscode软件C#插件&#xff0c;编译.cs文件时&#xff0c;发现如下warning: 图(1) C#报cache没有更新 出现该warning的原因&#xff1a;当前.cs文件修改了&#xff0c;但是其缓存文件*.csprojAssemblyReference.cache没有更新&#xff0c;需要重新清理一下工程&#x…...

GeoScene Pro在地图制图当中的应用

任何地理信息系统建设过程中&#xff0c;背景地图的展示效果对整个系统功能的实现没有直接影响&#xff1b;但是地图的好看与否&#xff0c;会间接的决定着整个项目的高度。 一幅精美的地图不仅能令人赏心悦目、眼前一亮&#xff0c;更能将人吸引到你的系统中&#xff0c;更愿意…...

国标混凝土结构设计规范的混凝土本构关系——基于python代码生成

文章目录 0. 背景1. 代码2. 结果测试 0. 背景 最近在梳理混凝土塔筒的计算指南&#xff0c;在求解弯矩曲率关系以及MN相关曲线时&#xff0c;需要混凝土的本构关系作为输入条件。 1. 代码 这段代码还是比较简单的。不过需要注意的是&#xff0c;我把受拉和受压两种状态统一了…...

系统架构设计-架构师之路(八)

软件架构概述 需求分析到软件设计之间的过渡过程就是软件架构。 需求分析人员整理成文档&#xff0c;但是开发人员对业务并不熟悉&#xff0c;这时候中间就需要一个即懂软件又懂业务的人&#xff0c;架构师来把文档整理成系统里的各个开发模块&#xff0c;布置开发任务。 软…...

交城有做网站的吗/seo搜索引擎实训心得体会

SpringCloud中的OpenFeign的超时控制和日志增强 为什么要学这个&#xff1f;你不想面试的时候多装两个逼多拿两千块钱&#xff1f; 先回顾一下我们之前OpenFeign的基本使用SpringCloud中的OpenFeign以及与Feign的区别。 我们现在衍生一下&#xff0c;在实际生产环境中&#x…...

wordpress flash加载插件/百度刷自己网站的关键词

最近跟我的一些读者交流&#xff0c;有一位读者的经历让我记忆深刻&#xff1a;“有一次和大学同学聚会&#xff0c;和几个在BAT的同学聊了聊技术&#xff0c;发现自己在创业公司这几年&#xff0c;完全是吃老本的状态&#xff0c;没有什么机会精进技术&#xff0c;同样是工作了…...

网站运营推广方法总结/杭州网站外包

您或您的团队目前是否手动测试并尝试采用自动化测试&#xff1f;在本文中&#xff0c;我们将概述小型QA团队如何从手工测试到无代码测试再到完全自动化的测试。这个过渡不会一蹴而就&#xff0c;但成功实现要比预期的容易得多。 1、对单调重复的手动测试说不 愿意对单调乏味的…...

山东网站建设价格/网络营销需要学什么

1、下载docker的安装文件 https://download.docker.com/linux/static/stable/x86_64/](javascript:void(0)) 下载安装文件&#xff1a;docker-18.06.3-ce.tgz 2、 将下载包上传到服务器 通过各种ftp上传工具。如&#xff1a;FinalShell、Xftp等&#xff1b; 3、解压下载包…...

莘县住房建设局网站/seo在线优化网站

新建maven项目, 在pom.xml中添加 profile节点信息如下: <profiles><profile><!-- 开发环境 --><id>dev</id><properties><environment>development</environment><!-- 节点名字environment是自己随意取的 --></pro…...

甘肃省路桥建设集团网站/app注册推广平台

致谢 感谢网友提出这个问题。大家有问题也可以在评论区提出&#xff0c;有问必有答。如果涉及商业需求&#xff0c;可以联系作者133-2459-8743。 问题描述 经常的&#xff0c;我们会遇到这样的问题。 1. 我们想在这台机器上渲染一个视口。同样的场景&#xff0c;希望在局域网…...