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发布订阅
5.2关键字
5.3通配符
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