標籤:install port tin ima waiting rod fill pack basic
1,簡介
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,教程如下:
http://jingyan.baidu.com/article/a17d5285173ce68098c8f2e5.html
2.2安裝pika模組
python使用rabbitmq服務,可以使用現成的類庫pika、txAMQP或者py-amqplib,這裡選擇了pika。
在命令列中直接使用pip命令:
pip install pika
3.樣本測試
執行個體的內容就是從send.py發送訊息到rabbitmq,receive.py從rabbitmq接收send.py發送的資訊。
P表示produce,生產者的意思,也可以稱為寄件者,執行個體中表現為send.py;
C表示consumer,消費者的意思,也可以稱為接收者,執行個體中表現為receive.py;
中間紅色的表示隊列的意思,執行個體中表現為hello隊列。
send.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-import pikaimport random# 建立串連,rabbitmq安裝在本地則hostname為‘localhost‘hostname = ‘192.168.8.190‘port=5672credentials = pika.PlainCredentials(username=‘test‘,password=‘test‘)parameters = pika.ConnectionParameters(host=hostname,port=port,credentials=credentials)connection = pika.BlockingConnection(parameters=parameters)# 建立通道channel = connection.channel()# 聲明一個隊列,生產者和消費者都要聲明一個相同的隊列,用來防止萬一某一方掛了,另一方能正常運行channel.queue_declare(queue=‘hello‘)number = random.randint(1, 1000)body = ‘hello world:%s‘ % number# 交換器; 隊列名,寫明將訊息發往哪個隊列; 訊息內容# routing_key在使用匿名交換器的時候才需要指定,表示發送到哪個隊列channel.basic_publish(exchange=‘‘, routing_key=‘hello‘, body=body)print " [x] Sent %s" % bodyconnection.close()
receive.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-import pikahostname = ‘192.168.8.190‘port=5672credentials = pika.PlainCredentials(username=‘test‘,password=‘test‘)parameters = pika.ConnectionParameters(host=hostname,port=port,credentials=credentials)connection = pika.BlockingConnection(parameters=parameters)# 建立通道channel = connection.channel()channel.queue_declare(queue=‘hello‘)def callback(ch, method, properties, body): print " [x] Received %r" % (body,)# 告訴rabbitmq使用callback來接收資訊channel.basic_consume(callback, queue=‘hello‘, no_ack=True)# 開始接收資訊,並進入阻塞狀態,隊列裡有資訊才會調用callback進行處理,按ctrl+c退出print ‘ [*] Waiting for messages. To exit press CTRL+C‘channel.start_consuming()
我們先運行send.py發送訊息:
再運行receive.py接收訊息:
python中RabbitMQ的使用(安裝和簡單教程)