rabbitmq简介与布署

  • rabbitMQ

    • 常见的消息队列产品

      • rocketMQ(火箭)

        • 阿里出品开源

      • kakfa

        • 较少的核心提供超高的吞吐量,高可用高可靠高可扩展,但是建议支持较少的topic来保证其高吞吐量,适合大数据计算与日志收集。

      • rabbitMQ

        • 基于erlang语言开发,天生具有高并发承载能力,性能很好,延迟很低。如果并发要求不超百万级建议使用。

    • rabbitMQ

      • 常用术语

        • 大体与kafka相同只有个别不同

          • queue(队列)

            • 存放消息的地方

          • 交换器

            • 将收到的消息发送到不同的队列

          • 虚拟主机

            • 一个队列可以被一个虚拟主机管理,可以设置管理用户,权限等等。提供了逻辑的分组与隔离。

      • 消息队列的两种工作方式

        • PTP:point to point

          • 两方应用程序一对一对接,在queue中一个消息被消费后就会被释放,然后整体往前移一位(offset)。

        • pub/sub(发布/订阅)

          • 将信息发布到某个队列,当该消息被消费后并不会被释放,仍可以被多个消费者消费。即一对多。

      • 消息队列的缺点

        • 系统可用性降低

          • 越简单的架构可用性越高

        • 系统复杂性提高

          • 对于编程者需要考虑消息在队列中如何处理等,对于运维者就多了一个需要维护的组件,以及要实现消息队列的集群特性等。

        • 数据一致性无法保证

          • 因为增加了中间件,消息的产生与处理,包括中间转发等等因素就可能导致数据不一致。

    • 部署rabbitMQ

      • 单机部署rabbitMQ

        • 准备前奏

          • 处理防火墙与内核安全机制

          • 光盘基础源没有该程序,需要用到网络仓库源。

        • rabbitMQ使用erlang语言编写的

          • yum -y install erlang

          • yum -y install rabbitMQ-server

        • 启动该服务用systemd即可

          • 利用ps aux 查看进行是否开启

        • 开启web管理界面

          • rabbitMQ提供了web的管理界面,但是需要开启

            • rabbitmq-plugins list

              • 列出所有可用插件

            • rabbitmq-plugins enable 插件名

              • web管理页面插件名为:rabbitmq_management

          • 启用插件后可以在列出一下查看是否启用,启用为E,依赖为e。之后需要重启该服务才能生效。

          • 管理界面的web访问端口为15672,为了安全和记忆考虑可以搭建代理来进行访问,建议使用nginx

            • 在对应目录/etc/nginx/conf.d/下创建后缀名为.conf的文件添加如下参数

              • server { listen 80; location / { proxy_pass http://127.0.0.1:15672; } }

              • 这里需要注意location的匹配,仅仅作为代理使用。

            • 初始账号密码都为guest

        • 测试

          • 可以利用程序去对接rabbitmq

          • 本案例使用python作为测试工具

            • 安装python3

              • python3需要安装一个函数库

                • pip3 install pika

          • 编写测试程序

            • 消息生产者,发送端

              • import pika # 连接到RabbitMQ服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.10.101')) channel = connection.channel() # 声明队列;如果队列不存在会被创建 channel.queue_declare(queue='test_queue', durable=True) # 发送消息到队列中 channel.basic_publish( exchange='', routing_key='test_queue', body='Hello, RabbitMQ!', properties=pika.BasicProperties( delivery_mode=2, # 使消息持久化 ) ) print("消息发送完毕") # 关闭连接 connection.close()

            • 消息消费者,接收端

              • import pika # 连接到RabbitMQ服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.10.101')) channel = connection.channel() # 声明队列,确保RabbitMQ中有一个名为'test_queue'的队列 channel.queue_declare(queue='test_queue', durable=True) # 定义回调函数来处理消息 def callback(ch, method, properties, body): print(f"Received {body.decode()}") # 消费队列中的消息,回调函数为callback channel.basic_consume(queue='test_queue', on_message_callback=callback, auto_ack=True) print("Waiting for messages. To exit press CTRL+C") # 开始监听消息 channel.start_consuming()

            • 执行命令

              • python3 程序文件名

              • 在执行时可以利用web管理界面查看

        • rabbitmq在命令行模式的一些常用命令

          • 虚拟主机

            • rabbitmqctl list_vhosts ##列出所有的虚拟主机

            • rabbitmqctl add_vhost fll ##创建名字叫fll的虚拟主机

            • rabbitmqctl delete_vhost fll ##删除名字叫fll的虚拟主机

          • 用户管理

            • rabbitmqctl add_user user1 user1_passwd ##创建user1用户,密码为user1_passwd

            • rabbitmqctl list_users

            • rabbitmqctl change_password user1 new_passwd ##更改user1的密码为new_passwd

            • rabbitmqctl delete_user user1 #删除user1用户

            • rabbitmqctl list_users #列出用户 rabbitmqctl add_user <username> <password> #创建用户 rabbitmqctl change_password <username> <password> ##更改用户密码 rabbitmqctl delete_user <username> #删除用户 rabbitmqctl clear_password <username> #清除用户密码

          • 权限管理

            • 权限角色介绍

              • (1) 超级管理员(administrator):guest

                • 可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

              • (2) 监控者(monitoring)

                • 可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

              • (3) 策略制定者(policymaker)

                • 可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。

              • (4) 普通管理者(management)

                • 仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

            • 赋予帐号权限

              • rabbitmqctl set_user_tags user1 角色

            • 针对虚拟主机添加用户,并赋予对应权限。

              • rabbitmqctl set_permissions -p fll user1 '.*' '.*' '.*'

                • 用户设置所有的配置,读写queue,exchange,分别对应了三个‘.*’

              • 说明:用户权限指的是用户对exchange(交换器),queue(队列)的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。

            • 列出对应权限

              • rabbitmqctl list_permissions -p fll

                • -p 指定虚拟主机

            • 清除权限

              • rabbitmqctl clear_permissions -p fll user2

                • 针对f11的虚拟主机上的用户清除所有权限。

            • 限制

            • 其他

      • 部署rabbitmq集群

        • rabbitmq是用erlang编写的,本身就支持分布式,通过各个节点的cookie来实现。

        • 集群中有两个概念

          • 内存节点

            • 内存结点需要将所有的元数据信息存储到内存中

              • 元数据:队列,交换器,绑定,虚拟主机等组成了AMQP(高级队列消息协议)的地处被称为元数据。

          • 磁盘节点

            • 磁盘节点也会将元数据存储到内存上,并且会将数据持久化到磁盘,

        • 实验过程

          • 为了确保数据安全性,磁盘节点与内存节点都要存在。

          • 准备前奏

            • 在三台主机上都修改主机名,并且编辑hosts文件实现通过域名访问。

            • 处理内核安全机制与防火墙

          • yum安装erlang与rabbitmq-server,需要联网

          • 安装完毕后启动并查看进程

          • 可以选择开启web管理插件

          • 在/var/lib/rabbitmq/下有一个隐藏的cookie文件,.erlang.cookie需要保证三台主机的cookie一致,可利用scp拷贝。或者复制都行。最最最重要的要重启系统否则后续无法正常进行。

          • 内存节点需要单独处理

            • 先关闭rabbitmq

              • rabbitmq stop_app

                • 该命令只会停止掉rabbitmq,并不会停止erlang

            • 将内存节点连接到磁盘节点

              • rabbitmqctl join_cluster --ram rabbit@mq01

            • 再次开启rabbitmq

              • rabbitmqctl start_app

            • 查看集群状态

              • rabbitmqctl cluster_status

 全选复制到xmind后即可形成条理性笔记。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Chromium CI/CD 之Jenkins实用指南2024- 发送任务到Ubuntu(五)

1. 引言 在前一篇《Chromium CI/CD 之 Jenkins - 创建任务&#xff08;四&#xff09;》中&#xff0c;我们详细介绍了如何在Jenkins中创建和配置新任务&#xff0c;包括设置任务名称、选择运行节点、配置触发器、编写执行脚本以及添加文件收集步骤。通过这些步骤&#xff0c;…

COD论文笔记 Deep Gradient Learning for Efficient Camouflaged 2022

动机 这篇论文的动机在于解决伪装目标检测(COD)中的一个关键问题&#xff1a;在复杂背景下&#xff0c;伪装目标与背景的边界模糊&#xff0c;使得检测变得极其困难。现有的方法&#xff0c;如基于边界或不确定性的模型&#xff0c;通常仅响应于伪装目标的稀疏边缘&#xff0c…

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架&#xff0c;支持多种编程语言&#xff0c;最常用的是C。Qt6带来了许多改进和新功能&#xff0c;包括对C17的支持、增强的QML和UI技术、新的图形架构&#xff0c;以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…

使用小波分析实现文字种类自动识别

文章目录 数据简介开始实验小波分解得出结果结果分析误差分析 数据简介 各找一篇中文&#xff0c;日文&#xff0c;韩文&#xff0c;英文&#xff0c;俄文较长的学术论文。将论文转化为JPG格式。拆分每张JPG生成更多小的JPG。最终获得很多5个不同语言的JPG并且自带标签。数据链…

VPN以及GRE和MGRE

VPN VPN — 是虚拟专用网络 通俗地说&#xff0c;就是通过虚拟的手段&#xff0c;将两个独立的网络&#xff0c;穿越一个公共网络进行连接&#xff0c;实现点到点专线的效果&#xff08;可以理解为&#xff1a;一个分公司通过公网和总公司建立点到点的专线连接&#xff09; 现…

Jupyter notebook如何快速的插入一张图片?如何控制插入图片的缩放、靠左展示(ChatGPT)

在Jupyter Notebook中&#xff0c;你可以使用Markdown语法快速插入图片&#xff0c;并且可以通过HTML标签来控制图片的展示方式和缩放。 注意&#xff1a;以下所有操作都有一个前提&#xff0c;即选择Cell-CellType-Markdown 1. 快速插入图片 要在Jupyter Notebook中插入图…

docker安装好了,但是启动失败

新项目要用docker部署,但是docker安装完后,启动失败,服务器用的是国产化的(之前的服务器非国产化,之前也没任何问题),国产化的使用起来问题一大堆,还是bclinux 安装好后重启一直显示 使用journalctl -xe也没任何报错 使用systemctl status docker查看docker状态是灰…

白话大模型微调(Fine-tune)

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

专业学习|系统建模与仿真的基础概念知识合集

学习笔记来源&#xff1a;http://tup.tsinghua.edu.cn/upload/books/yz/086457-01.pdf 一、系统 系统按照事物发展的连续性又可分为连续系统和离散系统。连续系统是指状态变量随 时间连续变化的系统,如图1-1所示;离散系统则是指状态变量只是在某个离散的时间点集合上发生变化…

Problems retrieving the embeddings data form OpenAI API Batch embedding job

题意&#xff1a;从OpenAI API批量嵌入作业中检索嵌入数据时遇到问题 问题背景&#xff1a; I have to embed over 300,000 products description for a multi-classification project. I split the descriptions onto chunks of 34,337 descriptions to be under the Batch e…

Linux--线程互斥(加锁)

目录 0.对原生线程封装的代码 1.为什么需要线程互斥 2.加锁 2.1.认识加锁和它的接口 2.2用一下接口 2.2.1 解决抢票问题 2.2.2设置局部锁 2.3从原理角度理解锁 2.4锁是如何实现的**** 0.对原生线程封装的代码 方便后续对锁的理解&#xff1a;Thread.hpp 详情请看&#…

mybatis-plus LambdaQueryWrapper条件构造器使用apply查询含有逗号‘,‘分隔的字段

mybatis-plus LambdaQueryWrapper apply自定义SQL条件使用 真实业务开发使用场景 数据库:postgreSQL 开发场景:SpringBoot2.5.7 数据库中数据如下 需求 查找, bingBdNumber字段为422875,要求数据库中bind_bd_number这一栏中只要有422875的就返回. 根据上图查422875需要返回…

【python】导入serial模块,读写串口数据(嵌入式软件自动化测试)

目录 环境准备安装pyserial硬件连接 基本函数使用获取串口设备列表初始化串口对象发送数据读取数据 环境准备 安装pyserial 1、python 3.6.7 2、pyserial模块封装了python对串口的访问 pip install serialpip install pyserial如果代码报错卸载掉serial 硬件连接 1、将串口…

Android 10.0 SystemUI下拉状态栏固定展开QsPanel不收缩功能实现

1. 前言 在10.0的系统ROM产品定制化开发中,在systemUi的原生下拉状态栏中,首次下拉展开quickQsPanel,第二次展开就显示 QsPanel,在产品开发中,需要下拉状态栏固定展开QsPanel,不需要二次展开,接下来分析下相关功能的实现,如图: 2.SystemUI下拉状态栏固定展开QsPanel不收…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

&#x1f3af;要点 &#x1f3af;双图神经网络模型&#xff1a;最大后验推理和线性纠错码解码器 | &#x1f3af;重复结构和过约束问题超图推理模型 | &#x1f3af;无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

基于Java技术的致远汽车租赁系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术 工具&#xff1a;Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册…

现场可重构CPLD芯片应用案例—蓝牙音箱

我司英尚微提供的高性能数模混合现场可重构IC、通用可配置的模数混合芯片内部集成丰富的模拟资源和数字资源&#xff0c;可轻松替代电路中的各种标准器件&#xff0c;并按照客户要求组合成最优小型ASIC&#xff0c;缩短开发周期&#xff0c;降低成本。下面介绍LS98002现场可重构…

object-C 解答算法:移动零(leetCode-283)

移动零(leetCode-283) 题目如下图:(也可以到leetCode上看完整题目,题号283) 解题思路: 本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少? 这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置; 当所有“非0元素值”都移…

链表面试练习习题(Java)

1. 思路&#xff1a; 创建两个链表&#xff0c;一个用来记录小于x的结点&#xff0c;一个用来记录大于等于x的结点&#xff0c;然后遍历完原链表后&#xff0c;将小于x的链表和大于等于x的链表进行拼接即可 public class Partition { public ListNode partition(ListNode pH…

如何将PDF转换成可以直接编辑的CAD图纸?

PDF图纸是为了让用户更好的阅览CAD文件&#xff0c;但是&#xff0c;当我们想要对其进行编辑的时候&#xff0c;PDF图纸就是一个麻烦了。那么PDF转换成CAD后可以编辑吗&#xff1f;如何将PDF转换成可以直接编辑的CAD图纸呢&#xff1f;本篇给你答案。 1、启动迅捷CAD编辑器&…