本文主要是介绍rabbitmq 初探,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
启动服务端
- 官方教程
- 官方没有给出 docker-compose 脚本, 那么我就自己搞一个
docker-compose 启动
跑一下
- 官方教程
- 繁琐的文字大家使用 google 翻译自行查看
使用 python
初始化环境
- 安装pip包: pika,
pip install pika
- PS: 官方给出的是:
python -m pip install pika --upgrade
, 但是使用该命令不但很慢,而且会失败。
连接测试
- 将如下代码加入
send.py
中#!/usr/bin/python3
import pika
# 初始化链接
# PS: 因为我这里是在 docker for mac 环境中运行的, host.docker.internal 代表本机
# PS2: 如果不理解上一句, 则无关紧要, 将下面的 host.docker.internal 替换为 localhost 即可
connection = pika.BlockingConnection(pika.ConnectionParameters('host.docker.internal'))
# 获取 channel, 应该是频道的意思
channel = connection.channel()
- 运行
chmod +x send.py
赋予 send.py
执行权限, 后面就可以使用 ./send.py
直接执行 python 脚本
- 运行
./send.py
未报错, 则表示链接成功
发送消息
- 根据官方文档, 补充代码, 此时
send.py
则如下#!/usr/bin/python3
import pika
# 初始化链接
# PS: 因为我这里是在 docker for mac 环境中运行的, host.docker.internal 代表本机
# PS2: 如果不理解上一句, 则无关紧要, 将下面的 host.docker.internal 替换为 localhost 即可
connection = pika.BlockingConnection(pika.ConnectionParameters('host.docker.internal'))
# 获取 channel, 应该是频道的意思
channel = connection.channel()
# 声明一个队列, declare 意思是声明
channel.queue_declare(queue='hello')
# 将 "Hello World!" 推送到 名为 "hell" 的 队列
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
# 输出内容, 一般 [ ] xxx, 表示 xxx 未完成, 而 [x] xxx 则表示 xxx 已完成
# 这里输出该内容表示 已经将 "Hello World!" 发送。
print(" [x] Sent 'Hello World!'")
# 关闭连接
connection.close()
- 运行
./send.py
得到如下输出, 则表示消息入队成功[x] Sent 'Hello World!'
接收消息
- 根据官方文档, 将如下代码写入
receive.py
文件#!/usr/bin/python3
import pika, sys, os
def main():
# 这里写为 host.docker.internal 的原因查看 send.py
connection = pika.BlockingConnection(pika.ConnectionParameters(host='host.docker.internal'))
channel = connection.channel()
# 声明一个名为 "hello" 的 队列
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)
# 输出信息, 告诉调用者使用 "ctrl+c" 快捷键停止监听
print(' [*] Waiting for messages. To exit press CTRL+C')
# 开始监听队列
channel.start_consuming()
if __name__ == '__main__':
"""启动 main 函数
当按下 ctrl+c 后停止运行
"""
try:
main()
except KeyboardInterrupt:
print('Interrupted')
try:
sys.exit(0)
except SystemExit:
os._exit(0)
- 执行
chmod +x receive.py
为 receive.py
赋予执行权限, 方便后面调用
- 执行
./receive.py
可以得到如下输出[*] Waiting for messages. To exit press CTRL+C
[x] Received b'Hello World!'
输出解读
[*] Waiting for messages. To exit press CTRL+C
是 print 的内容
[x] Received b'Hello World!'
是回调函数输出的内容, 看到此输出, 表示已经从 rabbitmq 的队列中读取到了数据
发送&&接收
- 运行
./receive.py
开始接收消息(PS: 如果之前已经运行了还没有关闭, 那就可以不运行)
- 新建命令行运行
./send.py
- 仔细观察, 可以发现 每次运行
./send.py
, 都可以在 ./receive.py
中看到一个 [x] Received b'Hello World!'
的输出
- 自此, 已经初步掌握了 rabbit 的
入队
, 出队
的操作
这篇关于rabbitmq 初探的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!