小工具知识网

当前位置: 首页 > 行业知识 > Python 全栈系列232 再次搭建RabbitMQ

行业知识

Python 全栈系列232 再次搭建RabbitMQ

2026-11-12 22:00:52 来源:互联网转载

说明

���近想重新上RabbitMQ,主要目的还是为了分布式任务调度。在Kafka和RabbitMQ两者犹豫了一下,还是觉得RabbitMQ好一些。

在20年的时候有搞过一阵子的RabbitMQ,看了下当时的几篇文章,觉得其实想法一直没变过。

Python - 装机系列24 消息工具 RabbitMQ详细了解介绍了丢包的问题,这个估计是我当时放弃使用这个的直接原因。现在想来挺逗的,完全是因为测试服务器ubuntu使用wifi连接不稳定导致的。

文章参考RMQ官网,总结了7种队列工作模式。文章内还有使用pika进行测试的部分,我最主要使用模式2。

文章还提到了原来部署时的一些问题,之后可以参考。

【Python 全栈系列49 - Pika连接RabbitMQ的封装】这篇当时没有继续写,按照现在的风格,应该是封装为RabbitAgent。

Python 全栈系列6 -消息通信(RabbitMQ、Pika)介绍了RabbitMQ最基本的使用,包括消息的格式等。

建模杂谈系列38- 基于celery、rabbitmq、redis和asyncio的分布并行处理(概述)介绍了io并行和cpu并行的特点,以及使用celery+rabbitmq+flower进行分布式任务的样例。

本篇仅介绍RabbitMQ的(再次)搭建。

内容

1 变化

现在和几年之前,我的infrastructure还是变了很多。

  • 我用Redis Stream实现了一个简化版的消息队列(同时也实现了简单的分布式任务)
  • 实现了多种数据库的Agent: 所以应该基于Pika封装一个微服务(RabbitAgent)
  • 自己搭建了镜像仓库 :规范命名并上传保存
  • 建立了数据的存储规范(分片、分区、分块):可以用于任务的同步
  • 可以方便的进行文件同步:这样大数据不必放在消息队列,而是由worker执行远程同步拉取(这样也避免了worker没有多余公网端口的问题)

    基于此,本次的实现将参考过去一些好的实践进行部署,之后也会借鉴RabbitMQ和Celery来完善自己的分布式任务。

    2 搭建

    拉取镜像

    官网介绍的

    # latest RabbitMQ 3.13docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management

    在本地创建文件夹,并分配两个端口给这个服务。

    然后就可以启动服务了,输入默认用户密码 guest/guest就可以进行访问了。

    我想起来,最初的时候我是直接在ubuntu系统上面装rabbitmq的,依稀记得装erlang的过程。那真是烦***了,还好有docker。

    在rabbitmq的官网页面有介绍配置用户密码的启动方式,暂时就先这样。

    docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

    本地化的一些改造

    首先将镜像本地化,这样以后锁定本地的版本就可以了

    docker tag rabbitmq:3.13-management myregistry.domain.com:24052/tool.rabbitmq_3.13_management:v100docker push myregistry.domain.com:24052/tool.rabbitmq_3.13_management:v100

    一个较为完整的启动命令为

    docker run -d\ --restart=always \ --name=rabbitmq \ --hostname my-rabbit \ -v /etc/localtime:/etc/localtime  \ -v /etc/timezone:/etc/timezone\ -v /etc/hostname:/etc/hostname \ -e "LANG=C.UTF-8"\ -e RABBITMQ_DEFAULT_USER=YOURS \ -e RABBITMQ_DEFAULT_PASS=YOURS \ -p 24091:5672\ -p 24092:15672 \ myregistry.domain.com:24052/tool.rabbitmq_3.13_management:v100

    3 Next

    开发RabbitAgent微服务,对RabbitMQ的操作进行简化。

    借用RabbitMQ的队列模式,实现分布式任务。

    使用celery+rabbitmq实现分布式任务。

上一篇:服务器恢复数据怎么设置?

下一篇:sql server创建数据表的完整语法