上節回顧
主要講了協程、進程、異步IO多路復用。
協程和IO多路復用都是單線程的。
epoll 在linux下通過這個模塊libevent.so實現
gevent 在底層也是用了libevent.so
gevent可以理解為一個更上層的封裝。
使用select或者selectors,每接收或發送數據一次都要select一次
twisted異步網絡框架,強大又龐大,不支持python3 (代碼量python中排top3)。幾乎把所有的網絡服務都重寫了一遍。
一、RabbitMQ 消息隊列介紹
RabbitMQ也是消息隊列,那RabbitMQ和之前python的Queue有什么區別么?
py 消息隊列:
線程 queue(同一進程下線程之間進行交互)
進程 Queue(父子進程進行交互 或者 同屬于同一進程下的多個子進程進行交互)
如果是兩個完全獨立的python程序,也是不能用上面兩個queue進行交互的,或者和其他語言交互有哪些實現方式呢。
【Disk、Socket、其他中間件】這里中間件不僅可以支持兩個程序之間交互,可以支持多個程序,可以維護好多個程序的隊列。
像這種公共的中間件有好多成熟的產品:
RabbitMQ
ZeroMQ
ActiveMQ
……
RabbitMQ:erlang語言 開發的。
Python中連接RabbitMQ的模塊:pika 、Celery(分布式任務隊列) 、haigha
可以維護很多的隊列
RabbitMQ 教程官網:http://www.rabbitmq.com/getstarted.html
幾個概念說明:
Broker:簡單來說就是消息隊列服務器實體。
Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。
Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序。
channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務
二、RabbitMQ基本示例.
1、Rabbitmq 安裝
ubuntu系統
install rabbitmq-server # 直接搞定
以下centos系統
1)Install Erlang
# For EL5:rpm -Uvh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm# For EL6:rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm# For EL7:rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpmyum install erlang
新聞熱點
疑難解答