摘要:的明確目標(biāo)是成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入內(nèi)核。實(shí)現(xiàn)端測(cè)試消息已發(fā)送端正在轉(zhuǎn)發(fā)端輸出結(jié)果已發(fā)送已發(fā)送已發(fā)送正在轉(zhuǎn)發(fā)正在轉(zhuǎn)發(fā)正在轉(zhuǎn)發(fā)測(cè)試消息測(cè)試消息測(cè)試消息
簡(jiǎn)介
ZMQ (以下 ZeroMQ 簡(jiǎn)稱 ZMQ)是一個(gè)簡(jiǎn)單好用的傳輸層,像框架一樣的一個(gè) socket library,他使得 Socket 編程更加簡(jiǎn)單、簡(jiǎn)潔和性能更高。是一個(gè)消息處理隊(duì)列庫(kù),可在多個(gè)線程、內(nèi)核和主機(jī)盒之間彈性伸縮。ZMQ 的明確目標(biāo)是“成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入 Linux 內(nèi)核”?,F(xiàn)在還未看到它們的成功。但是,它無(wú)疑是極具前景的、并且是人們更加需要的“傳統(tǒng)”BSD 套接字之上的一層封裝。ZMQ 讓編寫高性能網(wǎng)絡(luò)應(yīng)用程序極為簡(jiǎn)單和有趣。
zeromq 并不是類似rabbitmq消息列隊(duì),它實(shí)際上只一個(gè)消息列隊(duì)組件,一個(gè)庫(kù)。
zeromq的幾種模式 Request-Reply模式:客戶端在請(qǐng)求后,服務(wù)端必須回響應(yīng)
Python實(shí)現(xiàn):
server端:
# -*- coding=utf-8 -*- import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: message = socket.recv() print("Received: %s" % message) socket.send("I am OK!")
client端:
# -*- coding=utf-8 -*- import zmq import sys context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") socket.send("Are you OK?") response = socket.recv(); print("response: %s" % response)
輸出:
$ python app/server.py Received: Are you OK? $ python app/client1.py response: I am OK!Publish-Subscribe模式:
廣播所有client,沒(méi)有隊(duì)列緩存,斷開(kāi)連接數(shù)據(jù)將永遠(yuǎn)丟失。client可以進(jìn)行數(shù)據(jù)過(guò)濾。
Python實(shí)現(xiàn)
server端:
# -*- coding=utf-8 -*- import zmq import time context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: print("發(fā)送消息") socket.send("消息群發(fā)") time.sleep(1)
client端1:
# -*- coding=utf-8 -*- import zmq import sys context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") socket.setsockopt(zmq.SUBSCRIBE,"") # 消息過(guò)濾 while True: response = socket.recv(); print("response: %s" % response)
client端2:
# -*- coding=utf-8 -*- import zmq import sys context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") socket.setsockopt(zmq.SUBSCRIBE,"") while True: response = socket.recv(); print("response: %s" % response)
輸出:
$ python app/server.py 發(fā)送消息 發(fā)送消息 發(fā)送消息 $ python app/client2.py response: 消息群發(fā) response: 消息群發(fā) response: 消息群發(fā) $ python app/client1.py response: 消息群發(fā) response: 消息群發(fā) response: 消息群發(fā)Parallel Pipeline模式:
由三部分組成,push進(jìn)行數(shù)據(jù)推送,work進(jìn)行數(shù)據(jù)緩存,pull進(jìn)行數(shù)據(jù)競(jìng)爭(zhēng)獲取處理。區(qū)別于Publish-Subscribe存在一個(gè)數(shù)據(jù)緩存和處理負(fù)載。
當(dāng)連接被斷開(kāi),數(shù)據(jù)不會(huì)丟失,重連后數(shù)據(jù)繼續(xù)發(fā)送到對(duì)端。
Python實(shí)現(xiàn)
server端:
# -*- coding=utf-8 -*- import zmq import time context = zmq.Context() socket = context.socket(zmq.PUSH) socket.bind("tcp://*:5557") while True: socket.send("測(cè)試消息") print "已發(fā)送" time.sleep(1)
work端:
# -*- coding=utf-8 -*- import zmq context = zmq.Context() recive = context.socket(zmq.PULL) recive.connect("tcp://127.0.0.1:5557") sender = context.socket(zmq.PUSH) sender.connect("tcp://127.0.0.1:5558") while True: data = recive.recv() print "正在轉(zhuǎn)發(fā)..." sender.send(data)
client端:
# -*- coding=utf-8 -*- import zmq import sys context = zmq.Context() socket = context.socket(zmq.PULL) socket.bind("tcp://*:5558") while True: response = socket.recv(); print("response: %s" % response)
輸出結(jié)果:
$ python app/server.py 已發(fā)送 已發(fā)送 已發(fā)送 $ python app/work.py 正在轉(zhuǎn)發(fā)... 正在轉(zhuǎn)發(fā)... 正在轉(zhuǎn)發(fā)... $ python app/client1.py response: 測(cè)試消息 response: 測(cè)試消息 response: 測(cè)試消息
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44472.html
摘要:關(guān)閉套接字和上下文備注說(shuō)明如何利用使用首先下載所需的包,解壓以后將和文件放到自己電腦中的安裝路徑中的文件夾下,最后需要將之前解壓后的包放在項(xiàng)目的中或者資源下載鏈接密碼項(xiàng)目源碼下載鏈接鏈接密碼 在講ZeroMQ前先給大家講一下什么是消息隊(duì)列。 消息隊(duì)列簡(jiǎn)介: 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問(wèn)題。實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。是...
摘要:輸出結(jié)果輸出結(jié)果此外還有兩種實(shí)現(xiàn)單例的方式,我呢也給大家列出來(lái),方便大家學(xué)習(xí)和參考方式一方式二單例模式實(shí)現(xiàn)方式二。。。 什么是單例模式?通俗點(diǎn)講:?jiǎn)卫J骄褪窃诔绦驁?zhí)行的過(guò)程中,類只有一個(gè)實(shí)例,這不是說(shuō)單例模式只能去創(chuàng)建一個(gè)實(shí)例,而是你創(chuàng)建的所有實(shí)例(也就是對(duì)象)都指的是同一個(gè)實(shí)例。如何做到這一點(diǎn)呢?我們的__new__特殊方法就派上用場(chǎng)了,可能大家對(duì)這個(gè)方法熟悉又陌生,那么接下來(lái)通過(guò)...
摘要:我推薦你使用進(jìn)行日志收集,將作為的出口。集群目前暫時(shí)沒(méi)有提供日志查看機(jī)制。以如下的形式啟動(dòng)容器,容器日志將發(fā)往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產(chǎn)品做了比較。最后介紹了好雨云幫如何對(duì)k8s進(jìn)行改造并使用ZeroMQ以消息的形式將日志傳輸?shù)浇y(tǒng)一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
摘要:我推薦你使用進(jìn)行日志收集,將作為的出口。集群目前暫時(shí)沒(méi)有提供日志查看機(jī)制。以如下的形式啟動(dòng)容器,容器日志將發(fā)往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產(chǎn)品做了比較。最后介紹了好雨云幫如何對(duì)k8s進(jìn)行改造并使用ZeroMQ以消息的形式將日志傳輸?shù)浇y(tǒng)一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
閱讀 3081·2021-11-24 11:14
閱讀 3525·2021-11-22 15:22
閱讀 3215·2021-09-27 13:36
閱讀 725·2021-08-31 14:29
閱讀 1335·2019-08-30 15:55
閱讀 1768·2019-08-29 17:29
閱讀 1153·2019-08-29 16:24
閱讀 2417·2019-08-26 13:48