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

消息队列RocketMQ-docker部署保姆级教程(从0到1)(2)

目录

引言

1. 准备工作

        1.1 准备虚拟机

1.2 将虚拟机的ip设置为静态ip地址

1.3 什么是nat网络

1.4 测试网络

2. 准备docker环境

2.1 卸载旧docker(如果有)

2.2 安装依赖包

2.3 添加 Docker 官方仓库(国内推荐使用阿里云镜像)

2.4 安装 Docker CE(社区版)

2.4.1 安装

2.4.2 启动docker

2.4.3 设置docker开机自启

2.4.4 验证是否安装成功

2.4.5 设置docker镜像地址

3. 安装RocketMQ

3.1 下载镜像

3.2 创建目录

3.3 启动docker-compose

3.4 关闭docker-compose

3.5 一键启动脚本

4. 通过Java sdk发送消息已经消费消息

4.1 创建Java项目

4.2 生产者

4.3 消费者

5. 每日一笑


引言

续接上文,上文我们了解到了消息队列,也详细介绍了Rocket MQ的特性和基本使用,这一章我们来讲解如何使用在Linux中部署RocketMQ。知识点如下:

  • 安装虚拟机
  • 修改虚拟机的ip为静态IP地址
  • 安装docker
  • 解决docker pull慢/出错的问题
  • 安装docker-compse
  • 部署RocketMQ
  • 通过Java sdk发送消息并且成功消费

1. 准备工作

        博主使用的Vmware+CentOS7+MobaXterm

        1.1 准备虚拟机

        

        

在这里选择你们电脑的镜像文件

至此虚拟机就创建好了,接下来要准备安装系统了,开启虚拟机,

下滑到最后选择中文-简体

密码太简单的点击两次完成就可以了

输入命令行,查看虚拟机IP地址,并且使用ssh连接工具连接虚拟机(博主使用的使用mobaxterm)

ip addr

1.2 将虚拟机的ip设置为静态ip地址

        输入命令行

sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

 修改之后的内容如下

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="896b9265-b251-4223-a421-9c73206785a8"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.157.201     
NETMASK=255.255.255.0  
GATEWAY=192.168.157.2  
DNS1=8.8.8.8           
DNS2=114.114.114.114       

重启网络服务

sudo systemctl restart network

发现ssh工具连接不上了,现在需要设置一下VMware的nat设置以及ssh连接的IP地址,点击编辑然后选择虚拟网络编辑器

因为我刚刚设置的虚拟机ip为192.168.157.201,所以这里的子网ip得设置成192.168.157.0

然后点击nat设置,将网关ip设置成我们虚拟机设置的网关ip地址192.168.157.2

最后点击确定应用即可,接下来修改一下ssh的连接ip地址为192.168.157.201(我们刚刚设置的虚拟机静态ip地址)

成功连接上

1.3 什么是nat网络

VMware有三种网络连接方式:仅主机、桥接、和nat

在NAT模式下,虚拟机的IP地址由VMware虚拟网络(如VMnet8的子网)分配,例如 192.168.157.200

  • 关键点:虚拟机的IP和主机的IP属于不同网段,彼此独立。

所以在nat模式下虚拟机的ip跟我们主机的ip是没有任何关系的。而因为我们在同一个局域网下所以通过ssh工具能够连接上我们的虚拟机。

1.4 测试网络

输入命令测试外网连通性

ping 8.8.8.8        

测试dns解析 

ping www.baidu.com

 

结果如上就表明没有任何问题 

2. 准备docker环境

2.1 卸载旧docker(如果有)

我们是新装的虚拟机所有不需要执行

sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

2.2 安装依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

发现出现下列报错

是因为yum镜像源的问题我们需要修改一下镜像源头

# 备份旧的 yum 源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup# 下载阿里云 CentOS 7 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 清理缓存并生成新缓存
yum clean all
yum makecache

执行结果如下:

再次执行命令

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

大功告成

2.3 添加 Docker 官方仓库(国内推荐使用阿里云镜像)

输入以下命令

sudo yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

sudo yum makecache fast

2.4 安装 Docker CE(社区版)

2.4.1 安装

输入以下命令

sudo yum install -y docker-ce docker-ce-cli containerd.io

大功告成!

2.4.2 启动docker

sudo systemctl start docker

输入之后就启动成功了(没有任何输出结果,这是正常的)

2.4.3 设置docker开机自启

sudo systemctl enable docker

2.4.4 验证是否安装成功

docker version
docker info

出现下列界面就是正常的

2.4.5 设置docker镜像地址

通过docker pull镜像的时候很慢甚至总是报错可以使用下面的命令行修改一下镜像地址

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://registry.docker-cn.com","https://hub-mirror.c.163.com","https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn","https://mirror.baidubce.com","https://docker.1panel.live","https://2epe3hl0.mirror.aliyuncs.com"]
}
EOF

执行完成之后会发现/etc/docker目录下多了一个daemon.json镜像文件,这个就是我们设置的镜像地址

重启一下docker,确保配置生效

systemctl staret docker

2.3 安装docker-compose

        博主最开始使用的docker直接拉镜像,发现比较麻烦,所以使用docker-compose,后期维护也很好维护

2.3.1 下载docker-compose

这里用的是 v1.29.2,稳定兼容 Docker Engine < 20.10 的版本

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.3.2 添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

2.3.3 创建软连接

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2.3.4 验证安装

docker-compose --version

安装成功!

3. 安装RocketMQ

3.1 下载镜像

使用docker-compose太慢了,所以我先用docker拉取镜像,再通过docker-compose创建容器和启动

下载RocketMQ4.9.6

docker pull apache/rocketmq:4.9.6

控制台镜像 

 docker pull apacherocketmq/rocketmq-dashboard:1.0.0

3.2 创建目录

下载tree

yum install tree

在根目录创建如下结构的目录

其中docker-compose.yml内容如下

version: '3.8'services:rmqnamesrv:image: apache/rocketmq:4.9.6container_name: rmqnamesrvports:- "9876:9876"volumes:- /data/namesrv/logs:/root/logscommand: sh mqnamesrvrmqbroker:image: apache/rocketmq:4.9.6container_name: rmqbrokerdepends_on:- rmqnamesrvports:- "10911:10911"- "10909:10909"environment:- NAMESRV_ADDR=rmqnamesrv:9876- MAX_POSSIBLE_HEAP=2000000000volumes:- /data/broker.conf:/opt/rocketmq-4.9.6/conf/broker.conf- /data/broker/logs:/root/logs- /data/broker/store:/root/storecommand: sh mqbroker -c /opt/rocketmq-4.9.6/conf/broker.confdashboard:image: apacherocketmq/rocketmq-dashboard:1.0.0container_name: rmqdashboarddepends_on:- rmqnamesrvports:- "8080:8080"environment:- JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876

broker.conf的内容如下:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=192.168.157.201
namesrvAddr=192.168.157.201:9876

需要把ip地址换成自己虚拟机的,如果不换则会导致使用Javasdk发送消息的时候出现

org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout

异常,因为RocketMQ的默认IP地址取的是虚拟机内部容器的ip的地址172.20....

3.3 启动docker-compose

需要先进入含有docker-compose.yml的文件夹中哦

启动命令如下

docker-compose up -d

现在就大功告成了!

通过命令查看docker中的容器

docker ps -a

通过docker-compose能够更好的维护容器已经镜像版本等

3.4 关闭docker-compose

输入以下命令

docker-compose down

3.5 一键启动脚本

创建build.sh文件内容如下(需要和docker-compose.yml放在同一个目录下)

docker-compose down && docker-compose up -d

给文件添加执行权限:

chmod +x ./build.sh

运行
 

bash build.sh

3.6 访问控制台

在浏览器中数据192.168.157.201:8080即可访问控制台

4. 通过Java sdk发送消息已经消费消息

4.1 创建Java项目

创建Java的maven项目,Java的jdk版本为1.8+,引入RocketMQ4.9.6的依赖

    <dependencies><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.9.6</version></dependency></dependencies>

4.2 生产者

代码如下:
 


import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;public class ProducerExample {public static void main(String[] args) throws Exception {
// 创建生产者实例,并设置生产者组名DefaultMQProducer producer = new DefaultMQProducer("test_group");// 设置 Name Server 地址,此处为示例,实际使用时请替换为真实的 Name Server 地址producer.setNamesrvAddr("192.168.157.201:9876");producer.start();try {// 创建消息实例,指定 topic、Tag和消息体Message msg = new Message("TestTopic", "TagA", ("Hello RocketMQ").getBytes());// 发送消息并获取发送结果SendResult sendResult = producer.send(msg);System.out.println("Message sent: " + new String(msg.getBody()));System.out.println("Send result: " + sendResult);} catch (Exception e) {e.printStackTrace();System.out.println("Message sending failed.");} finally {// 关闭生产者producer.shutdown();}}
}

4.3 消费者

代码如下:


import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;import java.util.List;public class ConsumerExample {public static void main(String[] args) throws Exception {// 创建消费者实例,并设置消费者组名DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test_group");// 设置 Name Server 地址,此处为示例,实际使用时请替换为真实的 Name Server 地址consumer.setNamesrvAddr("192.168.157.201:9876");// 订阅指定的主题和标签(* 表示所有标签)consumer.subscribe("TestTopic", "TagA");// 注册消息监听器consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {System.out.println("Received message: " + new String(msg.getBody()));}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});// 启动消费者consumer.start();System.out.println("Consumer started.");}
}

运行结果如下:

如果想要通过本地ip直接访问虚拟机的话,可以在VMware中设置一下nat的端口转发

点击确定然后保存即可

接下来将生成中的nameserver的ip地址改为localhost:9876,运行截图如下(配置了端口转发之后依旧可以用虚拟机的ip地址访问哦,只是增加了一个通过本地ip访问的途径,包括控制台也是一样:localhost:8083(我设置的8083转发到虚拟机的8080))

大功告成!!!

        后续会再出关于rocketmq常见的消息发送的教程和案例以及在企业中对rocketmq的二次封装便于使用!!

        有疑问欢迎大家在评论区留言,博主会关注并提供一点帮助

5. 每日一笑

问:程序员最讨厌康熙的哪个儿子?

答:胤禩。因为他是八阿哥(Bug)。

相关文章:

消息队列RocketMQ-docker部署保姆级教程(从0到1)(2)

目录 引言 1. 准备工作 1.1 准备虚拟机 1.2 将虚拟机的ip设置为静态ip地址 1.3 什么是nat网络 1.4 测试网络 2. 准备docker环境 2.1 卸载旧docker&#xff08;如果有&#xff09; 2.2 安装依赖包 2.3 添加 Docker 官方仓库&#xff08;国内推荐使用阿里云镜像&#xf…...

《算法导论(第4版)》阅读笔记:p32-p38

《算法导论(第4版)》学习第 12 天&#xff0c;p32-p38 总结&#xff0c;总计 7 页。 一、技术总结 1.analyzing algorithms (1)running time(运行时间) worst-case running time, average-case running time&#xff0c;best-case running-time。 2.order of growth/rate …...

《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match

《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match 引言 Python 3.10 引入了全新的 match 语句&#xff0c;它不仅是一个“类 switch”的语法结构&#xff0c;更是一种**结构化模式匹配&#xff08;structural pattern matching&#xff09…...

【氮化镓】横向GaN 器件注入隔离区的电场相关载流子传输特性

文章的关键结论和发现如下: 在GaN横向功率器件中,注入隔离区的载流子传输具有明显的电场依赖性,且其泄漏电流和击穿特性主要由注入的GaN区域决定,与缓冲层和UID GaN层的性质关系不大。 载流子传输机制随电场强度变化呈现三个不同区域:低电场下为欧姆传导,符合变程跃迁(V…...

电子电器架构 --- 借力第五代架构,驱动汽车产业创新引擎

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…...

【ROS2】通信部署概述(以话题(Topic)通信为例)

写在前面 很多内容参考了赵虚左老师的ROS2教程 概念说明 工作空间&#xff1a;相当于一个项目&#xff0c;比如一台机械臂&#xff0c;或者一个机器人 功能包&#xff1a;相当于一个项目中的一台设备&#xff0c;如电机、雷达、相机等 大概构建流程 以话题通信机制为例 创…...

1.8 梯度

&#xff08;知识体系演进逻辑树&#xff09; 一元导数&#xff08;1.5&#xff09; │ ├─→ 多元偏导数&#xff08;1.6核心突破&#xff09; │ │ │ └─解决&#xff1a;多变量耦合时的单变量影响分析 │ │ │ ├─几何&#xff1a;坐标轴切片切线斜率…...

Pycharm中No Conda enviroment selected

最近在学习Anaconda&#xff0c;换了台新电脑重新安装PyCharm和Anaconda后&#xff0c;打算创建环境&#xff0c;创建后发现找不到刚刚在Anaconda中创建的环境&#xff0c;经过不断摸索后找到解决方案 将选择的路径从Anaconda目录下的python.exe换成Anaconda\Library\bin下的c…...

continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手

​一、软件介绍 文末提供程序和源码下载 Continue 使开发人员能够通过我们的开源 VS Code 和 JetBrains 扩展以及模型、规则、提示、文档和其他构建块的中心创建、共享和使用自定义 AI 代码助手。 二、功能 Chat 聊天 Chat makes it easy to ask for help from an LLM without…...

关于读写锁的一些理解

同一线程的两种情况&#xff1a; 读读&#xff1a; public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock new ReentrantReadWriteLock();Lock readLock lock.readLock();Lock writeLock lock.writeLock();readLock.lock();S…...

Ubuntu网络部署LNMP环境

目录 1. 安装nginx 2. 安装mysql 3. 安装PHP 4. 配置nginx&#xff0c;修改默认配置文件 5. 配置PHP 1. 安装nginx apt install -y nginx#开启 systemctl start nginx#浏览器访问页面 192.168.180.200:80#nginx网页html存放路径 ls /usr/share/nginx/#查看nginx版本号 ng…...

榜单按行显示

手机芯片_SoC天梯榜_安兔兔跑分排行_安兔兔 我只关注 骁龙7Gen1&#xff0c;天玑7300&#xff0c;骁龙6Gen1&#xff0c;天玑900 除了 50,64,75,86 行都隐藏。 var uls document.getElementsByClassName(newrank-c); var s 50,64,75,86; var sa s.split(,); for (var i0…...

DVWA在线靶场-xss部分

目录 1. xxs&#xff08;dom&#xff09; 1.1 low 1.2 medium 1.3 high 1.4 impossible 2. xss&#xff08;reflected&#xff09; 反射型 2.1 low 2.2 medium 2.3 high 2.4 impossible 3. xss&#xff08;stored&#xff09;存储型 --留言板 3.1 low 3.2 medium 3.3 high 3.…...

将本地文件上传到云服务器上

使用 SCP 命令&#xff08;最常用&#xff09; # 基本语法 scp [本地文件路径] [用户名][服务器IP]:[目标路径]# 示例&#xff1a;上传单个文件 scp /path/to/local/file.txt root192.168.1.100:/path/to/remote/# 上传整个目录 scp -r /path/to/local/directory root192.168.…...

关系实验课--笛卡尔积

import sympy as sym a, b sym.symbols(a b) # 定义符号 a 和 b A sym.FiniteSet(a,b) # 创建包含 a 和 b 的有限集合 B sym.FiniteSet(1,2,3,4) AxB sym.cartes(A,B) # 返回迭代器。迭代器不会直接显示内容&#xff0c;而是需要手动遍历或转换为其他数据类型&#xff08;如…...

从0开始学习大模型--Day07--大模型的核心知识点

AI常见名词 知识库 分为传统知识库与AI知识库&#xff0c;前者是单纯的存储各个领域的知识&#xff0c;后者则是与LLM结合&#xff0c;使AI系统能够更好地利用本地知识来响应查询和执行任务。比如&#xff0c;假如公司新来了个维修人员&#xff0c;他可以直接调用AI知识库去学…...

无线定位之 二 SX1302 网关源码 thread_down 线程详解

前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...

MINIX 1.0 文件系统的实现(C/C++实现)

MINIX 1.0 文件系统简介&#xff1a; Linux 0.11操作系统启动时需要加载一个根目录&#xff0c;此根目录使用的是MINIX 1.0文件系统&#xff0c;其保存在硬盘的第一个分区中。Linux 0.11操作系统将硬盘上的两个连续的物理扇区&#xff08;大小为512字节&#xff09;做为一个物理…...

Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解

Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解 前言一、引入依赖二、配置 Elasticsearch三、创建模型类&#xff08;Entity&#xff09;四、使用 ElasticsearchOperations 进行 CRUD 操作1. 保存数据&#xff08;Create&#xff09;2. 获取数据&am…...

keil 解决 Error: CreateProcess failed, Command: ‘XXX\ARM\ARMCC\bin\fromelf.exe

参考文章链接&#xff1a; https://blog.csdn.net/qq_39172792/article/details/145499880 自己的&#xff1a; D:\Program Files\keil529\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe --bin -o …/…/firmware_bin/L.bin ./Object/L.axf...

针对面试-mysql篇

1.如何定位慢查询? 1.1.介绍一下当时产生问题的场景(我们当时的接口测试的时候非常的慢&#xff0c;压测的结果大概5秒钟))&#xff0c;可以监测出哪个接口&#xff0c;最终因为是sql的问题 1.2.我们系统中当时采用了运维工具(Skywalkin就是2秒&#xff0c;一旦sql执行超过2秒…...

HNUST软件测试B考前最终复习

最近根据各个专业整理的考试重点&#xff0c;这两天总结出了以下内容&#xff0c;并附上了我自己复习的一些记忆小技巧&#xff0c;供大家参考&#xff0c;大家就图一乐。希望对你们的复习有所帮助&#xff0c;预祝大家考试顺利&#xff0c;加油&#xff01; 本次考试和去年的题…...

网络编程epoll和udp

# epoll模型核心要点## 1. epoll核心概念### 1.1 高效IO多路复用- 监视列表与激活列表分离- 内核使用红黑树存储描述符- 边缘触发模式(EPOLLET)支持### 1.2 事件触发机制- **水平触发(LT)**&#xff1a;- 默认模式&#xff0c;类似select/poll- 数据未读完持续触发事件- **边缘…...

【速写】use_cache参数与decode再探讨

序言 纳什最近指出一个小细节&#xff0c;比如在Qwen系列模型中&#xff0c;两个special token&#xff1a; eos_token(<|im_end|>): 151645&#xff08;im_end 中的 im 指的是 instruct message&#xff09;pad_token(<|endoftext|>): 151643。 这是很有趣的事…...

智能网联汽车“内外协同、虚实共生”的通信生态

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…...

《Python星球日记》 第64天:NLP 概述与文本预处理

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、NLP 简介1. 什么是自然语言处理&#xff1f;NLP 的应用场景&#xff1a; 2.…...

Java中堆栈

文章目录 Java中堆栈1. 栈&#xff08;Stack&#xff09;特点示例 2. 堆&#xff08;Heap&#xff09;特点示例 3. 核心区别4. 常见问题5. 内存可视化示例内存布局示意图&#xff1a; 总结 Java中堆栈 在 Java 中&#xff0c;“堆栈” 通常指的是堆&#xff08;Heap&#xff0…...

模块化PCB设计中联排半孔的应用

随着电子产品的快速发展&#xff0c;高密度、多功能和小型化已成为未来的趋势。电路板上的元件几何指数在增加&#xff0c;而PCB尺寸却越来越小&#xff0c;因此需要与支撑板做配合。如果用助焊剂将圆孔焊接到母板上&#xff0c;由于圆孔体积较大&#xff0c;会产生冷焊&#x…...

xss-lab靶场4-7关基础详解

前言&#xff1a; 仅作为练习&#xff0c;复盘 推荐html在线运行平台&#xff0c;弹窗标签可以在平台运行&#xff0c;看语句是否能正常弹窗 HTML/CSS/Javascript在线代码运行工具 | 菜鸟教程 内容&#xff1a; 第四关 打开一看&#xff0c;输入<script>alert(1)&l…...

【Linux】进程状态、优先级、切换和调度

目录 一、传统操作系统进程状态 &#xff08;一&#xff09;什么是状态 &#xff08;二&#xff09;运行状态 &#xff08;三&#xff09;阻塞状态 &#xff08;四&#xff09;挂起状态 二、Linux进程状态 &#xff08;一&#xff09;进程状态 &#xff08;二&#xff…...

软件测试基础知识详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测试 又叫 功能测试、数据驱动测试 或 基于需求规格说明书的功能测试。该类测试注重于测试软件的功能性需…...

【WordPress博客AI内容辅助生成/优化工具箱插件下载无标题】

主要功能 AI内容生成/优化 使用AI模型生成或优化段落内容 支持撤销和模型切换 AI自动评论 智能分析文章内容生成相关评论 可配置的评论数量和随机调度 生成评论回复的概率(评论数>10时) 可能以特定概率包含表情符号 AI标签提取 从文章内容自动提取相关标签 新标签可自动生…...

js 画立方体软件开发日记2

我不懂但我大为震惊 重开几次又回去了 这说明之前的操作无效 搞了个调试当前文件 导出模块有问题&#xff0c;跑显示没事 启动太慢&#xff0c;重构吧 ----------------------------------------------- 把那些鬼相机投影代码删了就有4s了 按钮全删了&#xff0c;还是卡&…...

element plus el-table多选框跨页多选保留

一、基础多选配置 通过 type“selection” 开启多选列&#xff0c;并绑定 selection-change 事件获取选中数据 <template><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type"selection&qu…...

智能家居“心脏“升级战:GD25Q127CSIG国产芯片如何重构家庭物联生态

在智能家居设备出货量突破10亿台的2023年&#xff0c;家庭网关正经历着前所未有的技术革新。作为连接云端与终端设备的中枢神经&#xff0c;智能网关的存储芯片选择直接决定着整个智能生态系统的运行效率。在这场技术升级浪潮中&#xff0c;兆易创新GD25Q127CSIG串行闪存芯片主…...

智能枪弹柜管理系统|智能枪弹柜管理系统LK-QDG-Q20型

是一种用于存放枪支弹药的智能化设备&#xff0c;主要应用于涉枪单位&#xff0c;以下将从其功能特点、系统组成、优势等维度展开介绍&#xff1a; 功能特点 身份识别功能&#xff1a;采用多种生物识别技术&#xff0c;如指纹识别、指静脉识别、虹膜识别、人脸识别、声纹识别等…...

bootstrap table 添加跳转到指定页的功能(仅自己可见)

Table回调方法中&#xff0c;添加input和button至Table下方&#xff08;Table页渲染结束后执行&#xff09; &#xff08;input用来输入页码&#xff0c;button执行跳转&#xff09; function ajaxRequestExtends(data){$(".page-list").append("<input idp…...

rufus+Ubuntu 18.04 镜像

参考&#xff1a;https://blog.csdn.net/Li060703/article/details/106075597 Rufus 官网&#xff1a; https://rufus.ie/zh/ 步骤 安装U盘做好后插在主板io的USB口上&#xff0c;启动阶段用F2或DEL打断进bios&#xff0c;bios里面指定从安装U盘来启动&#xff0c;里面的B…...

基于事件驱动和策略模式的差异化处理方案

一、支付成功后事件驱动 1、支付成功事件 /*** 支付成功事件** author ronshi* date 2025/5/12 14:40*/ Getter Setter public class PaymentSuccessEvent extends ApplicationEvent {private static final long serialVersionUID 1L;private ProductOrderDO productOrderDO;…...

【运维】MacOS蓝牙故障排查与修复指南

在日常使用macOS系统过程中&#xff0c;蓝牙连接问题时有发生。无论是无法连接设备、连接不稳定还是蓝牙功能完全失效&#xff0c;这些问题都会严重影响我们的工作效率。本文将分享一些实用的排查方法和修复技巧&#xff0c;帮助你解决macOS系统上的蓝牙故障。 问题症状 常见…...

linux小主机搭建自己的nas(三)docker安装nextcloud

小主机用的TF卡&#xff0c;不可能把nas的数据放在卡上&#xff0c;所以我买了个2T的移动硬盘 1.挂载移动硬盘 查找硬盘 lsblk # 或 fdisk -l 创建挂载点 sudo mkdir -p alon_ssd 查看硬盘文件系统,文件系统类型一会儿设置挂载用 sudo blkid /dev/sda1 开机自动挂载&…...

Go语言:json 作用和语法

在 Go 语言中&#xff0c;JSON 字段&#xff08;也称为 JSON Tag&#xff09;是附加在结构体字段上的元数据&#xff0c;用于控制该字段在 JSON 编码&#xff08;序列化&#xff09;和解码&#xff08;反序列化&#xff09; 时的行为。它的语法是&#xff1a; type StructName…...

mageia系统详解

Mageia 是一个由社区驱动的 Linux 发行版&#xff0c;源自 Mandriva Linux&#xff08;原 Mandrake Linux&#xff09;&#xff0c;以用户友好性和强大的系统工具著称。它继承了 Mandriva 的易用性传统&#xff0c;同时专注于稳定性和社区协作。以下从历史背景、技术架构、系统…...

六、STM32 HAL库回调机制详解:从设计原理到实战应用

STM32 HAL库回调机制详解&#xff1a;从设计原理到实战应用 一、回调机制的本质与设计目标 在STM32 HAL库中&#xff0c;回调机制是实现异步事件处理的核心设计模式。它通过弱定义函数用户重写的方式&#xff0c;将硬件事件&#xff08;如数据传输完成、定时器溢出等&#xf…...

USB传输模式

USB有四种传输模式: 控制传输, 中断传输, 同步传输, 批量传输 1. 中断传输 中断传输一般用于小批量, 非连续的传输. 对实时性要求较高. 常见的使用此传输模式的设备有: 鼠标, 键盘等. 要注意的是, 这里的 “中断” 和我们常见的中断概念有差异. Linux中的中断是设备主动发起的…...

lenis滑动插件的笔记

官网 lenis - npm 方法一&#xff1a;基础判断&#xff08;推荐&#xff09; 通过 Lenis 自带的 scroll 和 limit 属性直接判断&#xff1a; const lenis new Lenis()// 滚动事件监听 lenis.on(scroll, ({ scroll, limit }) > {const distanceToBottom limit - scroll…...

【网络安全】SQL注入

如果文章不足还请各位师傅批评指正&#xff01; 想象一下&#xff0c;你经营着一家咖啡店&#xff0c;顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入&#xff0c;向后厨发送指令&#xff0c;比如“为顾客A准备一杯拿铁”。 然而&#xff0c;如果有个不怀好意的顾客…...

window server 2012安装sql server2008 r2

执行sql server2008 r2安装目录下的setup 选择运行程序而不获取帮助 然后就是让人绝望的 只能先搞这个了&#xff0c;F*微软&#xff0c;自家软件不让正常安装 打开服务器管理器->添加角色和功能->选择Web 服务&#xff08;IIS&#xff09;->添加.NET Framework3.5 然…...

uni-app学习笔记五--vue3插值表达式的使用

vue3快速上手导航&#xff1a;简介 | Vue.js 模板语法 插值表达式 最基本的数据绑定形式是文本插值&#xff0c;它使用的是“Mustache”语法 (即双大括号)&#xff1a; <span>Message: {{ msg }}</span> 双大括号标签会被替换为相应组件实例中 msg 属性的值。同…...

RuoYi 中使用 PageUtils.startPage() 实现分页查询的完整解析

文章目录 一、PageHelper 简介与基本用法使用方式如下&#xff1a; 二、Mapper 接口返回类型对分页的影响1. 返回 Page<T> 类型&#xff08;推荐&#xff09;2. 返回 List<T> 类型&#xff08;不推荐&#xff09; 三、解析RuoYi 是如何使用 PageUtils.startPage()1…...