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发布订阅

 

  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
View Code

 

posted @ 2021-08-24 09:02    阅读(42)  评论(0编辑  收藏  举报