ZeroMQ介绍

ZeroMQ号称史上最快的消息队列,可是我学习了下,我心里更加觉得它就是一套通信机制,通过各种模型的组合以及它的快来实现各种牛逼的功能,其实学习下来,其中有几个模型和zookeeper很像。同样,和zookeeper学习一样,各个模型都举出例子来,用python来实现,重点就是在于理解各个模型的设计以及组合。

ZeroMQ Install

ZeroMQ的服务端需要安装下面的依赖

$ yum install zeromq zeromq-devel

pyzmq Install

安装Python ZeroMQ的库

$ pip install pyzmq

or

$ yum install python-zmq

REQ/REP模型

  • 传统的socket通信都是1:1(client:server)或者1:N(client:server)
  • ZeroMQ的REQUEST/RESPONSE模型可以实现(N:M)
    REQ/REP

client_zmq.py

客户端

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_zmq.py

服务端

import zmq  
import time  
  
context = zmq.Context()  
socket = context.socket(zmq.REP)  
socket.bind("tcp://*:5555")  
count = 0

while True:  
    #  Wait for next request from client  
    message = socket.recv()  
    count += 1
    print "Received request: ", message, count 
  
    #  Do some 'work'  
    time.sleep (1)        #   Do some 'work'  
  
    #  Send reply back to client  
    socket.send("World")  

运行测试

  • 可以先运行客户端,发现客户端不会报错,再运行服务端之后,开始正常工作。再zeromq客户端调用connect的时候,并没有和实际和server建立连接,而只是再zeromq建立了一个"虚连接",zeromq会维护着这个连接。这点在分布式系统里面解决了各个角色启动的先后顺序。
  • 可以运行多个Client端,形成N:1(client:server)模式
  • 如果运行过程中server端断了,server端再起来之后就无法提供服务了,原先运行的client们必须重新run进行连接。

标签:none

评论已关闭