Python 全栈系列232 再次搭建RabbitMQ

说明

最近想重新上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.13
docker 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:v100
docker 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实现分布式任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis之事务(详细解析)

请直接看原文:不能回滚的Redis事务还能用吗 - 知乎 (zhihu.com) ------------------------------------------------------------------------------------------------------------------------------ 1、Redis事务的概念: Redis 事务的本质是一组命令的集合。…

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)

项目简介 本项目致力于探索和实现一种高度集成的机器人系统,旨在通过结合现代机器人操作系统(ROS)和先进的硬件组件,解决特定的自动化任务和挑战。一部分是基于Jetson Orin主板的LIMO PPRO SLAM雷达小车,它具备自主导航…

2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。

一、这两天一直纠结一个问题,无论怎么修改,linux 分区老显示满,Use 100%,全部沾满。如下图的oem分区。 二、导致出现上面的原因是:SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…

Linux笔记--make

使用上一节的 main.c、add.c、sub.c文件进行编译,编译的过程有很多步骤,如果要重新编译,还需要再重来一遍,能不能一步完成这些步骤?将这些步骤写到makefile文件中,通过make工具进行编译 一个工程中的源文件不计其数&a…

java-ssm-jsp-大方县粮油购销有限公司粮食收购管理系统

java-ssm-jsp-大方县粮油购销有限公司粮食收购管理系统 获取源码——》公主号:计算机专业毕设大全

Maven【5】在IDEA环境中配置和使用Maven

文章目录 【1】创建父工程1.创建 Project2.开启自动导入 【2】配置 Maven 信息【3】创建 Java 模块工程1.创建2.maven命令操作 【4】创建 Web 模块工程1.创建模块2.Web设定 【1】创建父工程 1.创建 Project 按照idea工程的布局,project相当于父工程,里…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(二)-向量元素到向量寄存器状态的映射

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

技术选型思考:分库分表和分布式DB(TiDB/OceanBase) 的权衡与抉择

在当今数据爆炸的时代,数据库作为存储和管理数据的核心组件,其性能和扩展性成为了企业关注的重点。随着业务的发展和数据量的不断增长,传统的单库单表架构逐渐暴露出性能瓶颈和扩展性限制。为了应对这些挑战,企业常常需要在分库分…

【操作系统概念】 第3章:进程

文章目录 0.前言3.1进程概念3.1.1 进程3.1.2 进程状态3.1.3 进程控制块(PCB) 3.2、进程调度3.2.1 调度队列3.2.2 调度程序3.2.3 上下文切换 3.3 进程操作3.3.1 进程创建3.3.2 进程终止 3.4 进程间通信 0.前言 早期的计算机一次只能执行一个程序。这种程序…

Nginx 可视化管理软件 Nginx Proxy Manager

一、简介 Nginx Proxy Manager 是一款开源的 Nginx 可视化管理界面,基于 Nginx 具有漂亮干净的 Web UI 界面。他允许用户通过浏览器界面轻松地管理和监控 Nginx 服务器,可以获得受信任的 SSL 证书,并通过单独的配置、自定义和入侵保护来管理…

备战蓝桥杯---动态规划的一些思想2

话不多说,直接看题: 1.换根DP: 我们肯定不能对每一个根节点暴力求,我们不妨先求f[1],我们发现当他的儿子作为根节点时深度和为f[1](n-cnt[i])-cnt[i](cnt[i]表示以i为根的节点数),这样子两遍DFS…

CSS的三种定位,web前端开发入门学习

正文 js逻辑判断 1)请写出下面的答案? 内存泄漏 1)哪些操作会造成内存泄漏? 2)js内存泄漏的解决方式 dom 1)dom是哪种基本的数据结构? 2)dom操作的常用api有哪些? 3)dom节点的attribute和property有何区别? 4)dom结构操作/ …

相机类型的分辨率长宽、靶面尺寸大小、像元大小汇总

镜头的靶面尺寸大于等于相机靶面尺寸。 相机的芯片长这样,绿色反光部分(我的手忽略): 基本所有像素的相机的靶面大小都可以在这个表格里面找到。 镜头的靶面尺寸在镜头外表上可以找到,选型很重要!

Mysql80服务无法启动请输入Net helpMsg3534以获得更多的帮助

起因&情景: 朋友正在操作数据库,然后电脑突然死机,再重启电脑后启动数据库服务报: 然后朋友尝试各种操作都没有办法正常启动, 一、网上解决方案:(先别操作) 1 删掉&#xff1a…

吴恩达deeplearning.ai:机器学习的开发过程与优化方法

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 我想在接下来分析下开发机器学习系统的过程,这样当你自己动手时,能够做出更加正确的判断。 机器学习开发的迭代 Iterative loop of ML development 决定模型架构 第…

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型 IMU测量方程中的噪声模型IMU的离散时间噪声模型 IMU测量方程中的噪声模型 在大多数系统中,IMU的噪声由两部分组成:测量噪声(Measurement Nosie)与零偏(Bias&#…

【Numpy】给数组增加一个维度

【Numpy】给数组增加一个维度 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创…

【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)

@[TOC](【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)) 具体步骤 第一步是注册您的应用程序。特别是,您需要将浏览器指向 http://apps.twitter.com,登录 Twitter(如果您尚未登录)并注册新应用程序。您现在可以为您的应用程序选择名称和描述(例如“Mining Demo”…

第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …