【RabbitMQ】消息队列 - RabbitMQ的使用记录

目录

一、什么是消息队列

二、什么是RabbitMQ

三、安装RabbitMQ

3.1 安装Erlang环境

3.2 安装RabbitMQ

3.3 打开服务管理界面

3.4 常用命令

四、Python示例代码

4.1 发送数据

4.2 接收数据


一、什么是消息队列

        消息队列(Message Queue)是一种用于在应用程序之间传递消息的通信方式,消息队列允许应用程序异步地发送和接收消息,并且不需要直接连接到对方。

        消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串也可以更复杂,可能包含嵌入对象。

        队列(Queue)可以说是一个数据结构,可以存储数据,先进先出。

二、什么是RabbitMQ

        一款基于AMQP(高级消息队列协议)用于软件之间通信的中间件,由Rabbit科技有限公司开发,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

        Rabbitmq四大核心:生产者、消费者、队列、交换机

        AMQP协议是一种二进制协议,它定义了一组规则和标准,以确保消息可以在不同的应用程序和平台之间传递和解释。AMQP协议包含四个核心组件:消息、交换机、队列、绑定

三、安装RabbitMQ

3.1 安装Erlang环境

        先安装Erlang环境,下载地址:Downloads - Erlang/OTP。下载Erlang环境时需注意与Rabbitmq版本匹配,版本对应关系查询网址:Erlang Version Requirements | RabbitMQ

        这里下载的Erlang版本为“26.2.5”

下载后是一个可执行文件

以管理员身份运行,然后一直点击“Next”

安装好后需要在环境变量中设置一下:

3.2 安装RabbitMQ

根据版本对应关系, “26.2.x”版本的Erlang对应3.13版本的RabbitMQ

下载地址:Installing on Windows | RabbitMQ

 下载后直接安装(不要安装在包含中文和空格的目录下!安装后window服务中就存在rabbitMQ了,并且是启动状态。

3.3 打开服务管理界面

RabbitMQ安装完成后,执行以下步骤打开服务管理界面

首先找到RabbitMQ安装目录下的“sbin”文件夹

双击rabbitmq-server.bat来重启服务

如果遇到端口占用情况可以尝试找到占用端口的应用程序的PID,然后杀死

浏览器输入http://127.0.0.1:15672 , 即可看到rabbitmq管理界面的登陆页

输入用户名和密码登录,默认都为guest。登陆之后我们可以添加一个用户名和密码

3.4 常用命令

命令需要先cd到“xxx\rabbitmq_server-3.13.2\sbin”路径下再输

(1)启动/停止

rabbitmq-service start/stop

(2)设置用户密码

rabbitmqctl add_user chaochao 123456

(3)设置用户为administrator角色

rabbitmqctl set_user_tags chaochao administrator

四、Python示例代码

4.1 发送数据

如果服务端没有设置密码,使用如下代码即可发送数据

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) # 创建连接
channel = connection.channel()  # 创建channel
channel.queue_declare(queue="test_q1")  # 申明队列
# 往队列发送数据
channel.basic_publish(
    exchange='',
    routing_key='test_q1',  # 消息队列名称
    body='Hello World!'  # 消息内容
)
connection.close()  # 关闭连接

 如果有密码,则需要添加如下部分:

import pika

credentials = pika.PlainCredentials("chaochao","123456")
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',credentials=credentials)) # 创建连接
channel = connection.channel()  # 创建channel
channel.queue_declare(queue="test_q1")  # 申明队列
# 往队列发送数据
channel.basic_publish(
    exchange='',
    routing_key='test_q1',  # 消息队列名称
    body='Hello World!'  # 消息内容
)
connection.close()  # 关闭连接

如果报错“pika.exceptions.ProbableAccessDeniedError: ConnectionClosedByBroker: (530) "NOT_ALLOWED - access to vhost '/' refused for user 'chaochao'"”如下:

表示服务未对该用户开放相关的权限,如 Virtual Host权限

我们可以输入如下命令设置用户拥有全部权限:

rabbitmqctl set_permissions -p "/" chaochao ".*" ".*" ".*"

设置过后就可以成功发送。

4.2 接收数据

import pika

credentials = pika.PlainCredentials("chaochao","123456")
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',credentials=credentials)) # 创建连接
channel = connection.channel()  # 创建channel
channel.queue_declare(queue="test_q1")  # 申明队列

def callback(ch, method, properties, body):  # 有消息进队列就执行该函数
    print("Received: %r" % body)

channel.basic_consume(
    queue="test_q1",
    on_message_callback = callback,
    auto_ack=True
)

channel.start_consuming()

参考视频:

https://www.bilibili.com/video/BV1Am4y1z7Tu/?p=2&spm_id_from=pageDriver&vd_source=36a3e35639c44bb339f59760641390a8

03 rabbmitMQ消息安全之ack_哔哩哔哩_bilibili 

参考文章:

RabbitMQ使用教程-CSDN博客

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

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

相关文章

Docker 部署 Prometheus 实现一个极简的 QPS 监控

背景 : Prometheus 是近年来最流行的开源监控框架, 其功能强大且易于使用, 拥有各种主流后端语言(Java/Go/Python/Node.js等)与各种场景(如web handler/ k8s/Nginx/MySQL等)的客户端, 并自带图形化显示页面。分享一个快速入门Prometheus 的教程, 实现一个极简的, 后端开发需要特…

ICRA 2024 成果介绍:基于 RRT* 的连续体机器人高效轨迹规划方法

近来,连续体机器人研究受到越来越多的关注。其灵活度高,可以调整形状适应动态环境,特别适合于微创手术、工业⽣产以及危险环境探索等应用。 连续体机器人拥有无限自由度(DoF),为执行空间探索等任务提供了灵…

有了这玩意,分分钟开发公众号功能!

大家好,我是程序员鱼皮。 不论在企业、毕设还是个人练手项目中,很多同学或多或少都会涉及微信相关生态的开发,例如微信支付、开放平台、公众号等等。 一般情况下,我们需要到官网查阅这些模块对应的 API 接口,自己编写…

数据结构(Java实现):顺序表

目录 1. 线性表2.顺序表2.1自己实现一个List接口2.2 IList接口的实现2.3 测试代码 1. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、…

下载npm I就包错解决方案

npm i xxxx -S --legacy-peer-deps 如果包错就执行以上命令

【CSP CCF记录】202209-1 如此编码

题目 过程 C中"/"的使用 当a和被b均为int, long, char这样的整数类型&#xff0c;此时除法运算的结果为所得商的整数部分&#xff0c;例如&#xff1a;180/100&#xff0c;结果为1&#xff1b; int a 180;int b a / 100;cout << b << endl;#结果为1当…

用Arm CCA解锁数据的力量

安全之安全(security)博客目录导读 目录 CCA将如何改变Arm架构呢? 在实践中部署CCA 释放数据和人工智能的全部力量和潜力 早期计算中最大的挑战之一是管理计算资源&#xff0c;以最大化计算效率同时提供给不同程序或用户分配资源的分离。这导致了我们今天大多数使用的时间…

windows安装DrawDB

下载 新建一个目录drawdb,使用git下载&#xff0c;如果没有安装git的话&#xff0c;进入git官网进行下载windows版本 https://git-scm.com/downloads。 空白地方鼠标右键&#xff0c;打开git终端 执行命令&#xff1a; git clone https://github.com/drawdb-io/drawdb 安装依…

阿里巴巴找黄金宝箱(II) - 贪心思维

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输出描述三、输入描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布自己的解题思路&#xff0c;希望大家多指教 一、题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发…

【自动驾驶技术栈学习】1-硬件《大话自动驾驶》| 综述要点总结 by.Akaxi

----------------------------------------------------------------------------------------------------------------- 致谢&#xff1a;感谢十一号线人老师的《大话自动驾驶》书籍&#xff0c;收获颇丰 链接&#xff1a;大话自动驾驶 (豆瓣) (douban.com) -------------…

头歌(EduCoder):数据挖掘算法原理与实践 -- 决策树

【头歌】机器学习实训代码 第一关&#xff1a;决策树算法思想 1、下列说法正确的是&#xff1f;&#xff08; AB &#xff09; A、训练决策树的过程就是构建决策树的过程B、ID3算法是根据信息增益来构建决策树C、C4.5算法是根据基尼系数来构建决策树D、决策树模型的可理解性不…

GPU性能实时监控的几种软件

在深度学习服务器上&#xff0c;各种模型的训练&#xff0c;需要监控GPU的情况&#xff0c;并且需要根据使用状态来切换不同的GPU上。 有以下四款软件&#xff0c;可以很好的进行GPU状态监控。 1. nvidia-smi 一个跨平台工具&#xff0c;用于监控和管理NVIDIA GPU的状态和性…

python获取网页表格数据

需求 需要网页中的基因&#xff08;Gene Symbol&#xff09;&#xff0c;一共371个。 使用pandas读取网页表格 read_html 返回的是列表&#xff08;a list of DataFrame&#xff09; import pandas as pd import bioquest as bq url "http://exocarta.org/browse_resul…

1068: 图的按录入顺序深度优先搜索

解法&#xff1a; #include<iostream> #include<vector> #include<string> using namespace std; int arr[100][100]; string vertex; void dfs(vector<int>& a,int u) {a[u] 1;cout << vertex[u];for (int i 0; i < a.size(); i) {if…

Windows11系统安装Mysql8之后,启动服务net start mysql报错“服务没有响应控制功能”的解决办法

问题 系统环境&#xff1a;Windows11 数据库版本&#xff1a;Mysql8 双击安装&#xff0c;一路下一步&#xff0c;完成&#xff0c;很顺利&#xff0c;但是开启服务后 net start mysql 报错&#xff1a; 服务没有响应控制功能。 请键入 NET HELPMSG 2186 以获得更多的帮助 不…

什么是分库分表

读写分离主要应对的是数据库读并发&#xff0c;没有解决数据库存储问题。试想一下&#xff1a;如果 MySQL 一张表的数据量过大怎么办? 答案当然是分库分表 什么是分库&#xff1f; 分库 就是将数据库中的数据分散到不同的数据库上&#xff0c;可以垂直分库&#xff0c;也可…

Today At Apple 20240512 学习拍照

文章目录 微距打开模式设置曝光值人像模式设置光模式实况 官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载apple store&#xff08;不是app store&#xff09;&#xff0c;点击课程…

前端面试:谈谈 JS 垃圾回收机制

垃圾回收 JavaScript 中的内存管理是自动执行的&#xff0c;而且是不可见的。我们创建基本类型、对象、函数……所有这些都需要内存。 当不再需要某样东西时会发生什么? JavaScript 引擎是如何发现并清理它? 可达性 JavaScript 中内存管理的主要概念是可达性。 简单地说…

力扣HOT100 - 763. 划分字母区间

解题思路&#xff1a; class Solution {public List<Integer> partitionLabels(String s) {int[] last new int[26];int len s.length();for (int i 0; i < len; i) {last[s.charAt(i) - a] i;//记录字母最远的下标}List<Integer> partition new ArrayList…

低血压怎么办?低血压患者应该如何调理?

点击文末领取揿针的视频教程跟直播讲解 低血压在生活中也是一种常见的问题&#xff0c;低血压的朋友常有头晕眼黑、冒冷汗等症状&#xff0c;对工作学习产生了一定的影响。 什么是低血压呢&#xff1f; 低血压是指体循环动脉压力低于正常的状态。即血压低于正常水平。 ​一般…