rabbitmq总结

安装rabbitmq

不想安装Erlang,所以使用docker来安装,链接: 选择带management的(有网页UI)

Docker Hub

运行命令进行下载: docker pull rabbitmq:3.9.10-management-alpine   

运行 docker run -dit --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:3.9.10-management-alpine

查看日志:  docker logs Myrabbitmq

登录web进行访问:http://ip:15672    用户名 密码是上面设的admin admin

内部结构

rabbitmq总结_第1张图片

工作模式

rabbitmq总结_第2张图片

 rabbitmq总结_第3张图片

 RabbitMQ Tutorials — RabbitMQ

 重要的组间:Exchang/ routing/  Queue,(routing 是Exchang与Queue相连的部分),通过Exchang/ routing/  Queue不同的绑定,形成了不同的工作模式(不标定Exchang/ routing/  Queue,后走默认的路径)

也可以用命令行处理    (要安装 apt install rabbitmq-server

# 查看所有队列

rabbitmqctl list_queues

# 根据 queue_name 参数,删除对应的队列

rabbitmqctl delete_queue queue_name

rabbitmqctl start_app/reset/stop_app

代码

 python需要安装pika

若Queue的名字已经生成,修改的Queue的属性,直接运行会报错,先删除对应的Queue(http://192.168.4.37:15672/#/queues 选择对应的Queue,在下面有删除功能)

rabbitmq总结_第4张图片

 MQ默认建立的是临时 queue 和 exchange,如果不声明持久化,一旦 rabbitmq 挂掉,queue、exchange 将会全部丢失。所以我们一般在创建 queue 或者 exchange 的时候会声明 持久化。

1.queue 声明持久化

# 声明消息队列,消息将在这个队列传递,如不存在,则创建。durable = True 代表消息队列持久化存储,False 非持久化存储
result = channel.queue_declare(queue = 'python-test',durable = True)

2.exchange 声明持久化

# 声明exchange,由exchange指定消息在哪个队列传递,如不存在,则创建.durable = True 代表exchange持久化存储,False 非持久化存储
channel.exchange_declare(exchange = 'python-test', durable = True)

 3.消息持久化

虽然 exchange 和 queue 都申明了持久化,但如果消息只存在内存里,rabbitmq 重启后,内存里的东西还是会丢失。所以必须声明消息也是持久化,从内存转存到硬盘。

# 向队列插入数值 routing_key是队列名。delivery_mode = 2 声明消息在队列中持久化,delivery_mod = 1 消息非持久化
    channel.basic_publish(exchange = '',routing_key = 'python-test',body = message,
                          properties=pika.BasicProperties(delivery_mode = 2))

4.acknowledgement 消息不丢失

消费者(consumer)调用callback函数时,会存在处理消息失败的风险,如果处理失败,则消息丢失。但是也可以选择消费者处理失败时,将消息回退给 rabbitmq ,重新再被消费者消费,这个时候需要设置确认标识。

channel.basic_consume(callback,queue = 'python-test',
# no_ack 设置成 False,在调用callback函数时,未收到确认标识,消息会重回队列。True,无论调用callback成功与否,消息都被消费掉
                      no_ack = False)

python 操作RabbitMq详解 - 三只松鼠 - 博客园

你可能感兴趣的:(rabbitmq,服务器)