RabbitMQ原理,使用场景,消息分发轮询 与 持久化,如何保证可靠消费

本文详细介绍了RabbitMQ与Redis队列的区别,包括可靠消费、可靠发布等方面,并阐述了在Windows上的安装步骤。讨论了RabbitMQ的消息分发轮询和持久化机制,以及其核心组件Exchange和Queue的作用。此外,还列举了RabbitMQ的常见使用场景,如异步处理、应用解耦、流量削锋,并探讨了确保消息可靠消费的方法。
摘要由CSDN通过智能技术生成

目录:

一. RabbitMq与Redis队列对比

1、RabbitMQ与Redis作用

  • RabbitMQ: RabbitMQ是一个可以在不同程序间共享数据的代理,是实现AMQP(高级消息队列协议)的消息中间件的一种
  • Redis: 是一个Key-Value的NoSQL数据库

2. 线程Queue,进程Queue和RabbitMQ区别

  • 进程Queue用于父进程与子进程(或同一父进程中多个子进程)间数据传递
  • python自己的多个进程间交换数据或者与其他语言(如Java)进程queue就无能为力
  • RabbitMQ就是这样一个可以在不同程序间共享数据的代理

3、具体对比

1. 可靠消费

  • Redis: 没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理
  • RabbitMQ: 具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费

2. 可靠发布

  • Reids: 不提供,需自行实现
  • RabbitMQ: 具有发布确认功能,保证消息被发布到服务器

3. 高可用

  • Redis: 采用主从模式,读写分离,但是故障转移还没有非常完善的官方解决方案
  • RabbitMQ: 集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作

4. 持久化

  • Redis: 将整个Redis实例持久化到磁盘
  • RabbitMQ: 队列,消息,都可以选择是否持久化

5. 应用场景分析

  • Redis: 轻量级,高并发,延迟敏感即时数据分析、秒杀计数器、缓存等
  • RabbitMQ: 重量级,高并发,异步批量数据异步处理、并行任务串行化,高负载任务的负载均衡等

二. 在win7 64位机上安装RabbitMQ

1.安装RabbitMQ需要先安装Erlang语言开发包

  • 下载地址 http://www.erlang.org/download.html 在win7下安装Erlang最好默认安装。
  • C:\Program Files\erl8.3\bin 将Erlang的bin目录路径添加到环境变量

2.安装RabbitMQ 下载地址 http://www.rabbitmq.com/download.html

  • 1) 按照默认安装,安装RabbitMQ
  • 2) C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.8\sbin
    将sbin目录添加到path环境变量中
  • 3)安装完成后后就可以在windows的services.msc中看到RabbitMQ处于启动状态
  • 4)切换到执行命令目录: cd C:\Program Files\RabbitMQ
    Server\rabbitmq_server-3.6.8\sbin
a)       首先关闭rabbitmq:    rabbitmqctl stop_app

b)       还原:                       rabbitmqctl reset

c)        启动:                       rabbitmqctl start_app

d)       添加用户:                rabbitmqctl add_user root root

e)       设置权限:                rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

f)      查看用户:                rabbitmqctl list_users 

g) 查看队列及未处理个数:  rabbitmqctl.bat list_queues

3.安装pike

注:为了支持RabbitMQ,每种语言都有自己专有的模块去与RabbitMQ通信,在python中最常用的是pika

  • 安装pika的方法: pip install pika

三. RabbitMQ消息分发轮询 与 持久化

1、RabbitMQ消息分发轮询:重启RabbitMq会丢失所有的queue中的数据

  • RabbitMQ默认采取轮询方法,将第一个消息发给a第二个发送给b以此类推
  • 默认生产者会将消息发送消费者后会等待确认,如果加上no_ack=True就不会等确认,如果消费者还未执行完就突然断了,那么这条数据不会被其他消费者接收到

生产者:不断向队列中放任务:

import pika

#1 建立一个最基本的socket
#2 ConnectionParameters指定连接的地址,可以加上端口号,用户名,密码等,本机不需要密码
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel 
RabbitMQ是一个开源的消息中间件,它实现了高效的消息传递机制。其原理基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议),它定义了消息的格式和传输规范。 RabbitMQ的核心概念是生产者、消费者和队列。生产者负责发送消息到队列,消费者从队列中接收消息并进行处理。队列是消息的缓冲区,它保存了待处理的消息。 当生产者发送消息时,RabbitMQ会将消息存储在队列中。消费者可以通过订阅队列来接收消息RabbitMQ会按照一定的策略将消息分发消费者,例如轮询、优先级等。 RabbitMQ还支持交换机(Exchange)的概念。生产者将消息发送给交换机,交换机根据特定的规则将消息路由到一个或多个队列。这个规则可以通过绑定(Binding)来定义,绑定将交换机和队列关联起来。 RabbitMQ提供了多种交换机类型,包括直连交换机(Direct Exchange)、主题交换机(Topic Exchange)、广播交换机(Fanout Exchange)等。不同类型的交换机根据路由规则的不同方式来决定消息的路由。 另外,RabbitMQ还具备持久化、确认机制、消息过期等特性,以提供更可靠和灵活的消息传递。 总结来说,RabbitMQ通过生产者将消息发送到队列,消费者从队列中接收并处理消息,交换机负责将消息路由到队列。这种基于AMQP的消息传递机制使得应用程序能够实现解耦、异步通信和可靠消息传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值