rabbitmq基础概念详解——环境配置及模拟生产者和消费者简单消息发送(代码片段)

wangcuican wangcuican     2023-05-01     266

关键词:

一、简介:

RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信。而作为中间件的 RabbitMq 无疑是目前最流行的消息队列之一。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

RabbitMq 应用场景广泛:

  • 系统的高可用:日常生活当中各种商城秒杀,高流量,高并发的场景。当服务器接收到如此大量请求处理业务时,有宕机的风险。某些业务可能极其复杂,但这部分不是高时效性,不需要立即反馈给用户,我们可以将这部分处理请求抛给队列,让程序后置去处理,减轻服务器在高并发场景下的压力。
  • 分布式系统,集成系统,子系统之间的对接,以及架构设计中常常需要考虑消息队列的应用。

二、RabbitMQ下载安装

下载地址(windows):https://www.rabbitmq.com/install-windows.html

技术图片

安装:一直下一步下一步就好了,因为是Erlang语言编写的,在安装RabbitMQ的时候会提醒你安装Erlang。

RabbitMQ python帮助文档:https://www.rabbitmq.com/tutorials/tutorial-one-python.html

安装完成后,在cmd窗口中执行以下命令来激活RabbitMQ Manage Plugin

技术图片

 然后重启RabbitMQ服务

技术图片

到这一步,RabbitMQ的安装就算是完成了,其中有几个默认值,我们要知道:

  • 默认的端口号:5672
  • 默认的用户是guest,密码是guest
  • 管理后台的默认端口号:15672

浏览器输入http://localhost:15672/,我们可以看到RabbitMQ的管理后台,然后使用默认的guest账号登录,在这个后台,可以完成新建用户,配置用户角色,新建队列等操作。

 技术图片

三、ConnectionFactory、Connection、Channel

ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。
Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

四、队列(Queue)、生产者、消费者

队列是RabbitMQ的内部对象,用于存储消息。生产者(下图中的P)生产消息并投递到队列中,消费者(下图中的C)可以从队列中获取消息并消费。

技术图片

多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

技术图片 

队列的作用:

  • 存储信息,数据
  • 保证消息的顺序
  • 保证数据的正确交付

五、RabbitMQ架构介绍

Producter

队列消息的产生者,负责生产消息,并将消息传入队列也是一个向交换器发布消息的客户端应用程序。

Exchange

交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

Queue

消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Channel

信道,多路复用连接中的一条独立的双向数据流通道

Consumer

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序

RabbitMQ安装

pip install pika

生产者和消费者简单的消息发送

生产者  (创建一个队列test,然后往消息队列里发送消息hello test)

import pika
credentials
= pika.PlainCredentials(‘guest,‘guest) #mq用户名和密码,如果设置了,在消费者中也要有一样的 connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost", credentials=credentials)) channel = connection.channel() #信道 channel.queue_declare(test) #声明消息队列,消息将在这个队列传递 channel.basic_publish(exchange=‘‘, routing_key=test, body=hello test) #向队列插入数值 routing_key是队列名,body是往消息队列中传递的数据 print(publish done) connection.close() #关闭连接

运行上面这段代码,在后台可以看到队列创建成功,并且有一个消息在等待。

技术图片

 

消费者 (从test队列中获取数据)

import pika

credentials = pika.PlainCredentials(‘guest,‘guest)  #和生产者一样的用户名和密码
connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost", credentials=credentials))
channel = connection.channel()  #创建信道,数据流通道
channel.queue_declare(queue=test)   #队列
def callback(ch, method, properties, body):   #定义一个回调函数来处理消息队列中的消息
    print("consume done", ch, method, properties,body)
channel.basic_consume(‘test‘,callback, auto_ack=True)   #注意:队列参数放第一个,这部分源码改了
channel.start_consuming()   #开始接收消息,并进入阻塞状态,队列里有消息才会调用callback进行处理

运行消费者代码报错:

TypeError: basic_consume() got multiple values for argument queue

是因为basic_consume的源码参数位置改变了:第一个参数放队列名字。 注意:queue参数和auto_ack参数

源码参数:

技术图片

运行消费者代码会从队列中取出信息,Ready的消息数为0

技术图片

 

 

更多讲解请看下一节

rabbitmq——发布确认高级&备份交换机的概念理解及应用举例(代码片段)

...e/details/118367305在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行RabbitMQ的消息可靠投递... 查看详情

rabbitmq基础教程之基本概念(代码片段)

RabbitMq基础教程之基本概念RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事。消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之间的异步协调工作由于工作原因,接触和使用r... 查看详情

rabbitmq——发布确认高级&备份交换机的概念理解及应用举例(代码片段)

文章目录:1.发布确认1.1配置文件及配置类1.2生产者&消费者1.3回调接口1.4模拟交换机故障1.5模拟队列故障1.6回退消息2.备份交换机2.1配置类&核心配置文件2.2普通消费者&报警消费者2.3生产者2.4回调接口实现类1.发布确... 查看详情

rabbitmq使用介绍及实例

消息列队不做过多解释了,直接讲讲rabbitmq的基本概念和路由模式。一、安装及基本概念rabbitmq是基于erlang编写的,所以安装rabbitmq之前需要安装erlang的环境,配置环境变量,百度即可。connectionFactory、connection、channel不做过多介... 查看详情

rabbitmq使用介绍及实例

消息列队不做过多解释了,直接讲讲rabbitmq的基本概念和路由模式。一、安装及基本概念rabbitmq是基于erlang编写的,所以安装rabbitmq之前需要安装erlang的环境,配置环境变量,百度即可。connectionFactory、connection、channel不做过多介... 查看详情

rabbitmq生产环境配置(代码片段)

目录一rabbitmq生产部署1.1rabbitmq.conf1.2advanced.config1.3rabbitmq-env.conf1.4在生产环境中不适用的策略。一rabbitmq生产部署RabbitMQ常用的三种自定义服务器的通用方法:配置文件rabbitmq.conf环境变量文件rabbitmq-env.conf补充配置文件advanced.config... 查看详情

rabbitmq基础知识详解

RabbitMQ基础知识详解2017年08月28日20:42:57 dreamchasering 阅读数:41890 标签: RabbitMQ 什么是MQ?      MQ全称为MessageQueue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生... 查看详情

rabbitmq部署及配置详解(集群部署)

RabbitMQ集群是一个或多个节点,每个节点共享用户、虚拟主机、队列、交换、绑定、运行时参数和其他分布式状态。一、RabbitMQ集群可以通过多种方式形成:通过在配置文件中列出群集节点以声明方式以声明方式使用基于D... 查看详情

spring集成rabbitmq配置文件详解(生产者和消费者)(代码片段)

1,首先引入配置文件org.springframework.amqp,如下:<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>1.7.1.RELEASE</versio 查看详情

rabbitmq基础知识详解

...另一端则可以读取队列中的消息。     RabbitMQ是MQ的一种。下面详细介绍一下Rabb 查看详情

rabbitmq基础知识详解

...另一端则可以读取队列中的消息。     RabbitMQ是MQ的一种。下面详细介绍一下Rabb 查看详情

rabbitmq基础组件和springboot整合rabbitmq简单示例

...这个概念很重要,后面的代码里面充分体现了这一点)。RabbitMQ基础知识可查看消息队列RabbitMQ基础知识详解队列(Que 查看详情

rabbitmq消息中间件环境配置及原理了解(代码片段)

视频内容,首先视频正在审核,通过了我会贴上来。 一、Docker入门Docker是什么?   Docker是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的... 查看详情

rabbitmq入门之基础概念(代码片段)

什么是消息队列(MQ)消息是在不同应用间传递的数据。这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包含多个嵌套的对象。消息队列(MessageQueue)简单来说就是一种应用程序间的通讯方式,消息发送后立即... 查看详情

ansible基础理论及安装

Ansible介绍及安装一.ansible自动化运维完成的功能在运维工程中,我们部署一台使其能够在生产环境中使用大致经过一下步骤:安装主机。部署中间件,运行环境等。安装我们实际生产的应用程序。这一系列步骤如果人工一步步去... 查看详情

rabbitmq安装配置

  RabbitMQ是最流行开源消息系统,已经超过35000个RabbitMQ生产部署在各种规模的企业。RabbitMQ是轻量级、易部署自建机房或云上。它支持多种消息协议,RabbitMQ支持分布式部署满足高可用、高扩展的需求。RabbitMQ能运行在各种... 查看详情

rabbitmq生产部署指南

像RabbitMQ这样的数据服务通常有许多可调参数。一些配置对开发有很大的意义,但并不适合生产,本指南旨在为此提供帮助 虚拟主机例如,在单租户环境中,当您的RabbitMQ集群专门为生产中的单个系统供电时,使用默认的虚... 查看详情

winserver安装rabbitmq服务器及配置(代码片段)

RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统。它遵循MozillaPublicLicense开源协议,采用Erlang实现的工业级的消息队列(MQ)服务器,RabbitMQ是建立在ErlangOTP平台上。装RabbitMQ服务器必须首先安装Erlang运... 查看详情