/\\\
\/\\\
\/\\\ /\\\\\\\\\ /\\\ /\\\
/\\\\\\\\\\\ \/\\\ /\\\ /\\\ /\\\\\\\\\\ /\\\/////\\\ \//\\\/\\\
\///////\\\/ \/\\\\\\\\\ \/\\\ \/\\\ \/\\\////// \/\\\\\\\\\\ \//\\\\\
/\\\/ \/\\\////\\\ \/\\\ \/\\\ \/\\\\\\\\\\ \/\\\////// \//\\\
/\\\/ \/\\\ \/\\\ \/\\\ \/\\\ \////////\\\ \/\\\ /\\ /\\\
/\\\\\\\\\\\ \/\\\\\\\\\ \//\\\\\\\\\ /\\\\\\\\\\ /\\\ \/\\\ \//\\\\/
\/////////// \///////// \///////// \////////// \/// \/// \////
zbus strives to make Message Queue and Remote Procedure Call fast, light-weighted and easy to build your own service-oriented architecture for many different platforms. Simply put, zbus = mq + rpc.
zbus carefully designed on its protocol and components to embrace KISS(Keep It Simple and Stupid) principle, but in all it delivers power and elasticity.
Start zbus, please refer to https://gitee.com/rushmore/zbus
pip install zbuspy
Only demos the gist of API, more configurable usage calls for your further interest.
from zbus import MqClient, Message
def onopen(client):
msg = Message()
msg.headers.cmd = 'pub'
msg.headers.mq = 'MyMQ'
msg.body = 'hello from python'
client.invoke(msg, lambda res: print(res) )
client = MqClient('localhost:15555')
client.onopen = onopen
client.connect()
from zbus import MqClient, Message
mq = 'MyMQ'
channel = 'MyChannel'
def create_mq(client):
msg = Message()
msg.headers.cmd = 'create'
msg.headers.mq = mq
msg.headers.channel = channel
client.invoke(msg, lambda res: print(res)) #lambda
def onopen(client):
create_mq(client)
msg = Message()
msg.headers.cmd = 'sub' #sub on channel of mq
msg.headers.mq = mq
msg.headers.channel = channel
def cb(res):
print(res)
client.invoke(msg, cb)
def message_handler(msg):
print(msg)
client = MqClient('localhost:15555')
client.onopen = onopen
client.add_mq_handler(mq, channel, message_handler)
client.connect()
from zbus import RpcClient
rpc = RpcClient('localhost:15555', mq='MyRpc')
res = rpc.example.plus(1,2)
print(res)
rpc.close()
from zbus import RpcServer, Message, RequestMapping
class MyService:
def echo(self, ping):
return str(ping)
def getString(self, s):
return str(s)
def plus(self, a, b):
return int(a) + int(b)
def testEncoding(self, msg): #msg -- request message
print(msg)
return u'中文'
def noReturn(self):
pass
def home(self):
res = Message()
res.status = 200
res.headers['content-type'] = 'text/html; charset=utf8'
res.body = '<h1> from Python </h1>'
return res
def getBin(self):
b = bytearray(10)
import base64
return base64.b64encode(b).decode('utf8')
def throwException(self):
raise Exception("runtime exception from server")
@RequestMapping(path='/m', method='POST') #change path
def map(self):
return {
'key1': 'mykey',
'key2': 'value2',
'key3': 2.5
}
def testTimeout(self):
import time
time.sleep(20)
'''
Wait message from zbus(MQ), mount rpc handlers
'''
p = RpcProcessor()
p.mount('/', MyService()) #relative mount url
server = RpcServer(p)
#When auth required
#server.enable_auth('2ba912a8-4a8d-49d2-1a22-198fd285cb06', '461277322-943d-4b2f-b9b6-3f860d746ffd') #apiKey + secretKey
server.mq_server_address = 'localhost:15555'
#server.mq_server_address = '111.230.136.74:15555'
server.mq = '/' #mount to the root url of zbus server
server.mq_mask = Protocol.MASK_DELETE_ON_EXIT#delete on exit
server.start()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
Activity
Community
Health
Trend
Influence
:Code submit frequency
:React/respond to issue & PR etc.
:Well-balanced team members and collaboration
:Recent popularity of project
:Star counts, download counts etc.