python中RabbitMQ的使用(安裝和簡單教程)

1,簡介html

RabbitMQ(Rabbit Message Queue)是流行的開源消息隊列系統,用erlang語言開發。
 
1.1關鍵詞說明:
Broker:消息隊列服務器實體。
Exchange:消息交換機,它指定消息按什麼規則,路由到哪一個隊列。
Queue:消息隊列載體,每一個消息都會被投入到一個或多個隊列。
Binding:綁定,它的做用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker裏能夠開設多個vhost,用做不一樣用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序。
channel:消息通道,在客戶端的每一個鏈接裏,可創建多個channel,每一個channel表明一個會話任務。
 
1.2消息隊列運行機制:
(1)客戶端鏈接到消息隊列服務器,打開一個channel。
(2)客戶端聲明一個exchange,並設置相關屬性。
(3)客戶端聲明一個queue,並設置相關屬性。
(4)客戶端使用routing key,在exchange和queue之間創建好綁定關係。
(5)客戶端投遞消息到exchange。
(6)exchange接收到消息後,就根據消息的key和已經設置的binding,將消息投遞到一個或多個隊列裏。
注:在聲明一個隊列後,若是將其持久化,則下次不須要進行聲明,由於該隊列已經在rabbitMQ中了!!!
         例以下面的例子中都爲首次聲明一個隊列!!!
 
1.3exchange類型:
1.Direct交換機
特色:依據key進行投遞
例如綁定時設置了routing key爲」hello」,那麼客戶端提交的消息,只有設置了key爲」hello」的纔會投遞到隊列。
2.Topic交換機
特色:對key模式匹配後進行投遞,符號」#」匹配一個或多個詞,符號」*」匹配一個詞
例如」abc.#」匹配」abc.def.ghi」,」abc.*」只匹配」abc.def」。
3.Fanout交換機
特色:不須要key,採起廣播模式,一個消息進來時,投遞到與該交換機綁定的全部隊列
 
2.構建環境
2.1在windows環境下安裝rabbitmq,教程以下:
2.2安裝pika模塊
python使用rabbitmq服務,可使用現成的類庫pika、txAMQP或者py-amqplib,這裏選擇了pika。
在命令行中直接使用pip命令:
pip install pika

 

3.示例測試python

實例的內容就是從send.py發送消息到rabbitmq,receive.py從rabbitmq接收send.py發送的信息。windows

P表示produce,生產者的意思,也能夠稱爲發送者,實例中表現爲send.py;服務器

C表示consumer,消費者的意思,也能夠稱爲接收者,實例中表現爲receive.py;dom

中間紅色的表示隊列的意思,實例中表現爲hello隊列。測試

send.pyspa

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3 
 4 import pika
 5 import random
 6 
 7 # 新建鏈接,rabbitmq安裝在本地則hostname爲'localhost'
 8 hostname = '192.168.1.133'
 9 parameters = pika.ConnectionParameters(hostname)
10 connection = pika.BlockingConnection(parameters)
11 
12 # 建立通道
13 channel = connection.channel()
14 # 聲明一個隊列,生產者和消費者都要聲明一個相同的隊列,用來防止萬一某一方掛了,另外一方能正常運行
15 channel.queue_declare(queue='hello')
16 
17 number = random.randint(1, 1000)
18 body = 'hello world:%s' % number
19 # 交換機; 隊列名,寫明將消息發往哪一個隊列; 消息內容
20 # routing_key在使用匿名交換機的時候才須要指定,表示發送到哪一個隊列
21 channel.basic_publish(exchange='', routing_key='hello', body=body)
22 print " [x] Sent %s" % body
23 connection.close()

receive.py命令行

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3 
 4 import pika
 5 
 6 hostname = '192.168.1.133'
 7 parameters = pika.ConnectionParameters(hostname)
 8 connection = pika.BlockingConnection(parameters)
 9 
10 # 建立通道
11 channel = connection.channel()
12 channel.queue_declare(queue='hello')
13 
14 
15 def callback(ch, method, properties, body):
16     print " [x] Received %r" % (body,)
17 
18 # 告訴rabbitmq使用callback來接收信息
19 channel.basic_consume(callback, queue='hello', no_ack=True)
20 
21 # 開始接收信息,並進入阻塞狀態,隊列裏有信息纔會調用callback進行處理,按ctrl+c退出
22 print ' [*] Waiting for messages. To exit press CTRL+C'
23 channel.start_consuming()

咱們先運行send.py發送消息:code

再運行receive.py接收消息:htm

相關文章
相關標籤/搜索