apache-dubbo
dubbo
文档地址
dubbo 官方文档地址
https://dubbo.apache.org/zh-cn/docs/user/references/api.html
nacos 官方文档地址
https://nacos.io/zh-cn/docs/quick-start.html
nacos下载地址
https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.gz
案例代码
https://gitee.com/hailong1024/springboot-dubbo.git
组件版本
组件 | 版本 |
---|---|
Spring Boot | 2.7.7 |
dubbo | 3.2.9 |
nacos客户端 | 2.4.3 |
nacos | 2.3.0 |
maven依赖
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.9</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.3.0</version></dependency>
单协议,单注册中心
yml配置
dubbo:application:name: dubbo-producerprotocol: # 单协议(dubbo)name: dubboport: 2881registry: # 单注册中心address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=public
多注册中心
yml配置
dubbo:application:name: dubbo-producerprotocol: # 单协议(dubbo)name: dubboport: 2881registries: # 多注册中心local: # 本地address: nacos://127.0.0.1:8848timeout: 1000dev: # 开发address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=publictimeout: 1000default: true
服务注册
@DubboService(registry = {"local"})
public class ProducerServiceImpl implements IApiService {@Overridepublic String print(String name) {return name + ":hello";}
}
在服务注册中使用 @DubboService(registry = {“local”,“dev”}) 指定注册中心,可以指定多个注册中心。
多协议 (dubbo和rest协议)
yml配置
dubbo:application:name: dubbo-producerregistries: # 多注册中心local: # 本地address: nacos://127.0.0.1:8848timeout: 1000dev: # 开发address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=publictimeout: 1000default: trueprotocols: # 多协议dubbo: # dubbo协议name: dubboport: 2882 # dubbo协议默认端口是20880rest: # rest协议name: rest # port: 2883 # rest协议默认端口是8080server: jetty
dubbo接口层配置
maven依赖
<dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-client</artifactId><version>3.13.0.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jaxrs</artifactId><version>3.13.0.Final</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-servlet</artifactId></dependency>
接口配置
@Path("/api")
public interface IApiService {@GET@Path("/print")String print(String name);
}
服务注册
@DubboService(registry = {"local"},protocol = {"dubbo","rest"})
public class ProducerServiceImpl implements IApiService {@Overridepublic String print(String name) {return name + ":hello";}
}
使用 @DubboService(registry = {“local”},protocol = {“dubbo”,“rest”}) 指定注册中心和协议
注:不推荐使用rest协议,rest会存在一些问题,比如序列化
负载均衡策略
//服务端配置
@DubboService(loadbalance = "roundrobin")
//消费端配置
@DubboReference(registry = {"dev"},check = false,loadbalance = "random")
private IApiService iApiService;
loacdbalance属性指定负载均衡策略,默认是random,可选值有:random、roundrobin、leastactive、consistenthash
- random:随机
- roundrobin:轮询
- leastactive:最少活跃调用数
- consistenthash:一致性hash
集群容错机制
cluster属性指定集群容错策略,默认是failover,可选值有:failover、failfast、failsafe、failback、forking、broadcast
- failover:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过retries="2"来设置重试次数(不含第一次)。
- failfast:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
- failsafe:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
- failback:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
- forking:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
- broadcast:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
服务降级
histroy配置
@Reference(version = "1.0.0",group = "dubbo",timeout = 1000,check = false,retries = 0,loadbalance = "roundrobin",cluster = "failfast",registry = {"dev"},mock = "com.example.dubbo.service.impl.ApiServiceMock")
mock = “com.example.springbootdubboconsumer.mock.ApiServiceMock”
public class ApiServiceMock implements IApiService {@Overridepublic String print(String name) {return "print:服务降级"+System.currentTimeMillis();}
}
常见配置
dubbo启动检查
@DubboReference(check = false) // 关闭启动检查,默认为true,消费端会从注册中心检测提供端服务是否存在。
dubbo超时配置
@DubboReference(timeout = 1000) // 配置超时时间,单位毫秒,默认是1000ms
dubbo重试次数
@DubboReference(retries = 2) // 配置重试次数,默认是2次,不含第一次调用。
dubbo版本控制
@DubboReference(version = “1.0.0”) // 配置版本号,默认是*,表示所有版本。
dubbo分组控制
@DubboReference(group = “dubbo”) // 配置分组,默认是*,表示所有分组。
dubbo多版本控制
@DubboReference(version = “1.0.0”,group = “dubbo”) // 配置多版本,默认是*,表示所有版本。
dubbo多注册中心
@DubboReference(registry = {“local”,“dev”}) // 配置多注册中心,默认是*,表示所有注册中心。
dubbo多协议
@DubboReference(protocol = {“dubbo”,“rest”}) // 配置多协议,默认是*,表示所有协议。
dubbo多注册中心多协议
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”}) // 配置多注册中心多协议,默认是*,表示所有注册中心所有协议。
dubbo多注册中心多协议多版本
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”) // 配置多注册中心多协议多版本,默认是*,表示所有注册中心所有协议所有版本。
dubbo多注册中心多协议多版本多分组
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false) // 配置多注册中心多协议多版本多分组,默认是*,表示所有注册中心所有协议所有版本所有分组。
dubbo多注册中心多协议多版本多分组多重试次数
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”) // 配置多注册中心多协议多版本多分组多重试次数,默认是*,表示所有注册中心
所有协议所有版本所有分组所有重试次数。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”) // 配置多注册中心多协议多版本多分组多重试次数多超时
时间,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”) // 配置多注册中心多协议多版本多分组
多重试次数多超时时间多负载均衡策略,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class) // 配置多注册
中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000
) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000) // 配置多注册中心多协议多版本多
分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000
,check = false) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间所有检查。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查多重试次数
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000
,check = false,retries = 2) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查多重试次数,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间所有检查所有重试次数。
优先级配置
方法层级别的配置优先于接口层面,接口层配置优先于全局配置
如果级别一致,客户端的配置优先,服务端次之
dubbo泛化
泛化调用:泛化接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过泛化调用实现。
泛化调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过泛化调用实现。
服务端
package com.example.springbootdubboproducer.service;public interface IHelloService {String sayHello(String name);
}
消费端
@DubboReference(interfaceName = "com.example.springbootdubboproducer.service.IHelloService")private GenericService genericService;@GetMapping("/sayHello")public String sayHello(){return genericService.$invoke("sayHello",new String[]{"java.lang.String"},new Object[]{"world"}).toString();}
多序列化支持
dubbo支持多种序列化方式,包括hessian、fastjson、kryo、protostuff等,默认使用hessian2序列化方式。
hessian2序列化方式
hessian2序列化方式是dubbo默认的序列化方式,它是一种二进制序列化方式,性能较好,但是可读性较差。
fastjson序列化方式
fastjson序列化方式是一种基于json的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。
kryo序列化方式
kryo序列化方式是一种基于二进制的序列化方式,性能较好,可读性较差,但是相对于hessian2性能较差。
maven依赖
<dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.2</version>
</dependency>
protostuff序列化方式
protostuff序列化方式是一种基于protobuf的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。
自定义序列化方式
如果dubbo自带的序列化方式不能满足需求,可以自定义序列化方式,实现com.alibaba.dubbo.common.serialize.Serialization
接口,并在配置文件中配置自定义序列化方式。
json序列化方式
json序列化方式是一种基于json的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。
xml序列化方式
xml序列化方式是一种基于xml的序列化方式,性能较差,可读性较好,但是相对于hessian2性能较差。
性能调优
- 网络传输优化:可以通过调整网络参数、使用压缩协议等方式来优化网络传输性能。
- 序列化优化:可以通过调整序列化方式、使用压缩协议等方式来优化序列化性能。
- 线程池优化:可以通过调整线程池参数、使用线程池监控等方式来优化线程池性能。
- 服务端优化:可以通过调整服务端参数、使用服务端监控等方式来优化服务端性能。
- 客户端优化:可以通过调整客户端参数、使用客户端监控等方式来优化客户端性能。
- 负载均衡优化:可以通过调整负载均衡策略、使用负载均衡监控等方式来优化负载均衡性能。
- 集群容错优化:可以通过调整集群容错策略、使用集群容错监控等方式来优化集群容错性能。
- 服务治理优化:可以通过调整服务治理策略、使用服务治理监控等方式来优化服务治理性能。
- 服务降级优化:可以通过调整服务降级策略、使用服务降级监控等方式来优化服务降级性能。
- 服务限流优化:可以通过调整服务限流策略、使用服务限流监控等方式来优化服务限流性能。
- 服务监控优化:可以通过调整服务监控策略、使用服务监控监控等方式来优化服务监控性能。
- 服务调用优化:可以通过调整服务调用策略、使用服务调用监控等方式来优化服务调用性能。
- 服务注册优化:可以通过调整服务注册策略、使用服务注册监控等方式来优化服务注册性能。
- 服务发现优化:可以通过调整服务发现策略、使用服务发现监控等方式来优化服务发现性能。
dubbo缓存文件
dubbo缓存文件主要包括以下几个方面:
- 注册中心缓存文件:注册中心缓存文件主要用于缓存注册中心的数据,提高注册中心的性能和可靠性。
- 服务提供者缓存文件:服务提供者缓存文件主要用于缓存服务提供者的数据,提高服务提供者的性能和可靠性。
- 服务消费者缓存文件:服务消费者缓存文件主要用于缓存服务消费者的数据,提高服务消费者的性能和可靠性。
- 服务调用缓存文件:服务调用缓存文件主要用于缓存服务调用的数据,提高服务调用的性能和可靠性。
dubbo:registry: #注册中心file: /path/to/registry/cache/fileprovider: #服务提供者file: /path/to/provider/cache/fileconsumer: #服务消费者file: /path/to/consumer/cache/fileinvocation: #服务调用file: /path/to/invocation/cache/file
dubbo-admin
简介
- dubbo-admin是一个可视化的dubbo管理工具,可以用于查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
- dubbo-admin的安装和使用非常简单,只需要将dubbo-admin的war包部署到tomcat中即可。
- dubbo-admin的配置文件位于
/WEB-INF/dubbo.properties
,可以配置注册中心的地址、dubbo-admin的端口等。 - dubbo-admin的界面非常友好,可以方便地查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
- dubbo-admin的监控功能非常强大,可以监控dubbo服务的调用次数、调用耗时、调用成功率等。
- dubbo-admin的配置管理功能非常强大,可以管理dubbo服务的配置、查看dubbo服务的配置历史等。
- dubbo-admin的日志管理功能非常强大,可以查看dubbo服务的日志、下载dubbo服务的日志等。
- dubbo-admin的告警功能非常强大,可以配置dubbo服务的告警规则、查看dubbo服务的告警历史等。
- dubbo-admin的权限管理功能非常强大,可以配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
- dubbo-admin的插件功能非常强大,可以安装各种插件来扩展dubbo-admin的功能。
安装
- 下载dubbo-admin的war包,可以从dubbo的官方网站上下载。
- 将dubbo-admin的war包部署到tomcat中,可以将其放在tomcat的webapps目录下。
- 启动tomcat,访问
http://localhost:8080/dubbo-admin
即可打开dubbo-admin的界面。
配置
- 在
/WEB-INF/dubbo.properties
文件中配置注册中心的地址、dubbo-admin的端口等。
dubbo.registry.address=zookeeper://127.0.0.1:2181 #注册中心的地址
dubbo.admin.port=8080 #dubbo-admin的端口
- 在
/WEB-INF/dubbo.properties
文件中配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
dubbo.admin.username=admin #dubbo-admin的用户名
dubbo.admin.password=admin #dubbo-admin的密码
dubbo.admin.access.log=true #是否记录dubbo-admin的访问日志
- 在
/WEB-INF/dubbo.properties
文件中配置dubbo-admin的告警规则、查看dubbo-admin的告警历史等。
dubbo.admin.alert.rule=cpu_usage > 80 #dubbo-admin的告警规则
dubbo.admin.alert.history=true #是否记录dubbo-admin的告警历史
- 在
/WEB-INF/dubbo.properties
文件中配置dubbo-admin的插件功能、查看dubbo-admin的插件日志等。
dubbo.admin.plugin=com.example.MyPlugin #dubbo-admin的插件
dubbo.admin.plugin.log=true #是否记录dubbo-admin的插件日志
- docker部署dubbo- admin
docker run -d -p 8080:8080 --name dubbo-admin -e JAVA_OPTS="-Xmx512m -Xms512m" -e TZ=Asia/Shanghai -e DubboAdminConfig.admin.registry.address=zookeeper://127.0.0.1:2181 -e DubboAdminConfig.admin.monitor.address=nacos://127.0.0.1:
8848 dubbo-admin/dubbo-admin:latest
功能
- 查看dubbo服务的状态:可以查看dubbo服务的状态,包括服务的名称、版本、分组、状态等。
- 监控dubbo服务的性能:可以监控dubbo服务的性能,包括服务的调用次数、调用耗时、调用成功率等。
- 管理dubbo服务的配置:可以管理dubbo服务的配置,包括服务的权重、负载均衡策略、超时时间等。
- 查看dubbo服务的日志:可以查看dubbo服务的日志,包括服务的调用日志、异常日志等。
- 配置dubbo服务的告警规则:可以配置dubbo服务的告警规则,包括服务的调用次数、调用耗时、调用成功率等。
- 查看dubbo服务的告警历史:可以查看dubbo服务的告警历史,包括服务的告警时间、告警内容等。
- 配置dubbo-admin的访问权限:可以配置dubbo-admin的访问权限,包括用户的权限、角色的权限等。
- 查看dubbo-admin的访问日志:可以查看dubbo-admin的访问日志,包括用户的访问时间、访问内容等。
- 安装dubbo-admin的插件:可以安装dubbo-admin的插件,扩展dubbo-admin的功能。
- 查看dubbo-admin的插件日志:可以查看dubbo-admin的插件日志,包括插件的安装时间、插件的内容等。
- 查看dubbo-admin的版本信息:可以查看dubbo-admin的版本信息,包括dubbo-admin的版本号、dubbo-admin的构建时间等。
- 查看dubbo-admin的帮助文档:可以查看dubbo-admin的帮助文档,包括dubbo-admin的使用方法、dubbo-admin的配置方法等。
- 查看dubbo-admin的关于信息:可以查看dubbo-admin的关于信息,包括dubbo-admin的版权信息、dubbo-admin的开发团队等。
- 查看dubbo-admin的更新日志:可以查看dubbo-admin的更新日志,包括dubbo-admin的更新时间、dubbo-admin的更新内容等。
- 查看dubbo-admin的反馈建议:可以查看dubbo-admin的反馈建议,包括用户的反馈时间、用户的反馈内容等。
- 查看dubbo-admin的插件市场:可以查看dubbo-admin的插件市场,包括各种插件的介绍、插件的安装方法等。
- 查看dubbo-admin的插件开发文档:可以查看dubbo-admin的插件开发文档,包括插件的开发方法、插件的接口规范等。
- 查看dubbo-admin的插件更新日志:可以查看dubbo-admin的插件更新日志,包括插件的更新时间、插件的更新内容等。
- 查看dubbo-admin的插件反馈建议:可以查看dubbo-admin的插件反馈建议,包括用户的反馈时间、用户的反馈内容等。
使用
- 在dubbo-admin的界面中,可以查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
- 在dubbo-admin的监控功能中,可以监控dubbo服务的调用次数、调用耗时、调用成功率等。
- 在dubbo-admin的配置管理功能中,可以管理dubbo服务的配置、查看dubbo服务的配置历史等。
- 在dubbo-admin的日志管理功能中,可以查看dubbo服务的日志、下载dubbo服务的日志等。
- 在dubbo-admin的告警功能中,可以配置dubbo服务的告警规则、查看dubbo服务的告警历史等。
- 在dubbo-admin的权限管理功能中,可以配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
- 在dubbo-admin的插件功能中,可以安装各种插件来扩展dubbo-admin的功能。
相关文章:
apache-dubbo
dubbo 文档地址 dubbo 官方文档地址 https://dubbo.apache.org/zh-cn/docs/user/references/api.html nacos 官方文档地址 https://nacos.io/zh-cn/docs/quick-start.html nacos下载地址 https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.…...

ECharts柱状图-柱图2,附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…...

【新人系列】Python 入门(十六):正则表达式
✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…...

HTML综合
一.HTML的初始结构 <!DOCTYPE html> <html lang"en"><head><!-- 设置文本字符 --><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置网页…...
孚盟云 MailAjax.ashx SQL注入漏洞复现
0x01 产品简介 上海孚盟软件有限公司是一家外贸SaaS服务提供商,也是专业的外贸行业解决方案专业提供商。 全新的孚盟云产品,让用户可以用云模式实现信息化管理,让用户的异地办公更加流畅,大大降低中小企业在信息化上成本,用最小的投入享受大型企业级别的信息化服务,主要…...

解决“VMware虚拟机报Intel VT-x”错误
今天,在windows系统上,打开VMware WorkStation v15软件里的虚拟机,弹出"Intel VT-x处于禁用状态"错误,如图(1)所示: 图(1) 虚拟机报"Intel VT-x"错误 问题原因:当前电脑的BIOS没有开启…...
NiceGUI `ui.table` 基础
NiceGUI ui.table 基础 ui.table 是 NiceGUI 提供的一个组件,用于在页面上展示数据表格 基本概念 官方简介 A table based on Quasar’s QTable component. 参数参考rows:list of row objects; 行对象列表columns:list of column objects (defaults to the colu…...

分布式 Raft算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…...
C++ 中面向对象编程如何实现动态绑定?
在 C 中,动态绑定(Dynamic Binding)是通过 虚函数(virtual function) 和 多态性(polymorphism) 来实现的。这是面向对象编程的重要特性之一,它允许程序在运行时根据对象的实际类型调…...

微服务-01
1.认识微服务 1.1 单体架构 单体架构(monolithic structure):顾名思义,整个项目中所有功能模块都在一个工程中开发;项目部署时需要对所有模块一起编译、打包;项目的架构设计、开发模式都非常简单。 当项目…...

这是一个vue3 + scss的数字滚动效果
介绍: 当数字变化时,只改变变化的数字位,其余的不变,可以递增、递减、骤变、负数也可以,但是样式要根据具体的项目需求去改; 效果1、增加数字: 效果2、减少数字: 使用方法: <te…...
数字证书管理工具 openssl keytool
OPENSSL 命令 openssl command [ command_opts ] [ command_args ] 常用command: version 用于查看版本信息 enc 用于加解密 ciphers 列出加密套件 genrsa 用于生成私钥 -des|-des3|-idea:用来加密私钥文件的三种对称加密算法。 rsa …...

Polars数据聚合与旋转实战教程
在这篇博文中,我们的目标是解决数据爱好者提出的一个常见问题:如何有效地从Polars DataFrame中创建汇总视图,以便在不同时间段或类别之间轻松进行比较。我们将使用一个实际的数据集示例来探索实现这一目标的各种方法。 Polars简介 Polars 是…...
引用类型集合的深拷贝,无需手动写循环:Apache Commons Lang (SerializationUtils)
在java中,我们如果想要对引用类型的集合进行深拷贝。有一种方式,就是调用SerializationUtils Apache Commons Lang (SerializationUtils) Apache Commons Lang 提供了 SerializationUtils 类,可以利用 Java 的序列化机制来进行集合及其元素…...

HTML、CSS表格的斜表头样式设置title 画对角线
我里面有用到layui框架的影响,实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…...

docker 安装mysql 5.7 详细保姆级教程
1. 安装mysql(5.7) docker pull mysql:5.7 若是拉取不了,可以配置下 docker 源 2. 查看是否安装成功 docker images 下图就是成功了 3.创建mysql专用目录、数据挂载目录、配置文件目录 ,演示目录在于/home/下 //命令逐条执行cd /home/ mkdir mysql …...

Kioptrix level3
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

UE5 Lyra项目源码分析-关卡配置加载
最近刚学完一套教程,准备研究研究官方的源码,看看自己能不能看懂。 当前分析只在本人能力之下能够分析的内容,如果有一些问题,还请大家指出。 开始 如果你打开一个别人的项目,你会从哪里看起,如果是我&am…...

Cursor重置机器码-解决Too many free trials.
参考文章:如何绕过Cursor的机器绑定限制 前言 在前面这篇文章无限使用Cursor指南中,我提到使用 无限邮箱 或者 删除账号并重新注册 的方法,来无限使用Cursor免费版。但是当在本机登录过3个账号后,就会报这个“Too many free tria…...

transformer学习笔记-自注意力机制(2)
经过上一篇transformer学习笔记-自注意力机制(1)原理学习,这一篇对其中的几个关键知识点代码演示: 1、整体qkv注意力计算 先来个最简单未经变换的QKV处理: import torch Q torch.tensor([[3.0, 3.0,0.0],[0.5, 4…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...