RabbitMQ学习二
RabbitMQ 是一個消息broker。它的主要概念就是接受和轉發消息??梢园阉斪饕粋€郵局:當向郵箱投遞一封郵件時,你確信郵差最終會將這封郵件投遞到收件人。使用這個比喻,RabbitMQ就是郵箱,郵局和郵差。
RabbitMQ和郵局最大的區別就是它不處理紙質信件而是處理二進制數據--消息
RabbitMQ和其他消息系統通常都有以下幾個術語:
生產者 ? 發送消息
? ?
? ?
隊列
消費者
使用python驅動發送"Hello World!"
pip install pika
第一個測試程序send.py將會向這個隊列發送單個消息。首要做的是向RabbitMQ Server建立一個連接。
默認情況下是不能使用guest用戶登錄的
In?[15]:?import?pikaIn?[16]:?credentials=pika.PlainCredentials('xxx','xxx')In?[17]:?parameters=pika.ConnectionParameters(host='172.28.10.71',credentials=credentials)在發送消息之前需要確保收件人隊列存在,如果發送消息到不存在的地點,RabbitMQ將會直接丟棄這個消息。
創建一個用于投遞消息的隊列
使用RabbitMQ,不能直接發送一條消息到隊列。它需要經過一個交換機exchange.
在退出程序之前we need to make sure the network buffers were flushed and our message was actually delivered to RabbitMQ.只需要關閉連接就行。
完成的程序 send.py
#!/usr/bin/pythonimport?pikaconnection=pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel=connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='',routing_key='hello',body='Hello?World!') print?"[x]?Sent?'Hello?World!'" connection.close()每執行一次就往名為hello的隊列中添加一條消息,使用rabbitmqctl list_queues可以查看隊列長度
第二個程序receive.py 將會從這個隊列中接收消息并打印它們
首先需要連接RabbitMQ,然后需要確保隊列存在
從隊列中接受消息要復雜得多,它的工作方式是向這個隊列訂閱一個callback函數。任何時候,接收到一條消息,callback函數會被pika庫調用
然后需要告訴RabbitMQ這個特別的函數是需要從hello隊列接收消息
channel.basic_consume(callback,queue='hello',no_ack=True)最后,引入一個永不結束的循環等待接收數據并運行callback函數
receive.py
#!/usr/bin/pythonimport?pikaconnection=pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel=connection.channel() channel.queue_declare(queue='hello')print?'[*]?Waiting?for?messages.To?exit?press?CTRL+c'def?callback(ch,method,properties,body):print?"[x]?Received?%r"?%(body,)channel.basic_consume(callback,queue='hello',no_ack=True) channel.start_consuming()然后測試:
[root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!' [root@test71?rabbitmq]#?python?send.py? [x]?Sent?'Hello?World!'參考資料:
http://previous.rabbitmq.com/v3_3_x/tutorials/tutorial-one-python.html
轉載于:https://blog.51cto.com/john88wang/1670904
總結
以上是生活随笔為你收集整理的RabbitMQ学习二的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: C#中HttpClient使用注意:预热
- 下一篇: Sql语句之select 5种查询
