尚硅谷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,确保消息传输的可靠性和高效性。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习网络编程学习(TCP和UDP)

文章目录 网络编程主要函数介绍1、socket函数2、bind函数转换端口和IP形式的函数 3、listen函数4、accept函数网络模式&#xff08;TCP&UDP&#xff09;1、面向连接的TCP流模式2、UDP用户数据包模式 编写一个简单服务端编程5、connect函数编写一个简单客户端编程 超级客户端…

国产单片机及其特点

国产单片机在近年来取得了显著的发展&#xff0c;不仅在技术上不断突破&#xff0c;还在市场上占据了越来越重要的位置。 主要国产单片机品牌及特点 兆易创新&#xff08;GD&#xff09; 主要系列&#xff1a;GD32系列&#xff0c;基于ARM Cortex-M内核。特点&#xff1a;高性能…

PDT 数据集:首个基于无人机的高精密度树木病虫害目标检测数据集

2024-09-24&#xff0c;由中国山东计算机科学中心、北京大学等机构联合创建了Pests and Diseases Tree&#xff08;PDT&#xff09;数据集&#xff0c;目的解决农业领域中病虫害检测模型开发中专业数据集缺失的问题。通过集成公共数据和网络数据&#xff0c;进一步推出了Common…

前端笔记(二):svg图标;git

一、svg图标 原视频 注意&#xff1a;图片是使用的png但是图标是使用的svg&#xff1b; &#xff08;1&#xff09;配置svg ①main.js里引入icons目录 ②调用函数遍历使用svg ③配置symbolId前都加了icon-&#xff0c;所以引用时应该加icon- ④但是使用时没有加因为组件里…

2024.10.15 sql

刷题网站&#xff1a; 牛客网 select device_id as user_infos_example from user_profile where id < 2 select device_id, university from user_profile where university"北京大学" select device_id, gender, age, university from user_profile where ag…

计算机毕业设计Django+Vue.js豆瓣图书推荐系统 图书评论情感分析 豆瓣图书可视化大屏 豆瓣图书爬虫 数据分析 图书大数据 大数据毕业设计 机器学习

《DjangoVue.js豆瓣图书推荐系统》开题报告 一、研究背景与意义 1. 研究背景 随着数字化时代的来临&#xff0c;图书资源日益丰富&#xff0c;用户面临着信息过载的问题。如何在海量图书中快速找到符合个人兴趣和需求的书籍成为了亟待解决的问题。传统的图书检索方式往往基于…

javaweb以html方式集成富文本编辑器TinyMce

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

空间解析几何 3:空间点到线段和平面的距离【附MATLAB代码】

目录 空间中点到线段的距离 空间中点到平面的投影和距离 matlab代码 空间中点到线段的距离 空间中点到平面的投影和距离 matlab代码 function [dis,P2,t] point2Line (A1,B1,C1) %求空间一点到一线段的最短距离 %[dis,P2,Q2]pointSegmentDistance(A,B,C) %A B为线段首末端…

使用LlamaFactory进行模型微调

使用LlamaFactory进行模型微调 简介 论文地址&#xff1a;https://arxiv.org/pdf/2403.13372 仓库地址&#xff1a;https://github.com/hiyouga/LLaMA-Factory/tree/main 名词解释 1. 预训练 (Pre-training, PT) 预训练是指模型在大规模无监督数据集上进行初步训练的过程…

最强 OpenAI o1 逻辑推理正确率仅 50%!清华、智谱推出「大模型逻辑推理新基准」

9.11 和 9.9 哪个大&#xff1f; 这一连人类幼儿园儿童都能回答的问题&#xff0c;曾经&#xff08;至今&#xff09;难倒了众多大语言模型&#xff08;LLM&#xff09;。 然而&#xff0c;要想达到通用人工智能&#xff08;AGI&#xff09;的水平&#xff0c;LLM 不仅要完成“…

居民小区的有序充电策略及解决方案

0引言 全球经济增长导致化石能源过度消耗&#xff0c;加剧环境污染。电动汽车因其环保优势迅速崛起&#xff0c;预计到2030年中国电动汽车保有量将达到6000万辆。这有助于减少化石能源依赖&#xff0c;推广绿色出行&#xff0c;但也对电网稳定性构成挑战。因此&#xff0c;研究…

2.1 HTML5 - Canvas标签

文章目录 引言Canvas标签概述定义实例&#xff1a;创建画布 理解Canvas坐标系概述实例&#xff1a;获取Canvas坐标 获取Canvas环境上下文概述实例&#xff1a;获取Canvas上下文设置渐变色效果 结语 引言 大家好&#xff0c;今天我们要一起探索HTML5中一个非常有趣且强大的特性…

001 Hadoop安装、Spring整合测试

Hadoop安装、整合测试 文章目录 Hadoop安装、整合测试1.简介1.优点2.组成 2.安装1.安装jdk&#xff08;如已安装可跳过&#xff09;2.安装hadoop1.安装2. 修改配置文件core-site.xml3. 修改配置文件hdfs-site.xml4.启动hadoop5.启动yarn6.执行jps查看7.相关端口及配置位置8.访问…

python中不变的数据类型有哪些

在Python中&#xff0c;不可变&#xff08;immutable&#xff09;数据类型是指一旦创建了这些类型的对象后&#xff0c;就不能改变其值。Python中的不可变数据类型包括以下几种&#xff1a; 数字 (int, float, complex): 这些类型的数值一旦创建就不能更改。例如&#xff0c;如…

Flutter 与 React Native - 详细深入对比分析(2024 年)

超长内容预警&#xff0c;建议收藏后阅。 Flutter 和 React Native 是跨平台应用程序开发的两个领先工具。了解它们的差异以及各自的最佳用例。 什么是Flutter&#xff1f; Flutter 是 Google 于 2018 年发布的用户界面 (UI) 软件开发套件。Flutter 可让您为多种平台和操作系统…

在线深度学习:爱奇艺效果广告分钟级模型优化

01# 背景 在效果广告投放场景中&#xff0c;媒体侧需要准确衡量每次请求的价值&#xff0c;模型预估值在广告竞价中扮演着核心角色。模型预估精度的提升&#xff0c;是改善媒体侧变现效率、提升广告收益的核心技术驱动力。 此前&#xff0c;爱奇艺效果广告预估模型为小时级模型…

构建流媒体管道:利用 Docker 部署 Nginx-RTMP 从 FFmpeg RTMP 推流到 HLS 播放的完整流程

最近要实现一个类似导播台的功能&#xff0c;于是我先用 FFmpeg 实现一个参考对照的 Demo&#xff0c;我将其整理为一篇文章&#xff0c;方便后续大家或者和自己参考&#xff01; 1、软件工具介绍 本次部署相关软件 / 工具如下&#xff1a; FFmpeg&#xff1a;全称是 Fast Fo…

软件确认测试内容和方法分享,CMA、CNAS第三方软件检测机构推荐

在现代软件开发中&#xff0c;软件确认测试扮演着至关重要的角色。它不仅帮助开发团队识别系统中的缺陷&#xff0c;还确保软件产品符合用户需求和期望。 软件确认测试旨在验证软件系统的性能和功能是否符合设计规格和用户需求。它通常在软件开发的后期进行&#xff0c;以确保…

火语言RPA流程组件介绍--浏览器上传文件

&#x1f6a9;【组件功能】&#xff1a;在浏览器内自动点击上传功能按钮&#xff0c;选择本地文件完成文件网页上传 配置预览 配置说明 目标元素 支持T或# 通过捕获网页元素或填写css,xpath获取网页元素作为操作目标 上传文件路径 支持T或# 默认FLOW输入项 需要上传的文件…

从零开始构建:Python自定义脚本自动化你的日常任务

从零开始构建&#xff1a;Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言&#xff0c;被广泛应用于各种自动化任务中。通过编写 Python 脚本&#xff0c;你可以轻松地将日常重复性工作自动化&#xff0c;例如文件操作、数据处理、网络爬虫、系统…