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

來源:互聯網
上載者:User

標籤: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的使用(安裝和簡單教程)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.