rabbitmq,&队列

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: rabbitmq,&队列

1.你知道什么是队列吗?

我记得上大学的时候初学数据结构,学到了栈和队列
栈:先进后出,就相当于一个有底的瓶子
队列:先进先出,就相当于一个没有底的瓶子

2.我们看一下最基本的队列

from icecream import ic
import queue
q = queue.Queue()
q.put("1")
ic(q.get())
ic(q.get())

View Code

3.我们聊一下rabbitmq基本信息:

消息队列:就是一个软件,软件里面可以创建一个队列
"""
解耦:单独拿出来
异步: 比如说,我不需要等待其他程序完成再告诉用户此单已成,我直接告诉用户,剩下的程序让他慢慢执行
流量消峰:先进入生产者队列,  然后我再慢慢消费,既不会击垮服务器

简单模式
交换模式
    发布订阅
    关键字模式
    模糊匹配模式

4.简单模式

 4.1简单模式下的生产者代码:

from icecream import ic
import pika
# 连接 rabbitmq
connect = pika.BlockingConnection(pika.ConnectionParameters("wusen0601.xyz"))
# 进入频道,开始操作
channel = connect.channel()
# 创建一个队列
channel.queue_declare(queue="hello")
# 向指定的队列中插入数据(简单模式="",向哪个里面插入数据,插入什么)
channel.basic_publish(exchange='',routing_key="hello",body="hello,word")

View Code

 4.2简单模式下的消费者代码:

from icecream import ic
import pika
connect = pika.BlockingConnection(pika.ConnectionParameters("wusen0601.xyz"))
channel = connect.channel()
# 这个是为了防止消费者先运行,生产者还没有运行,就会先创建队列
channel.queue_declare(queue="hello")
def callback(ch,method,properties,body):
    ic(ch)
    ic(method)
    ic(properties)
    ic(f"[x] Received {body}")
    # ch.basic_ack(delivery_tag=method.delivery_tag)

# 确定监听队列,(队列,默认应答,回调)
channel.basic_consume(queue='hello',auto_ack=True,on_message_callback=callback)

ic("[*]Waiting for message To exit press CTRL+C")
# 把消费者开始运行
channel.start_consuming()

View Code

 4.3参数问题:之消费者问题

"""
怕消费者出问题

效率 高,安全低
默认应答:auto_ack=True:如果callback函数里面报错,取出来了,报错,没有打印数据,但是数据丢失了

效率低,安全高
改成手动应答:auto_ack=False,
并且在回调函数加上# ch.basic_ack(delivery_tag=method.delivery_tag),就是告诉他,我搞完了。
"""

View Code

 4.4参数问题:之生产者问题

"""
如果这个,生产者生产了数据,但是rabbitmq挂了,数据不具备持久化:

为了让数据持久化:
channel.queue_declare(queue="hello3",durable=True)
channel.basic_publish(exchange='',routing_key="hello3",body="hello,word",properties=pika.BasicProperties(delivery_mode=2))


记住:消费者也得加上durable=True
备注:队列一旦创建,就不可以改变,他是持久化就是不是就不是,不可以改变

"""

View Code

 4.5参数问题:之公平分发

# 公平分发,要不就是轮询分发
在消费者里面加上这一句,就变成了公平分发
# channel.basic_qos(prefetch_count=1)

View Code

 

5.交换机模式

 5.1发布订阅

1727338960813.png

 5.2关键字

  image.png

 5.3通配符

  1727338922508.png

 

 

6.谈一下怎么安装rabbitmq:

sudo yum install build-essential
sudo yum install libncurses5-dev
sudo yum install libssl-dev
sudo yum install m4
sudo yum install unixodbc unixodbc-dev
sudo yum install freeglut3-dev libwxgtk2.8-dev
sudo yum install xsltproc
sudo yum install fop
sudo yum install tk8.5

安装好之后运行:
sudo yum install erlang
完成后在控制台输入命令:
erl
可以查看erlang安装版本情况

2).安装RabbitMQ(可以用两种方式)

自动安装
sudo yum install rabbitmq-server
如果没有问题,那就直接安装了,不用设置什么东西

查看运行状态
service rabbitmq-server status
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
48 1
|
13天前
|
消息中间件 JSON Java
|
7天前
|
消息中间件 JSON Java
玩转RabbitMQ声明队列交换机、消息转换器
玩转RabbitMQ声明队列交换机、消息转换器
26 0
|
1月前
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
47 2
|
4月前
|
消息中间件 存储 NoSQL
RabbitMQ的幂等性、优先级队列和惰性队列
**摘要:** 本文讨论了RabbitMQ中的幂等性、优先级队列和惰性队列。幂等性确保了重复请求不会导致副作用,关键在于消费端的幂等性保障,如使用唯一ID和Redis的原子性操作。优先级队列适用于处理不同重要性消息,如大客户订单优先处理,通过设置`x-max-priority`属性实现。惰性队列自3.6.0版起提供,用于延迟将消息加载到内存,适合大量消息存储和消费者延迟消费的场景。
62 4
|
2月前
|
消息中间件 RocketMQ
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
|
2月前
|
消息中间件 Java Kafka
说说RabbitMQ延迟队列实现原理?
说说RabbitMQ延迟队列实现原理?
51 0
说说RabbitMQ延迟队列实现原理?
|
2月前
|
消息中间件 NoSQL 关系型数据库
【RocketMQ系列十三】RocketMQ的集群核心概念之消费重试&死信队列&幂等消息的出现以及处理
【RocketMQ系列十三】RocketMQ的集群核心概念之消费重试&死信队列&幂等消息的出现以及处理
67 1
|
3月前
|
消息中间件 存储 监控
RabbitMQ 死信队列
RabbitMQ的死信队列(DLQ)是存储无法正常消费消息的特殊队列,常见于消息被拒绝、过期或队列满时。DLQ用于异常处理、任务调度和监控,通过绑定到普通队列自动路由死信消息。通过监听死信队列,可以对异常消息进行补偿和进一步处理,提升系统稳定性和可维护性。
46 1
|
3月前
|
消息中间件
RabbitMQ配置单活模式队列
RabbitMQ配置单活模式队列