1 消息队列Rabbitmq介绍
| |
| -中间件---(概念很大)---》准确一些叫消息队列中间件 |
| -消息队列中间件 |
| |
| -使用redis当做消息队列来用 |
| -blpop 阻塞式弹出,实现队列,先进先出 |
| |
| |
| |
| 消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下,生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出” |
| |
| |
| -应用解耦 |
| -流量削峰 |
| -消息分发(发布订阅) |
| -异步消息 |
| -IPC 进程间通信也可以通过消息队列 |
| |
| |
| |
2 rabbitmq安装
| |
| -erlang解释器 |
| -rabbitmq的软件 |
| |
| |
| yum -y install erlang |
| yum -y install rabbitmq-server |
| |
| |
| docker pull rabbitmq:management |
| docker run -di --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management |
| |
| |
| http://10.0.0.101:15672/ |
3 基于queue实现生产者消费者
| import Queue |
| import threading |
| |
| message = Queue.Queue(10) |
| |
| def producer(i): |
| while True: |
| message.put(i) |
| |
| def consumer(i): |
| while True: |
| msg = message.get() |
| |
| for i in range(12): |
| t = threading.Thread(target=producer, args=(i,)) |
| t.start() |
| |
| for i in range(10): |
| t = threading.Thread(target=consumer, args=(i,)) |
| t.start() |
4 基本使用
4.1 发送者
| import pika |
| |
| |
| |
| |
| |
| |
| credentials = pika.PlainCredentials("admin","admin") |
| connection = pika.BlockingConnection(pika.ConnectionParameters('10.0.0.101',credentials=credentials)) |
| |
| |
| channel = connection.channel() |
| |
| channel.queue_declare(queue='hello') |
| |
| |
| |
| channel.basic_publish(exchange='', routing_key='hello', body='Hello World4441!') |
| print(" Sent 'Hello World!'") |
| connection.close() |
| |
4.2 消费者
| import pika |
| |
| |
| |
| credentials = pika.PlainCredentials("admin", "admin") |
| connection = pika.BlockingConnection(pika.ConnectionParameters('10.0.0.101', credentials=credentials)) |
| |
| channel = connection.channel() |
| channel.queue_declare(queue='hello') |
| |
| |
| |
| def callback(ch, method, properties, body): |
| print(" [x] Received %r" % body) |
| |
| |
| channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) |
| print(' [*] Waiting for messages. To exit press CTRL+C') |
| channel.start_consuming() |
| |
5 消息安全(详见笔记)
6 持久化(详见笔记)
7 闲置消费(详见笔记)
8 发布订阅(详见笔记)
9 发布订阅高级之Routing(按关键字匹配)(详见笔记)
本文作者:岳宗柯
本文链接:https://www.cnblogs.com/yuezongke/p/17642827.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步