在python中引入zeromq訊息中介軟體環境

2021-06-18 02:41:50 字數 3210 閱讀 7248

最近在研究zeromq中介軟體,他是乙個輕量級的訊息中介軟體,傳說是世界上最快的訊息中介軟體,為什麼這麼說呢?

因為一般的訊息中介軟體都需要啟動訊息伺服器,但是zeromq這廝盡然沒有訊息伺服器,他壓根沒有訊息中介軟體的架子,但是這並不能掩蓋他的強大。

通過和activemq,rabbitmq對比,顯然功能上沒有前兩者這麼強大,他不支援訊息的持久化,但是有訊息copy功能,他也不支援崩潰恢復,而且由於他太快了,可能客戶端還沒啟動,服務端的訊息就已經發出去了,這個就容易丟訊息了,但是zeromq自由他的辦法,就先說這麼多了。先來看看怎麼在python中引入這個強大的利器。

安裝過程中可能會讓你安裝一些依耐包,耐心安裝即可,可以用命令echo $?(中間有個空格)來檢視返回結果,返回0則前乙個命令執行完整。

1.去獲取乙個原始碼包:最好選乙個2.1以上的版本,防止裝不了。

2.tar xvf zeromq-2.1.11.tar.g

z  --解壓tar包

3.cd 

zeromq-2.1.11

4../configure

5.make

6.sudo make install

7.sudo ldconfig

8.pip install pyzmq

安裝好了以後可以測一下

>>> python 

>>>

import zmq 

>>>

print "current 0mq version is "+zmq.zmq_version()

current 0mq version is2.1.11

測試成功,說明python引入zeromq成功了,下面我們可以測下怎麼傳遞訊息的

hwserver.py

python**  

##   hello world server in python

#   binds rep socket to tcp://*:5555

#   expects "hello" from client, replies with "world"

#import zmq  

import time  

context = zmq.context()  

socket = context.socket(zmq.rep)  

socket.bind("tcp://*:5555")  

while

true:  

#  wait for next request from client

message = socket.recv()  

print

"received request: ", message  

#  do some 'work'

time.sleep (1)        #   do some 'work'

#  send reply back to client

socket.send("world")  

hwclient.py

python**  

##   hello world client in python

#   connects req socket to tcp://localhost:5555

#   sends "hello" to server, expects "world" back

#import zmq  

context = zmq.context()  

#  socket to talk to server

print

"connecting to hello world server..."

socket = context.socket(zmq.req)  

socket.connect ("tcp://localhost:5555")  

#  do 10 requests, waiting each time for a response

for request in range (1,10):  

print

"sending request ", request,"..."

socket.send ("hello")  

#  get the reply.

message = socket.recv()  

print

"received reply ", request, "[", message, "]"

啟動server和client你會發現兩邊都在傳送訊息,這是zmq中的應答模式,類似於請求響應模式。

下面我們說說pub和sub模式。

zeromq中的pub和sub模式沒有什麼特別的

但是這個時候我們會有疑問了,沒有伺服器,server(pub)端傳送訊息需要繫結ip和埠號。client(sub)端需要連線

ip和埠號這樣才能訂閱到server端傳送的主題。

這樣豈不是天下大亂,訊息傳輸都中pub端豈不是透明了。在zmq中有個模式叫**模式,其**特別簡單

python**  

import zmq  

context = zmq.context()  

frontend = context.socket(zmq.sub)  

frontend.connect("tcp:")  

backend = context.socket(zmq.pub)  

backend.bind("tcp:")  

frontend.setsockopt(zmq.subscribe, '')  

while

true:  

while

true:  

message = frontend.recv()  

more = frontend.getsockopt(zmq.rcvmore)  

if more:  

backend.send(message, zmq.sndmore)  

else:  

backend.send(message)  

break

# last message part

這裡啟動乙個**端,負責接受訊息以及分發訊息,有沒有訊息伺服器的感覺,這下子世界清靜了。。

我們啟動一到兩個**來負責幹其他訊息中介軟體訊息伺服器幹的事(有點繞!)

就這樣在python中引入了zmq了,但是在乙個分布式的集群環境下,一般軟體環境很難保持統一,那麼跨語言怎麼通訊呢?請看下回分解。

在vue中如何引入element ui

element ui是餓了麼團隊為 vue提供的 ui元件 下面介紹如何在專案中引入與使用 借助 babel plugin component 我們可以只引入需要的元件,以達到減小專案體積的目的。首先 安裝 babel plugin component npm install babel plugi...

CSS樣式在HTML中引入

css樣式在html中引入 第一種方式在html的頭資訊中定義css 示例 doctype html html head meta charset utf 8 title insert title here title style type text css 我是css 注釋 p style hea...

Spring MVC 在jsp中引入css

背景 前端寫的 html 引入css 格式沒有問題 但是我用jsp顯示就是不行 檢查了路徑沒有問題後,最後發現是spring mvc預設攔截所有請求,所以你需要單獨把靜態資源配起來,springmvc就會放過這些請求了。格式 mvc resources location css css mvc re...