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