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

Dubbo3入门项目搭建

开发环境:jdk8、dubbo3.2.9、nacos2.3.0、springboot2.7.17、dubbo-admin0.6.0。

Dubbo 是一个高性能的 Java RPC(远程调用)框架,最初由阿里巴巴开发并开源,主要用于构建 SOA 架构下的分布式应用系统( soa简单理解就是将重复功能或模块抽成通用组件,对外提供服务,从而实现复用)。 Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo支持多种通信协议 比如:dubbo、rmi、hessian、http、webservice、rest、redis等。

nacos即是注册中心又是配置中心,注册中心解决服务治理问题,配置中心解决配置文件散乱问题。

一、准备环境


1、mysql

1、在宿主机~/docker_install/mysql/目录下,创建docker-compose.yml文件:

version: '3.1'
services:mysql: #定义mysql服务image: mysql:8.4      #使用 MySQL 8.4 的官方镜像构建container_name: mysql8 #容器名称restart: always       #当Docker服务重启或容器异常退出时,容器会自动重启。ports:- "3307:3306"  #端口映射,将宿主机的3307端口映射到容器的3306端口volumes: #挂在目录- "~/docker_install/mysql/my.cnf:/etc/mysql/my.cnf"- "~/docker_install/mysql/data:/var/lib/mysql"- "~/docker_install/mysql/mysql-files:/var/lib/mysql-files"environment:MYSQL_ROOT_PASSWORD: 123456  #设置root用户的密码TZ: Asia/Shanghai    #时区LANG: en_US.UTF-8    #语言编码MYSQL_DATABASE: demo #初始化的数据库名称#授权  privileged: true     user: root

2、在宿主机~/docker_install/mysql/目录下,创建my.cnf文件:

#服务端参数配置
[mysqld]
user=root                             #MySQL启动用户
default-storage-engine=INNODB         #创建新表时将使用的默认存储引擎
character-set-server=utf8mb4          #设置mysql服务端默认字符集
collation-server=utf8mb4_general_ci   #数据库字符集对应一些排序等规则,注意要和character-set-server对应
default-authentication-plugin=mysql_native_passwordmax_connections=1000    # 允许最大连接数
max_connect_errors=100  # 最大错误连接数[mysql]
default-character-set=utf8mb4[client]
default-character-set=utf8mb4  # 设置mysql客户端默认字符集

3、创建容器

docker-compose -f docker-compose.yml -p mysql8 up -d

命令解释:

  • docker-compose :服务编排工具。
  • -f docker-compose.yml :指定要使用的yaml文件。
  • -p mysql8 :设置项目名称,docker compose 使用项目名称来命名创建的容器、网络和卷等资源。避免在同一主机上运行多个不同的compose项目时出现命名冲突。
  • up :用于启动由 docker-compose.yml 文件定义的所有服务。
  • -d(–detach):以分离模式(detached mode)运行容器。(后台方式运行)

docker-compose常用命令:

  • ps :基于docker-compose拉取的镜像生成的容器
  • up :docker-compose 创建和启动容器
  • scale :创建容器的数量
  • top :显示容器的进程
  • logs :看容器的输出日志
  • stop start、restart: 停止、启动、重启
  • down : 删除容器,网络,数据卷,镜像

2、nacos

基于docker-compose编排方式安装nacos,并使用mysql持久化nacos配置信息。

1、创建docker-compose.yaml:

version: '3'
services:nacos:image: nacos/nacos-server:v2.3.0-slim# 容器名称container_name: nacos# 端口映射ports:- 8848:8848- 9848:9848- 9849:9849# 容器权限privileged: true# 参数设置environment:JVM_XMS: 128mJVM_XMX: 128mJVM_MS: 64mJVM_MMS: 64mMODE: standaloneNACOS_REPLICAS: 1PREFER_HOST_MODE: ip# 挂载目录  volumes: - ./logs:/home/nacos/logs- ./plugins:/home/nacos/plugins- ./data:/home/nacos/data- ./config/application.properties:/home/nacos/conf/application.propertiesnetworks:nacos:aliases:- nacos_2.3.0
networks:nacos:name: nacos_2.3.0driver: bridge

2、在宿主机./config/目录下,创建application.properties:

# 只需要修改下面MySQL账号密码、连接地址
spring.datasource.platform=mysql
db.num=1	
db.url.0=jdbc:mysql://127.0.0.1:3307/nacos_conf?characterEncoding=utf8&	connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456# 随机字符串,要长点
nacos.core.auth.plugin.nacos.token.secret.key=0123321adsfffdasf343134124fasfdfdffas34134343
  • 在mysql中执行sql脚本:https://github.com/alibaba/nacos/blob/2.3.0/config/src/main/resources/META-INF/nacos-db.sql

3、创建容器

docker-compose up -d

img

nacos访问地址:http://ip:8848/nacos

3、dubbo-admin

dubbo-admin:https://github.com/apache/dubbo-admin/archive/refs/tags/0.6.0.zip

dubbo-admin (dubbo可视化后台)它是一个前后的分离项目,基于springboot+vue开发,需要依赖 nodejs、jdk、maven环境。

1、从github拉取代码:git clone https://github.com/apache/dubbo-admin.git

img

2、使用idea打开dubbo-admin-server,修改application.properties中的nacos配置:

server.port=38080
dubbo.protocol.port=30880
dubbo.application.qos-port=32222# centers in dubbo, if you want to add parameters, please add them to the url
admin.registry.address=nacos://127.0.0.1:8848
admin.config-center=nacos://127.0.0.1:8848
admin.metadata-report.address=nacos://127.0.0.1:8848
#---------------------------------------------------# dubbo-admin  账号密码
admin.root.user.name=root
admin.root.user.password=root#session timeout, default is one hour
admin.check.sessionTimeoutMilli=3600000#compress
server.compression.enabled=true
server.compression.mime-types=text/css,text/javascript,application/javascript
server.compression.min-response-size=10240#token timeout, default is one hour
admin.check.tokenTimeoutMilli=3600000
#Jwt signingKey
admin.check.signSecret=86295dd0c4ef69a1036b0b0c15158d77#dubbo config
dubbo.application.name=dubbo-admin
dubbo.registry.address=${admin.registry.address}
#dubbo.registry.parameters.namespace=70b158a6-7e64-478d-8c5b-699089aa81d1# id generate type
mybatis-plus.global-config.db-config.id-type=nonedubbo.application.logger=slf4j

3、运行dubbo-admin后端项目

img

通过nacos控制台可以看到dubbo-admin服务实例已成功注册到nacos中。

img

4、使用vscode或webstorm打开dubbo-admin-ui:(node版本16.20.2)

5、运行dobbo-admin前端项目:

# 安装项目依赖
npm install# 启动前端项目
npm run dev

img

6、浏览器访问duboo-admin web页面:http://localhost:38082/。账号/密码:root/root

img

二、项目搭建


项目地址:https://gitee.com/aopmin/dubbo3-demo.git

1、创建maven父工程

1、创建maven父工程,不使用脚手架方式构建:

img

2、父工程删除src源码目录

3、在父工程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>cn.aopmin</groupId><artifactId>dubbo3-demo</artifactId><version>1.0-SNAPSHOT</version><description>duubo3示例项目父工程</description><modules><module>dubbo3-provider</module><module>dubbo3-consumer</module><module>dubbo3-api</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.boot.version>2.7.17</spring.boot.version><nacos.boot.version>0.2.12</nacos.boot.version><dubbo.version>3.2.9</dubbo.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

最终项目结构:

img

2、创建公共接口模块

dubbo是一个面向接口的远程调用,消费端如果想要调用生产端的接口,只需引入对应api接口模块jar包即可,所以这里我们偷懒一下把它抽成公用模块方便复用。

创建一个dubbo接口:

package cn.aopmin.api;/*** HelloService* @author aopmin* @since 2024/12/29*/
public interface HelloService {String getMsg();
}

img

3、创建provider服务提供者

1、服务提供者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>cn.aopmin</groupId><artifactId>dubbo3-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo3-provider</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- springboot-web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- dubbo依赖 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version><exclusions><exclusion><artifactId>javassist</artifactId><groupId>org.javassist</groupId></exclusion></exclusions></dependency><!-- dubbo整合nacos --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><!-- <version>3.2.9</version> --><version>${dubbo.version}</version></dependency><!-- 公共接口模块 --><dependency><groupId>cn.aopmin</groupId><artifactId>dubbo3-api</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency></dependencies></project>

2、创建启动类

package cn.aopmin;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 服务提供者* @author aopmin* @since 2024/12/29*/
@EnableDubbo // 开启dubbo
@SpringBootApplication
public class ProviderApp {public static void main(String[] args) {SpringApplication.run(ProviderApp.class, args);System.out.println("Provider started successfully!");}
}

4、编写dubbo接口实现类

package cn.aopmin.service;import cn.aopmin.api.HelloService;
import org.apache.dubbo.config.annotation.DubboService;import java.time.LocalDateTime;
import java.util.HashMap;/*** dubbo接口实现类* @author aopmin* @since 2024/12/29*/
@DubboService
public class HelloSericeImpl implements HelloService {@Overridepublic String getMsg() {return new HashMap<String,Object>(){{put("status","200");put("msg","Hello Dubbo!");put("datetime", LocalDateTime.now());}}.toString();}
}

5、创建application.yml文件

server:port: 5656 # 服务端口号spring:application:name: dubbo3-provider # 服务名称# dubbo配置
dubbo:application:name: ${spring.application.name}# 通信规则,dubbo支持多种通信规则,如dubbo、rmi、hessian、http等protocol:name: dubbo #使用dubbo协议port: 20880  # dubbo协议端口,以供消费者访问,-1即为随机端口# 注册中心配置registry:address: nacos://127.0.0.1:8848 #nacos

6、启动服务提供者

img

启动成功后可以dubbo-admin、nacos中查看:

imgimg

最终项目结构:

img

4、创建consumer服务消费者

1、服务消费者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>cn.aopmin</groupId><artifactId>dubbo3-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo3-consumer</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- springboot-web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- &lt;!&ndash;nacos配置中心依赖&ndash;&gt; --><!-- <dependency> --><!--     <groupId>com.alibaba.boot</groupId> --><!--     <artifactId>nacos-config-spring-boot-starter</artifactId> --><!--     <version>${nacos.boot.version}</version> --><!-- </dependency> --><!-- dubbo依赖 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version><exclusions><exclusion><artifactId>javassist</artifactId><groupId>org.javassist</groupId></exclusion></exclusions></dependency><!-- dubbo整合nacos --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><!-- <version>3.2.9</version> --><version>${dubbo.version}</version></dependency><!-- 公共接口模块 --><dependency><groupId>cn.aopmin</groupId><artifactId>dubbo3-api</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency></dependencies>
</project>

2、创建启动类

package cn.aopmin;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 服务消费者* @author aopmin* @since 2024/12/29*/
@SpringBootApplication
public class ConsumerApp {public static void main(String[] args) {SpringApplication.run(ConsumerApp.class, args);System.out.println("Consumer started successfully!");}
}

3、配置application.yml:

server:port: 5657 # 服务端口号spring:application:name: dubbo3-consumer # 服务名称# dubbo配置
dubbo:application:name: ${spring.application.name}qosPort: 33333 # 服务质量监控中心端口,默认为22222# 通信规则,dubbo支持多种通信规则,如dubbo、rmi、hessian、http等protocol:name: dubbo #使用dubbo协议port: 20881  # dubbo协议端口,以供消费者访问,-1即为随机端口# 注册中心配置registry:address: nacos://127.0.0.1:8848 #nacos

4、编写web接口

package cn.aopmin.controller;import cn.aopmin.api.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** web接口* @author aopmin* @since 2024/12/29*/
@RestController
public class HelloController {// 注入远程服务(类似@autowried,只不过autowried注入的是spring容器中的bean对象), 设置超时时间:1s和重试次数:2次@DubboReference(timeout = 1000, retries = 1)private HelloService helloService;@RequestMapping("/hello")public String hello() {return helloService.getMsg();}
}

5、启动服务消费者

img

6、测试

curl -i -X GET "http://localhost:5657/hello" 

img

最终项目结构:

img

三、Dubbo运行原理


img

dubbo一次RPC调用的过程,分为4个角色:Client:消费者Client Stub:客户端存档,由框架实现Server Stub:服务端存档,由框架实现Server:提供者调用过程:1、Client发起远程调用Client发起远程调用,实际上是由它的代理ClientStub实现的ClientStub把要调用目标类、目标方法、实参等等进行序列化,然后通过网络传递给ServerStub。ServerStub接收数据反序列化,再调用对应的目标类、目标方法,得到执行结果ServerStub把目标方法的结果进行序列化,通过网络返回给ClientStubClientStub接收数据反序列化,得到结果。把这个结果返回给Client2、Client得到执行的结果,返回给调用者

相关文章:

Dubbo3入门项目搭建

开发环境&#xff1a;jdk8、dubbo3.2.9、nacos2.3.0、springboot2.7.17、dubbo-admin0.6.0。 Dubbo 是一个高性能的 Java RPC&#xff08;远程调用&#xff09;框架&#xff0c;最初由阿里巴巴开发并开源&#xff0c;主要用于构建 SOA 架构下的分布式应用系统( soa简单理解就是…...

形象地理解UE4中的数据结构 TLinkedListBase

大家都熟知链表&#xff0c;但不一定能快速看懂UE4中的数据结构。 TLinkedListBase表示“链接”中的一个结点&#xff0c;有三个成员&#xff1a; 一、ElementType Element; 表示具体的业务&#xff0c;例如int链条中的一个整数。 二、NextLink 表示 “下一个Node”&#…...

Python自然语言处理利器:SnowNLP模块深度解析、安装指南与实战案例

Python自然语言处理之SnowNLP模块介绍、安装与常见操作案例 一、SnowNLP模块介绍 SnowNLP是一个专为中文文本设计的Python库&#xff0c;它基于自然语言处理技术&#xff0c;提供了多种功能&#xff0c;包括分词、词性标注、情感分析、文本转换&#xff08;简繁转换&#xff…...

Llama系列关键知识总结

系列文章目录 第一章&#xff1a;LoRA微调系列笔记 第二章&#xff1a;Llama系列关键知识总结 第三章&#xff1a;LLaVA模型讲解与总结 文章目录 系列文章目录Llama: Open and Efficient Foundation Language Models关键要点LLaMa模型架构&#xff1a;Llama2分组查询注意力 (G…...

【开源】创建自动签到系统—QD框架

1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板&#xff0c;从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU&#xff1a;至少1核 内存&#xff1a;推荐 ≥ 1G 硬盘&#xff1a;推…...

​​​​​​​CDP集群安全指南系列文章导读

[一]大数据安全综述 1-认证 身份验证是任何计算环境的基本安全要求。简单来说&#xff0c;用户和服务必须在使用系统功能并获得授权之前&#xff0c;向系统证明其身份&#xff08;进行身份验证&#xff09;。身份验证与授权紧密配合&#xff0c;共同保护系统资源。大多数 CDH …...

MT8788安卓核心板_MTK8788核心板参数_联发科模块定制开发

MT8788安卓核心板是一款尺寸为52.5mm x 38.5mm x 2.95mm的高集成度电路板&#xff0c;专为各种智能设备应用而设计。该板卡整合了处理器、图形处理单元(GPU)、LPDDR3内存、eMMC存储及电源管理模块&#xff0c;具备出色的性能与低功耗特性。 这款核心板搭载了联发科的MT8788处理…...

【微软,模型规模】模型参数规模泄露:理解大型语言模型的参数量级

模型参数规模泄露&#xff1a;理解大型语言模型的参数量级 关键词&#xff1a; #大型语言模型 Large Language Model #参数规模 Parameter Scale #GPT-4o #GPT-4o-mini #Claude 3.5 Sonnet 具体实例与推演 近日&#xff0c;微软在一篇医学相关论文中意外泄露了OpenAI及Claud…...

深入理解并发原子性、可见性、有序性与JMM内存模型

1. 并发三大特性 并发编程Bug的源头&#xff1a;原子性、可见性和有序性问题 1.1 原子性 一个或多个操作&#xff0c;要么全部执行且在执行过程中不被任何因素打断&#xff0c;要么全部不执行。在 Java 中&#xff0c;对基本数据类型的变量的读取和赋值操作是原子性操作&…...

电商项目-数据同步解决方案(四)商品下架同步更新ES索引库数据

商品下架索引库删除数据 一、 需求分析和业务逻辑 商品下架后将商品从索引库中移除。 主要应用技术有&#xff1a; 消息队列-RabbitMQ &#xff0c;分布式搜索引擎-ElasticSearch&#xff0c;Eureka&#xff0c;Canal&#xff0c;Feign远程调用 &#xff08;1&#xff09;在…...

vue学习第一阶段

vue 什么是Vue? 概念:Vue是一个构建用户页面的渐进式框架 Vue的两种使用方式 Vue的核心开发 场景: 局部 {\color{red}局部} 局部模块改造Vue核心包& Vue插件 工程化开发场景: 整站 {\color{red}整站} 整站开发Vue2官网 https://v2.cn.vuejs.org/ 资料存放地址 D:\Baidu…...

React虚拟DOM:理解和应用

写在前面 在现代前端开发中&#xff0c;React 是一个非常流行的 JavaScript 库&#xff0c;用于构建用户界面。它引入了一个名为“虚拟 DOM”&#xff08;Virtual DOM&#xff09;的概念&#xff0c;这个概念对于 React 的高效性能和易用性至关重要。本文将深入探讨 React Vir…...

用python编写一个放烟花的小程序

import pygame import random # 代码解释及使用说明&#xff1a; # 首先&#xff0c;导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制&#xff0c;random 用于生成随机数。 # 初始化 pygame&#xff0c;并设置屏幕尺寸为 800x600 像素&#xff0c;设置窗口标题为…...

Git 仓库与文件管理笔记

Git 的三种仓库概念 本地仓库 (Local Repository) 位于本地 .git 文件夹中通过 git init 或 git clone 创建存储完整的项目历史和分支信息 远程仓库 (Remote Repository) 位于 GitHub、GitLab 等平台服务器使用 git remote -v 查看所有远程仓库默认远程仓库名通常为 origin 工…...

2024 年 docker 提示index.docker.io

发现 docker 提示以下错误&#xff1a; Error response from daemon: Get "https://index.docker.io/v1/search?qnginx&n25": dialing index.docker.io:443 container via direct connection because has no HTTPS proxy: connecting to index.docker.io:443:…...

TCP粘/拆包----自定义消息协议

今天是2024年12月31日&#xff0c;今年的最后一天&#xff0c;希望所有的努力在新的一年会有回报。❀ 无路可退&#xff0c;放弃很难&#xff0c;坚持很酷 TCP传输 是一种面向二进制的&#xff0c;流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…...

Modbus知识详解

Modbus知识详解 ## 1.什么是Modbus?**顾名思义**&#xff0c;它是一个Bus&#xff08;总线&#xff09;&#xff0c;即总线协议。比如串口协议、IIC协议、SPI都是通信协议。你接触到这种协议&#xff0c;相信你所处的行业是工业电子方面或者你的产品用于工业。好了&#xff0c…...

Java-创建一个结合CompletableFuture和自定义功能的工具类

1.重试机制:当异步任务失败时自动重试。 2.超时重试:在指定时间内未完成的任务进行重试。 3.批量处理:将多个任务批量执行并收集结果。 4.日志记录:为每个异步任务添加日志记录,便于调试和监控。 5.自定义线程池:允许用户传入自定义的线程池配置。 import java.util…...

【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算

【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算 一、简介 在MATLAB中计算Sobol二阶效应指数通常涉及到全局敏感性分析&#xff08;Global Sensitivity Analysis, GSA&#xff09;&#xff0c;其中Sobol方法是一种流行的技术&#xff0c;用于评估模型输入…...

C语言-sprintf

sprintf是一个在C语言中用于字符串格式化的函数&#xff0c;其功能是将格式化的数据写入某个字符串中。该函数定义stdio.h在头文件中&#xff0c;原型为: int sprintf(char *string, const char *format, ...); 函数参数 ‌ string‌&#xff1a;指向一个字符数组的指针&#…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...