zato使用记录
1. docker安装
docker pull registry.gitlab.com/zatosource/docker-registry/quickstart:3.2
官网:https://zato.io/
docker run --pull=always -it --rm -p 22022:22 -p 8183:8183 -p 11223:11223 --name zato registry.gitlab.com/zatosource/docker-registry/quickstart:3.2
2. 登录zato
2.1 启动容器后,进入容器取密码
登录地址:http://localhost:8183/
2.2 安装rabbitmq
docker pull rabbitmq:management
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
登录地址:http://127.0.0.1:15672/ guest guest
设置权限:
2.3 zato创建connection连接rabbitmq
按上一步rabbitmq的配置设置connection:
修改密码:guest
创建一个outgoing测试rabbitmq是否连接成功
证明连接成功
2.4 实例
外部发起一个http请求,zato处理请求(channel)并转发到rabbitmq(outgoing),zato接收rabbitmq的数据(channel)并转发到第三方系统(outgoing)
2.4.1 上传py文件变成服务
lezyo.py
from zato.server.service import Service
import json
class OeNotice(Service):
def handle(self):
self.logger.info('Request: {}'.format(self.request.payload))
self.logger.info('Request type: {}'.format(type(self.request.payload)))
msg=json.dumps(self.request.payload)
conn_name='MyAMQPConnection-outgoing'
exchange_name=''
routing_key='hello'
#properties={'app_id':''}
self.outgoing.amqp.send(msg,conn_name,exchange_name,routing_key)
self.logger.info('Routgoing.amqp.send---------------')
self.response.payload={'result':'ok'}
mqchannel.py
from zato.server.service import Service
import json
class MessageQueueTOMgt(Service):
def handle(self):
self.logger.info('enter MessageQueueTOMgt')
self.logger.info('Request: {}'.format(self.request.payload))
self.logger.info('Request type: {}'.format(type(self.request.payload)))
test=self.outgoing.rest.get('HotelNotify')
response=test.conn.send(self.cid,json.dumps(self.request.payload))
self.logger.info('Response: {}'.format(response.text))
self.logger.info('Response type: {}'.format(type(response.text)))
将这两个py文件上传到zato变成服务:
2.4.2 添加channel-rest
2.4.3 添加outgoing-amqp
2.4.4 添加outgoing-rest
2.4.5 添加channel-amqp
2.4.6 测试
用flask写了一个接口后台:
import flask, json
from flask import request
from flask import Response
import os
import sys
import uuid
from urllib import parse
import hashlib
import time
'''
flask: web框架,通过flask提供的装饰器@server.route()将普通函数转换为服务
'''
# 创建一个服务,把当前这个python文件当做一个服务
count={} #定义全局变量
server = flask.Flask(__name__)
# server.config['JSON_AS_ASCII'] = False
# @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
##zato接口
@server.route('/testZato', methods=['POST'])
def testZato():
#json
print('enter testzato')
#print(request.values)
data=request.get_data()
print(json.loads(data.decode("utf-8")))
res={"respCode":"200","respMsg":"testzato-----"}
return json.dumps(res, ensure_ascii=False)
if __name__ == '__main__':
server.run(debug=False, port=9200, host='10.105.7.114')# 指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问
先运行起来:
postman发送请求: