Dubbo3简单使用
Dubbo3简单使用
👉 使用Spring Boot实现Dubbo3,请参见以下地址。
# Dubbo3官网地址
https://cn.dubbo.apache.org/zh/# 使用SpringBoot实现Dubbo3的地址
https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/# 该项目的git地址
https://github.com/MasonYyp/mydubbo
1 同一个项目中创建多个应用
1.1 创建空项目
(1)创建空项目

(2)提示错误
⚠️ 注意:会提示下面错误,点击“OK”即可。

(3)空项目创建完成

1.2 创建应用模块
(1)创建模块

(2)创建Maven
选择Maven模块,点击“Next”。

(3)设置应用信息
设置应用信息后,点击“Finish”即可。

(4)创建完成

1.3 创建其他
创建其他应用的方法和上面的方法类似,分别创建Dubbo的服务提供者(duprovider)和服务消费者(duconsumer)。
- GroupId: com.mason
- Version: 1.0
- 创建应用的目录:mydubbo目录下
分别在应用下创建java包(选择Module时创建Maven默认不会创建java包)。
| 应用名称(ch) | 应用名称(en) | 包名 | 备注 |
|---|---|---|---|
| 公共模块 | ducommon | com.mason.ducommon | 为其他模块提供公共接口 |
| 服务提供者 | duprovider | com.mason.duprovider | 提供服务 |
| 服务消费者 | duconsumer | com.mason.duconsumer | 消费服务 |
应用创建完成后如下

2 软件版本选择
(1)Spring Cloud Alibaba版本说明
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
(2)Spring Cloud版本说明
# 介绍了相应的版本
https://spring.io/projects/spring-cloud#overview# 介绍了稳定版(含有GA标识)
https://spring.io/projects/spring-cloud#learn
(3)版本选择
⚠️ 组件版本很重要,需要慎重选择,Dubbo3需要配合Nacos2使用。
| 软件 | 版本号 |
|---|---|
| Spring Cloud | Hoxton.SR12 |
| Spring Boot | 2.3.12.RELEASE |
| Spring Cloud Alibaba | 2.2.9.RELEASE |
| Sentinel | 1.8.5 |
| Nacos | 2.1.0 |
| RocketMQ | 4.9.4 |
| Seata | 1.5.2 |
| Dubbo | 3.1.4 |
3 安装nacos
3.1 Nacos安装参考地址
https://blog.csdn.net/make_progress/article/details/128855472
3.2 安装MySQL
# 创建网桥
docker network create --driver bridge du_net# 下载MySQL
docker pull mysql:5.7.34# 创建数据库
docker run -itd --name du_mysql \
--net du_net \
--restart=always \
-p 3306:3306 \
-v /home/dubbo/mysql/conf:/etc/mysql/conf.d \
-v /home/dubbo/mysql/data:/var/lib/mysql \
-v /home/dubbo/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7.34
3.3 初始化Nacos数据库
# 解压“nacos-server-2.1.0.zip”文件,将“nacos-server-2.1.0/nacos/conf”目录中的“nacos-mysql.sql”复制到容器中
docker cp nacos-mysql.sql du_mysql:/home/# 进入容器
docker exec -it du_mysql /bin/bash# 进入MySQL数据库,输入密码后进入MySQL
mysql -u root -p# 创建数据库
create database nacos_config;# 切换数据库
use nacos_config# 导入nacos配置信息到数据库
source /home/nacos-mysql.sql
3.4 安装Nacos
# 下载Nacos镜像
docker pull nacos/nacos-server:v2.1.0# 安装nacos
# 注意:Nacos2比Nacos1多开9848、9849两个端口需求全部开放,否则应用无法注册到Nacos
docker run -itd --name du_nacos \
--net du_net \
--restart=always \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--env MODE=standalone \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=du_mysql \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_USER=root \
--env MYSQL_SERVICE_PASSWORD=123456 \
--env MYSQL_SERVICE_DB_NAME=nacos_config \
nacos/nacos-server:v2.1.0
访问Nacos
# 地址
http://192.168.108.200:8848/nacos账号:nacos
密码:nacos
4 公共模块
4.1 项目截图

4.2 pom.xml
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mason</groupId><artifactId>ducommon</artifactId><version>1.0</version><properties><java.version>11</java.version></properties><dependencies><!-- Parse json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency><!-- Init the entity --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency></dependencies></project>
4.3 服务层service下接口文件
service包下文件
package com.mason.ducommon.service;public interface TestService {public String getInfo(String message);
}
5 服务提供者
5.1 项目截图

5.2 pom.xml
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mason</groupId><artifactId>duprovider</artifactId><version>1.0</version><properties><java.version>11</java.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version></properties><dependencies><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>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 引入自定义的公共模块 --><dependency><groupId>com.mason</groupId><artifactId>ducommon</artifactId><version>1.0</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
5.3 yml文件
服务提供者做了3个节点,yml文件有“application-node1.yml,application-node2.yml,application-node3.yml”
application-node1.yml
server:port: 8081spring:# 配置注册在Nacos中的应用名称application:name: app-duprovidercloud:# 设置Nacos服务注册地址nacos:discovery:server-addr: 192.168.108.200:8848dubbo:# 设置Dubbo服务的应用名,如果不设置此应用名默认为应用名,此外默认为“app-duprovider”application:name: dubbo-duprovider# 设置Dubbo协议信息protocol:name: dubbo# 端口可以设置为“-1”,表示端口自增长port: 9081# 设置注册地址registry:address: nacos://192.168.108.200:8848# 设置服务超时provider:timeout: 3000management:endpoints:web:exposure:include: '*'
application-node2.yml
server:port: 8082spring:application:name: app-duprovidercloud:nacos:discovery:server-addr: 192.168.108.200:8848dubbo:application:name: dubbo-duproviderprotocol:name: dubboport: 9082registry:address: nacos://192.168.108.200:8848provider:timeout: 3000management:endpoints:web:exposure:include: '*'
application-node3.yml
server:port: 8083spring:application:name: app-duprovidercloud:nacos:discovery:server-addr: 192.168.108.200:8848dubbo:application:name: dubbo-duproviderprotocol:name: dubboport: 9083registry:address: nacos://192.168.108.200:8848provider:timeout: 3000management:endpoints:web:exposure:include: '*'
5.4 controller
此处的controller的作用是查看服务是否启动,与Dubbo提供服务无关,可以不要controller。
DubboController.java
package com.mason.duprovider.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/provider")
public class DubboController {@Value("${server.port}")private String port;@RequestMapping("/getdata")public String getData(){return "Dubbo " + this.port;}
}
5.5 service
提供Dubbo服务,实现公共模块(ducommon)中的服务接口。
Dubbo在新版本中使用@DubboService,旧版本中使用@Service,将Dubbo服务注册到注册中心。
TestServiceImpl.java
package com.mason.duprovider.service;import com.mason.ducommon.service.TestService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Value;@DubboService
public class TestServiceImpl implements TestService {@Value("${server.port}")private String port;@Overridepublic String getInfo(String message) {return "Service " + this.port + message;}
}
5.6 启动类
DuproviderApplication.java
⚠️ 注意:需要在启动类上,添加“@EnableDubbo"注解
package com.mason.duprovider;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo
public class DuproviderApplication {public static void main(String[] args) {SpringApplication.run(DuproviderApplication.class, args);}}
5.7 访问controller的服务
# 访问地址
http://127.0.0.1:8081/provider/getdata
浏览器结果

Nacos中结果

6 服务消费者
6.1 项目截图

6.2 pom.xml
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mason</groupId><artifactId>duconsumer</artifactId><version>1.0</version><properties><java.version>11</java.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version></properties><dependencies><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>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 引入自定义的公共模块 --><dependency><groupId>com.mason</groupId><artifactId>ducommon</artifactId><version>1.0</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
6.3 yml文件
服务消费者也做了3个节点,yml文件有“application-node1.yml,application-node2.yml,application-node3.yml”
application-node1.yml
server:port: 8091spring:# 配置注册在Nacos中的应用名称application:name: app-duconsumercloud:# 设置Nacos服务注册地址nacos:discovery:server-addr: 192.168.108.200:8848dubbo:# 此处可以不设置Dubbo服务的应用名,因为没有注册Dubbo服务application:name: dubbo-duprovider# 设置Dubbo协议信息protocol:name: dubbo# 端口可以设置为“-1”,表示端口自增长port: 9091# 设置注册地址registry:address: nacos://192.168.108.200:8848# 设置服务超时provider:timeout: 3000management:endpoints:web:exposure:include: '*'
application-node2.yml
server:port: 8092spring:application:name: app-duconsumercloud:nacos:discovery:server-addr: 192.168.108.200:8848dubbo:application:name: dubbo-duproviderprotocol:name: dubboport: 9092registry:address: nacos://192.168.108.200:8848provider:timeout: 3000management:endpoints:web:exposure:include: '*'
application-node3.yml
server:port: 8093spring:application:name: app-duconsumercloud:nacos:discovery:server-addr: 192.168.108.200:8848dubbo:application:name: dubbo-duproviderprotocol:name: dubboport: 9093registry:address: nacos://192.168.108.200:8848provider:timeout: 3000management:endpoints:web:exposure:include: '*'
6.4 controller
控制层,为用户提供服务。
DubboController.java
package com.mason.duconsumer.controller;import com.mason.duconsumer.service.TestServiceRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/consumer")
public class DubboController {@Autowiredprivate TestServiceRequest testServiceRequest;@RequestMapping("/getdata")public String getData(){return this.testServiceRequest.getInfo();}}
6.5 service
服务层,消费Dubbo服务提供者提供的服务。
Dubbo在新版本中使用@DubboReference,旧版本中使用@Reference,消费注册中心的Dubbo服务。
TestServiceRequest.java
package com.mason.duconsumer.service;import com.mason.ducommon.service.TestService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;@Service
public class TestServiceRequest {@DubboReferenceprivate TestService testService;public String getInfo() {return this.testService.getInfo(" -- Hello Dubbo");}
}
6.6 启动类
DuconsumerApplication.java
package com.mason.duconsumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DuconsumerApplication {public static void main(String[] args) {SpringApplication.run(DuconsumerApplication.class, args);}}
6.7 访问controller的服务
# 访问地址
http://127.0.0.1:8081/consumer/getdata
浏览器中的结果

Nacos中结果

相关文章:
Dubbo3简单使用
Dubbo3简单使用 👉 使用Spring Boot实现Dubbo3,请参见以下地址。 # Dubbo3官网地址 https://cn.dubbo.apache.org/zh/# 使用SpringBoot实现Dubbo3的地址 https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/# 该项目的git地址…...
Redis未授权漏洞蜜罐模拟与捕获分析
1.概述 文章主要分析Redis未授权漏洞的原理及形成原因,使用vulhub靶场进行漏洞复现,在了解漏洞原理并复现的基础上使用golang编写蜜罐代码进行模拟,开放端口在网上捕获真实存在的恶意攻击行为,对恶意样本进行分析,总结…...
Spring Security Oauth2.0认证授权
基本概念认证: 用户认证就是判断一个用户的身份是否合法的过程 ,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机…...
安卓小游戏:贪吃蛇
安卓小游戏:贪吃蛇 前言 这个是通过自定义View实现小游戏的第二篇,实际上第一篇做起来麻烦点,后面的基本就是照葫芦画瓢了,只要设计下游戏逻辑就行了,技术上不难,想法比较重要。 需求 贪吃蛇࿰…...
CUDA中的图内存节点
CUDA中的图内存节点 文章目录CUDA中的图内存节点1. 简介2. 支持的架构和版本3. API基础知识3.1. 图节点 APIs3.2. 流捕获3.3. 在分配图之外访问和释放图内存3.4. cudaGraphInstantiateFlagAutoFreeOnLaunch4. 优化内存复用4.1. 解决图中的重用问题4.2. 物理内存管理和共享5. 性…...
你真的看好低代码开发吗?
低代码开发前景如何,大家真的看好低代码开发吗?之前有过很多关于低代码的内容,这篇就来梳理下国内外低代码开发平台发展现状及前景。 01、国外低代码开发平台现状 2014年,研究机构Forrester Research发表的报告中提到“面向客户…...
一篇带你MySQL运维
1. 日志 1.1 错误日志 错误日志是 MySQL 中 重要的日志之一,它记录了当 mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&…...
《嵌入式 – GD32开发实战指南》第22章 SPI
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 22.1 SPI简介 SPI,是Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的…...
一个优质软件测试工程师的简历应该有的样子(答应我一定要收藏起来)
个人简历 基本信息 姓 名:xxx 性 别: 女 年 龄:24 现住 地址: 深圳 测试 经验:3年 学 历:本科 联系 电话:18xxxxxxxx 邮 箱:xxxxl163.com 求职意向 应聘岗位:软件…...
C++ 浅谈之 STL Deque
C 浅谈之 STL Deque HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 C 浅谈系列,收录在专栏 C 语言中 😜😜😜 本系列阿呆将记录一些 C 语言重要的语法特性 🏃&a…...
Koa2-项目中的基本应用
文章目录安装配置koa2配置nodemon,热更新我们的项目中间件什么是中间件👻洋葱模型路由中间件连接数据库 - mysql后端允许跨域处理请求getpostputdelete后续会继续更新安装配置koa2 👻安装 koa2 npm i koa2 -s👻在package.json 配置,当然是在…...
Flask入门(2):配置
目录2.Flask配置2.1 直接写入主脚本2.2 系统环境变量2.3 单独的配置文件2.4 多个配置类2.5 Flask内置配置2.Flask配置 我们都知道,Flask应用程序肯定是需要各种各样的配置。来满足我们不同的需求的,这样可以使我们的应用程序更加灵活。比如可以根据需要…...
Linux--fork
一、fork入门知识 fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。可以简单地说fork()的作用就是创建一…...
计算机组成原理(一)
1.了解计算机硬件的发展和软件的发展历程; 硬件: 电子管时代(1946-1959):电子管、声汞延迟线、磁鼓 晶体管时代(1959-1964):晶体管、磁芯 中、小规模集成电路时代&#…...
【SpringBoot】实现Async异步任务
1. 环境准备 在 Spring Boot 入口类上配置 EnableAsync 注解开启异步处理。 创建任务抽象类 AbstractTask,并分别配置三个任务方法 doTaskOne(),doTaskTwo(),doTaskThree()。 public abstract class AbstractTask {private static Random r…...
Node =>Express学习
1.Express 能做什么 能快速构建web网站的服务器 或 Api接口的服务期 Web网站服务器,专门对外提供Web网页资源的服务器Api接口服务器:专门对外提供API接口的服务器 2.安装 在项目所处的目录中,运行以下命令,简装到项目中了 npm …...
QT基础入门【布局篇】消除控件之间的间隔
一、相关参数 layoutLeftMargin: layout内的布局距离边框左端的距离。 layoutTopMargin: layout内的布局距离边框顶端的距离。 layoutRightMargin: layout内的布局距离边框右端的距离。 layoutBottomMargin: layout内的布局距离边框底端的距离。 layoutHorizontalSpacing: layo…...
vue脚手架 element-ui spring boot 实现图片上传阿里云 并保存到数据库
一.阿里云 注册登陆就不讲了,登陆进去后如下操作 1. 进入对象存储OSS 创建一个新的Bucket 随后点击新建的bucket 2.去访问RAM 前往RAM控制台 3.去创建用户 4.创建密匙 5.随后返回RAM控制台 给用户增加权限,文件上传所需权限,需要带含有…...
【FPGA】Verilog:组合电路 | 3—8译码器 | 编码器 | 74LS148
前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:编码/译码器的应用 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度 存储器&…...
GLP-1类药物研发进展-销售数据-上市药品前景分析
据一项2021 年的报告发现,当 GLP-1 类似物用于治疗 2 型糖尿病时,全因死亡率降低了 12%,它们不仅降糖效果显著,同时还兼具减重、降压、改善血脂谱等作用。近几年,随着GLP-1R激动剂类药物市场规模不断增长,美…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...
