尚硅谷rabbitmq 2024 Federation配置 第60节答疑
rabbitmq联邦队列怎么做
要在 RabbitMQ 中设置联邦队列(Federated Queues),你需要遵循以下步骤。联邦队列允许你在不同的 RabbitMQ 实例之间共享队列,从而实现消息的分布式处理和高可用性。
### 步骤 1:安装 RabbitMQ 联邦插件
首先,确保你的 RabbitMQ 安装了联邦插件。你可以通过以下命令启用插件:
```bash
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
```
### 步骤 2:配置联邦 Upstream
联邦 Upstream 是指一个 RabbitMQ 服务器如何连接到另一个 RabbitMQ 服务器。你需要在 RabbitMQ 配置文件中定义这些连接。
编辑 RabbitMQ 配置文件(通常是 `rabbitmq.conf` 或 `advanced.config`),添加以下内容:
```erlang
[
{rabbitmq_federation,
[
{upstream, "upstream-name",
[
{uri, "amqp://user:password@remote-rabbitmq-host"},
{expires, 3600000}
]
}
]
}
].
```
### 步骤 3:定义联邦策略
接下来,你需要定义一个策略来应用联邦配置。策略可以通过 RabbitMQ 管理控制台或命令行工具设置。
通过命令行工具设置策略:
```bash
rabbitmqctl set_policy federate-me "^federated\." \
'{"federation-upstream-set":"all"}' --apply-to queues
```
这个命令的意思是将所有以 `federated.` 开头的队列应用联邦策略,并使用之前配置的所有联邦 Upstream。
### 步骤 4:创建联邦队列
现在你可以创建一个队列,并确保它符合策略的命名规则:
```bash
rabbitmqadmin declare queue name=federated.myqueue
```
这个队列将自动应用你之前定义的联邦策略,并连接到配置的 Upstream。
### 验证配置
你可以通过 RabbitMQ 管理控制台(通常在 `http://localhost:15672`)检查联邦配置和队列的状态。在“Federation”标签下,你应该能够看到联邦链接的状态和活动情况。
### 结论
通过以上步骤,你就可以在 RabbitMQ 中设置联邦队列,实现不同 RabbitMQ 实例之间的消息共享和分布式处理。如果你有更多的定制需求,可以参考 [RabbitMQ 官方文档](https://www.rabbitmq.com/federation.html) 获取更详细的信息。
===========
'{"federation-upstream-set":"all"}' 这个是什么,不是应该定义"federation-upstream":"upstream-name"吗?
你说得对,`"federation-upstream-set":"all"` 和 `"federation-upstream":"upstream-name"` 是不同的配置方式。
- `"federation-upstream-set":"all"`:这是用来应用所有定义的 upstream 集合。
- `"federation-upstream":"upstream-name"`:这是用来应用特定的 upstream。
在你的例子中,如果你只想使用特定的 upstream,你应该使用 `"federation-upstream":"upstream-name"`。以下是更新后的步骤:
### 步骤 1:安装 RabbitMQ 联邦插件
确保你的 RabbitMQ 安装了联邦插件:
```bash
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
```
### 步骤 2:配置联邦 Upstream
在 RabbitMQ 配置文件中定义 upstream:
```erlang
[
{rabbitmq_federation,
[
{upstream, "upstream-name",
[
{uri, "amqp://user:password@remote-rabbitmq-host"},
{expires, 3600000}
]
}
]
}
].
```
### 步骤 3:定义联邦策略
通过命令行工具设置策略,应用特定的 upstream:
```bash
rabbitmqctl set_policy federate-me "^federated\." \
'{"federation-upstream":"upstream-name"}' --apply-to queues
```
这个命令的意思是将所有以 `federated.` 开头的队列应用联邦策略,并使用你定义的 `"upstream-name"`。
### 步骤 4:创建联邦队列
创建一个符合策略命名规则的队列:
```bash
rabbitmqadmin declare queue name=federated.myqueue
```
这个队列将自动应用你之前定义的联邦策略,并连接到配置的 upstream。
### 验证配置
你可以通过 RabbitMQ 管理控制台(通常在 `http://localhost:15672`)检查联邦配置和队列的状态。在“Federation”标签下,你应该能够看到联邦链接的状态和活动情况。
### 结论
通过以上步骤,你可以在 RabbitMQ 中设置联邦队列,并指定特定的 upstream。如果你有更多的定制需求,可以参考 [RabbitMQ 官方文档](https://www.rabbitmq.com/federation.html) 获取更详细的信息。
============
但此时发现下游节点中联邦队列并没有接收到消息,这是为什么呢?这里就体现出了联邦队列和联邦交换机工作逻辑的区别。对联邦队列来说,如果没有监听联邦队列的消费端程序,它是不会到上游去拉取消息的!如果有消费端监听联邦队列,那么首先消费联邦队列重身的消息;如果联邦队列为空,这时候才会到上游队列节点中拉取消息。所以现在的测试效果需要消费端程序配合才能看到:
这话什么意思?具体演示一下,联邦队列和联邦交换机使用什么区别,好像说在ui界面上,上游发消息下游看不到,但是在springboot里面消费就可以?
你提到的联邦队列和联邦交换机的区别确实是 RabbitMQ 联邦特性中的一个关键点。让我详细解释一下,并通过一个具体的例子来演示它们的工作机制。
### 联邦队列 vs 联邦交换机
#### 联邦队列(Federated Queues)
联邦队列的工作原理是“按需拉取”。这意味着下游节点上的联邦队列只有在有消费者监听时才会从上游节点拉取消息。如果没有消费者监听,联邦队列不会主动拉取消息。
#### 联邦交换机(Federated Exchanges)
联邦交换机的工作原理是“主动推送”。这意味着上游节点上的消息会主动推送到下游节点的交换机,然后路由到相应的队列中。无论下游是否有消费者监听,消息都会被推送到下游节点。
### 具体演示
#### 环境准备
假设我们有两个 RabbitMQ 实例:
- 上游节点(Upstream):`upstream-rabbitmq`
- 下游节点(Downstream):`downstream-rabbitmq`
#### 配置联邦队列
1. **在上游节点创建队列**
```bash
rabbitmqadmin -H upstream-rabbitmq declare queue name=upstream.queue
```
2. **在下游节点配置联邦 Upstream**
在 `downstream-rabbitmq` 的配置文件中添加:
```erlang
[
{rabbitmq_federation,
[
{upstream, "upstream-name",
[
{uri, "amqp://user:password@upstream-rabbitmq"},
{expires, 3600000}
]
}
]
}
].
```
3. **在下游节点设置联邦策略**
```bash
rabbitmqctl -H downstream-rabbitmq set_policy federate-me "^federated\." \
'{"federation-upstream":"upstream-name"}' --apply-to queues
```
4. **在下游节点创建联邦队列**
```bash
rabbitmqadmin -H downstream-rabbitmq declare queue name=federated.queue
```
5. **在上游节点发送消息**
```bash
rabbitmqadmin -H upstream-rabbitmq publish routing_key=upstream.queue payload="Hello, World!"
```
6. **在下游节点启动消费者**
使用 Spring Boot 应用监听 `federated.queue`:
```java
@Service
public class RabbitMqConsumer {
@RabbitListener(queues = "federated.queue")
public void listen(String message) {
System.out.println("Received message: " + message);
}
}
```
#### 配置联邦交换机
1. **在上游节点创建交换机和队列**
```bash
rabbitmqadmin -H upstream-rabbitmq declare exchange name=upstream.exchange type=direct
rabbitmqadmin -H upstream-rabbitmq declare queue name=upstream.queue
rabbitmqadmin -H upstream-rabbitmq declare binding source=upstream.exchange destination=upstream.queue routing_key=key
```
2. **在下游节点配置联邦 Upstream**
在 `downstream-rabbitmq` 的配置文件中添加:
```erlang
[
{rabbitmq_federation,
[
{upstream, "upstream-name",
[
{uri, "amqp://user:password@upstream-rabbitmq"},
{expires, 3600000}
]
}
]
}
].
```
3. **在下游节点设置联邦策略**
```bash
rabbitmqctl -H downstream-rabbitmq set_policy federate-me "^federated\." \
'{"federation-upstream":"upstream-name"}' --apply-to exchanges
```
4. **在下游节点创建联邦交换机**
```bash
rabbitmqadmin -H downstream-rabbitmq declare exchange name=federated.exchange type=direct
```
5. **在下游节点创建队列并绑定到联邦交换机**
```bash
rabbitmqadmin -H downstream-rabbitmq declare queue name=downstream.queue
rabbitmqadmin -H downstream-rabbitmq declare binding source=federated.exchange destination=downstream.queue routing_key=key
```
6. **在上游节点发送消息**
```bash
rabbitmqadmin -H upstream-rabbitmq publish exchange=upstream.exchange routing_key=key payload="Hello, Federated Exchange!"
```
### 结果验证
- **联邦队列**:如果在下游节点没有消费者监听 `federated.queue`,消息不会被拉取。当你启动 Spring Boot 应用监听 `federated.queue` 时,消息才会被拉取并消费。
- **联邦交换机**:无论下游节点是否有消费者监听 `downstream.queue`,消息都会被推送到 `federated.exchange`,并路由到 `downstream.queue`。你可以在 RabbitMQ 管理界面中看到消息已经到达下游节点的队列中。
通过这些步骤,你可以看到联邦队列和联邦交换机在工作逻辑上的区别。希望这能帮助你更好地理解和使用 RabbitMQ 的联邦特性。
===========
shovel从一个位置移动另一个位置,有什么用呢,为什么不直接用连一个队列呢?
Shovel 和联邦队列(Federated Queues)或联邦交换机(Federated Exchanges)在功能和使用场景上有所不同。Shovel 是一种插件,它允许你将消息从一个 RabbitMQ 服务器(或集群)移动到另一个 RabbitMQ 服务器(或集群)。以下是一些使用 Shovel 的场景和它的优势:
### Shovel 的使用场景
1. **跨数据中心消息传递**:
- 如果你有多个数据中心,并且需要在这些数据中心之间传递消息,Shovel 可以帮助你实现这一点。它可以将消息从一个数据中心的 RabbitMQ 服务器移动到另一个数据中心的 RabbitMQ 服务器。
2. **灾难恢复**:
- Shovel 可以用于灾难恢复场景。你可以将消息从一个主要的 RabbitMQ 服务器移动到一个备用的 RabbitMQ 服务器,以确保在主要服务器出现故障时消息不会丢失。
3. **数据迁移**:
- 如果你需要将消息从一个旧的 RabbitMQ 服务器迁移到一个新的 RabbitMQ 服务器,Shovel 可以帮助你完成这一任务。
4. **不同网络环境**:
- 当你的 RabbitMQ 服务器位于不同的网络环境中(例如,一个在内网,一个在外网),Shovel 可以帮助你在这些不同的网络环境之间传递消息。
### Shovel 的优势
- **独立于消费者**:Shovel 是一个独立的进程,它会持续地将消息从源队列移动到目标队列,无需在目标 RabbitMQ 服务器上有消费者。
- **可靠性**:Shovel 可以配置成持久化的,以确保在 RabbitMQ 服务器重启或发生故障时消息不会丢失。
- **灵活性**:Shovel 支持多种配置选项,可以根据你的需求进行定制。
### 为什么不直接连接一个队列?
直接连接队列(例如,通过联邦队列或联邦交换机)虽然在某些情况下是合适的,但在以下场景中可能不太适用:
1. **网络隔离**:
- 当两个 RabbitMQ 服务器位于不同的网络环境中,直接连接可能会受到网络隔离的限制,而 Shovel 可以跨越这些限制。
2. **不同的 RabbitMQ 版本**:
- 如果源和目标 RabbitMQ 服务器运行不同的版本,直接连接可能会有兼容性问题,而 Shovel 可以在这种情况下工作。
3. **复杂的路由需求**:
- Shovel 可以配置复杂的路由规则,将消息从一个队列移动到另一个队列,甚至可以重命名队列或交换机。
### Shovel 配置示例
以下是一个 Shovel 配置的示例:
```erlang
[
{rabbitmq_shovel,
[
{shovels,
[
{my_shovel,
[
{sources, [{broker, "amqp://user:password@source-rabbitmq"}]},
{destinations, [{broker, "amqp://user:password@destination-rabbitmq"}]},
{queue, <<"source-queue">>},
{queue, <<"destination-queue">>},
{ack_mode, on_confirm},
{reconnect_delay, 5}
]
}
]
}
]
}
].
```
在这个配置中:
- `sources` 定义了源 RabbitMQ 服务器。
- `destinations` 定义了目标 RabbitMQ 服务器。
- `queue` 指定了源和目标队列。
- `ack_mode` 设置为 `on_confirm` 以确保消息被确认。
- `reconnect_delay` 设置为 5 秒,以在连接断开时进行重连。
### 结论
Shovel 提供了一种灵活且可靠的方式,将消息从一个 RabbitMQ 服务器移动到另一个 RabbitMQ 服务器。它在跨数据中心消息传递、灾难恢复和数据迁移等场景中非常有用。如果你需要在不同网络环境或不同版本的 RabbitMQ 服务器之间传递消息,Shovel 是一个很好的选择。
===============
Shovel Status
Shovel Management
-------------ui管理界面为什么要有两个菜单
在 RabbitMQ 管理界面中,`Shovel Status` 和 `Shovel Management` 是两个不同的菜单项,它们提供了不同的功能和信息:
### Shovel Status
`Shovel Status` 菜单项主要用于监控和查看当前 Shovel 的运行状态。它提供了以下信息:
1. **Shovel 名称**:显示每个 Shovel 的名称。
2. **源和目标**:显示每个 Shovel 的源和目标队列或交换机的信息。
3. **状态**:显示 Shovel 的当前状态,例如是否正在运行、暂停或出错。
4. **统计信息**:显示 Shovel 的消息传输统计信息,例如传输的消息数量、传输速率等。
通过 `Shovel Status`,你可以实时监控 Shovel 的健康状况和性能,确保消息传输的可靠性。
### Shovel Management
`Shovel Management` 菜单项主要用于管理和配置 Shovel。它提供了以下功能:
1. **创建 Shovel**:允许你通过 UI 界面创建新的 Shovel。你可以指定源和目标 RabbitMQ 服务器、队列或交换机,以及其他配置选项。
2. **编辑 Shovel**:允许你修改现有 Shovel 的配置。你可以更新源和目标、调整传输参数等。
3. **删除 Shovel**:允许你删除不再需要的 Shovel。
4. **查看详细配置**:你可以查看每个 Shovel 的详细配置参数,了解其具体设置。
通过 `Shovel Management`,你可以方便地管理 Shovel 的生命周期,从创建到修改再到删除,所有操作都可以在 UI 界面上完成。
### 为什么要有两个菜单项?
1. **职责分离**:
- `Shovel Status` 专注于监控和查看 Shovel 的运行状态,提供实时的性能和健康状况信息。
- `Shovel Management` 专注于管理和配置 Shovel,提供创建、编辑和删除 Shovel 的功能。
2. **用户角色**:
- 不同的用户角色可能需要访问不同的功能。例如,运维人员可能更关注 `Shovel Status` 以监控系统健康状况,而开发人员或管理员可能更关注 `Shovel Management` 以配置和管理 Shovel。
3. **简化操作**:
- 将监控和管理功能分开,可以简化用户操作,使界面更加清晰和易于使用。用户可以快速找到他们需要的功能,而不必在一个复杂的界面中查找。
### 示例
假设你在 RabbitMQ 管理界面中:
- **Shovel Status**:
- 你可以看到一个名为 `my_shovel` 的 Shovel 正在运行。
- 它的源是 `amqp://user:password@source-rabbitmq`,目标是 `amqp://user:password@destination-rabbitmq`。
- 当前状态是 `running`,传输速率是 `10 messages/second`。
- **Shovel Management**:
- 你可以点击 `Create Shovel` 按钮,输入名称 `new_shovel`,配置源和目标 RabbitMQ 服务器、队列或交换机,然后点击 `Save` 创建新的 Shovel。
- 你可以点击现有的 `my_shovel`,修改其配置,例如更改目标队列,然后点击 `Save` 保存修改。
- 你可以点击 `Delete` 按钮,删除不再需要的 Shovel。
通过这两个菜单项,你可以全面地管理和监控 RabbitMQ 中的 Shovel,确保消息传输的可靠性和高效性。
相关文章:
尚硅谷rabbitmq 2024 Federation配置 第60节答疑
rabbitmq联邦队列怎么做 要在 RabbitMQ 中设置联邦队列(Federated Queues),你需要遵循以下步骤。联邦队列允许你在不同的 RabbitMQ 实例之间共享队列,从而实现消息的分布式处理和高可用性。 ### 步骤 1:安装 RabbitMQ…...

Ubuntu编译MySQL驱动连接QT
1、安装MySQL 安装MySQL软件以及驱动。 sudo apt-get install mysql-serversudo apt install mysql-clientsudo apt-get install libmysqlclient-dev 2、编译qmysql驱动 2.1、修改mysql.pro 找到Qt源码中的mysql.pro项目文件,一般位于:/opt/Qt/5.15…...

时间序列预测(七)——梯度消失(Vanishing Gradient)与梯度爆炸(Exploding Gradient)
目录 一、定义 二、产生原因 三、解决方法: 梯度消失与梯度爆炸是深度学习中常见的训练问题,它们主要发生在神经网络的反向传播过程中,使得模型难以有效学习。 一、定义 1、梯度消失(Vanishing Gradient)…...

ARM assembly 12: GCD(最大公约数)计算
首先,我们看看GCD(Greatest Common Divisor)的CPP实现 int gcd(int a, int b) {if(b 0) return a;return gcd(b, a%b); }基于下面的gcd.s文件,我们尝试实现gcd函数 //gcd.s .global main .extern fopen, fprintf, fclose, printf, atoi.section .dat…...

「实战应用」如何用图表控件LightningChart可视化天气数据?(一)
LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学…...

基于深度学习的细粒度图像分析综述【翻译】
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 基础信息0 摘要1 INTRODUCTION2 识别与检索 RECOGNITION VS. RETRIEVAL3 问题和…...

yolo笔记
目录 Anaconda安装Pytorchyolov5下载部署labelimg安装 Anaconda安装 官网链接 https://www.anaconda.com/ 官网链接链接: 官网链接https://www.anaconda.com/ 直接下最新版 (网站会自动检测系统,我是在Windows环境截图的) bash Anaconda3-XXXX-Linux-x86_64.sh一…...

Android平台RTSP|RTMP播放器PK:VLC for Android还是SmartPlayer?
好多开发者,希望在Android端低延迟的播放RTMP或RTSP流,本文就目前市面上主流2个直播播放框架,做个简单的对比。 VLC for Android VLC for Android 是一款功能强大的多媒体播放器,具有以下特点和功能: 广泛的格式支持…...

IDEA下面的Services不见了(解决方案)
大家使用IDEA有时候新打开个项目这个东西不会自动出现如何解决 配置方法: 右上角打开进入Edit Configurations 进入后我们看到里面是没有SpringBoot相关内容的 点击加号选择SpringBoot 然后Apply Ok即可,现在IDEA下面就会出现Service了,打…...

【pyspark学习从入门到精通7】DataFrames_2
目录 创建 DataFrames 生成我们自己的 JSON 数据 创建 DataFrame 创建临时表 简单的 DataFrame 查询 DataFrame API 查询 SQL 查询 创建 DataFrames 通常,您会通过使用 SparkSession(或在 PySpark shell 中调用 spark)导入数据来创建 …...

Server-Sent Event(SSE) GPT场景实现
关于SSE的基本概念可以看一下阮一峰老师的这篇文章:Server-Sent Events教程。 现在比较常见的场景是gpt回答的时候类似下图这种打字机的情况,因为AI一般响应时间会比较长,使用这种方式能让人别等那么久,是一个相对比较良好的用户…...
美国Honeywell霍尼韦尔气体分析侦测器传感器MIDAS-K-HCL说明书
上海德奥达 ---Honeywell霍尼韦尔气体分析侦测器传感器MIDAS-K-HCL是一款用于检测氯化氢气体的高性能传感器。以下是该传感器的技术参数和描述:技术参数:-测量范围:0-50ppm-灵敏度:0.5ppm-响应时间:≤30秒-电源&…...
L1练习-鸢尾花数据集处理(分类/聚类)
背景 前文(《AI 自学 Lesson1 - Sklearn(开源Python机器学习包)》)以鸢尾花数据集的处理为例,本文将完善其代码,在使用 sklearn 的部分工具包基础上,增加部分数据预处理、数据分析和数据可视化…...

javaweb以html方式集成富文本编辑器TinyMce
前言: 单一的批量图片上传按钮,禁用tinymce编辑器,但是还可以操作图片编辑; 多元化格式的富文本编辑要求; 采用tinymce实现。 附: tinymce中文手册网站: http://tinymce.ax-z.cn/download-all.…...

大学生福音!用GPT-4o几分钟内轻松读懂一篇论文!
文章目录 一、读论文智能体:PDFAI操作指导阅读论文上传论文并分析进一步研究导出可用代码 二、感受 一、读论文智能体:PDFAI 操作指导 ChatGPT 4o国内直接访问地址:https://share.xuzhugpt.cloud/ 上plus的车 输入购买的授权码即可。 默认…...
微信小程序昵称获取
<view class"shouquan_list"> <label>昵称</label> <input type"nickname" value"{{nichengshoudong}}" bindinput"bindKeyInputnicheng" placeholder"请输入昵称" placeholder-style"color:r…...

SQL进阶技巧:如何找出开会时间有重叠的会议室?| 时间区间重叠问题
目录 0 场景描述 1 数据准备 2 问题分析 方法1:利用 lateral view posexplode()函数将表展开成时间明细表 方法2:利用数学区间讨论思想求解 3 小结 如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选…...
Educational Codeforces Round 170 (Rated for Div. 2) D 题解
to sum of:前三题都是究极水题,补补D题吧,dp太钛肽弱了.. Problem - D - Codeforces--Attribute Checks 思路:首先得坚定地确定m^2,然后剩下的复杂度思考怎么优化.. key:每一个0只考虑影响到下一个0之间的数字!! 定义dp[i][j]为,在有i个能力点时.点了…...

NeRS: Neural Reflectance Surfaces for Sparse-view 3D Reconstruction in the Wild
阅读记录: 1. 2.优点1:我们的方法仅依赖于近似的相机位姿估计和粗略的类别级形状模板。 3.我们的关键见解是,我们可以强制执行基于表面的 3D 表示,而不是允许广泛用于体积表示的无约束密度。重要的是,这允许依赖于视…...
【Linux】su 命令的运行原理以及su切换用户默认继承环境配置
一、su 命令的运行原理 原理解释: su(switch user)命令用于在Linux和Unix系统中切换用户身份。 当你执行 su 命令时,系统会创建一个新的进程,通常是一个新的 shell 实例。这个新进程会以目标用户的身份运行&#…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...