石家网站建设公司排名,wordpress彩色,汽车之家网页版入口官网,wordpress添加搜索栏基于RabbitMQ的RPC通信 版本信息操作步骤搭建RabbitMQ(默认用户名:guest 密码:guest )服务端实现(srv.py)客户端实现(client.py)性能测试(4919 qps) 当需要调用局域网中的服务时,可以用frp进行穿透,也可以在公网搭建RabbitMQ服务器做消息中转,本文演示了这个步骤。
版本信息
… 基于RabbitMQ的RPC通信 版本信息操作步骤搭建RabbitMQ(默认用户名:guest 密码:guest )服务端实现(srv.py)客户端实现(client.py)性能测试(4919 qps) 当需要调用局域网中的服务时,可以用frp进行穿透,也可以在公网搭建RabbitMQ服务器做消息中转,本文演示了这个步骤。
版本信息
属性值RabbitMQ3.13.0pika1.3.1python3.6.8CPU2颗 Intel® Xeon® Gold 6248R CPU 3.00GHz
操作步骤
搭建RabbitMQ(默认用户名:guest 密码:guest )
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 \-p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management服务端实现(srv.py)
# -*- coding:utf-8 -*-
import pika
import time
import sys
import osdef request_handler(message):#contentmessage.decode(utf-8)#print(content)return messagedef on_request(ch, method, props, body):response request_handler(body)ch.basic_publish(exchange,routing_keyprops.reply_to,propertiespika.BasicProperties(content_encodingutf-8,correlation_idprops.correlation_id,),bodystr(response))ch.basic_ack(delivery_tagmethod.delivery_tag)while True:try:credentials pika.PlainCredentials(guest, guest)connection pika.BlockingConnection(pika.ConnectionParameters(127.0.0.1,port5672, credentialscredentials))channel connection.channel()channel.queue_declare(queuerpc_queue) channel.basic_consume(rpc_queue, on_request)print( waiting requests)channel.start_consuming()except:print(error restart)passtime.sleep(1)客户端实现(client.py)
# -*- coding:utf-8 -*-
import os
import io
import time
import uuid
import sys
import requests
import warnings
import numpy as np
import pika
import time
import sys
import traceback
import json
import queue
import uuid
import time
import argparseclass MqRpcClient(object):def __init__(self):credentials pika.PlainCredentials(guest, guest)self.connection pika.BlockingConnection(pika.ConnectionParameters(127.0.0.1,port5672, credentialscredentials))self.channel self.connection.channel()result self.channel.queue_declare(queue, exclusiveTrue)self.callback_queue result.method.queueself.channel.basic_consume(self.callback_queue, self.on_response, True)def on_response(self, ch, method, props, body):if self.corr_id props.correlation_id:self.response bodydef send(self, message,timeout5):self.response Noneself.corr_id str(uuid.uuid4())self.channel.basic_publish(exchange,routing_keyrpc_queue,propertiespika.BasicProperties(reply_toself.callback_queue,content_encodingutf-8,correlation_idself.corr_id,),bodymessage.encode(utf-8)) t0time.time()while self.response is None:self.connection.process_data_events()t1time.time()if t1-t0timeout:return Nonereturn self.responsedef send_message(message,loop):rpc MqRpcClient()t0time.time()for i in range(loop):response rpc.send(message,1)if response is None and responsemessage:print(Failed)breakt1time.time()print(qps:{:.2f}.format(loop/(t1-t0)))return Trueif __name__ __main__:parse argparse.ArgumentParser()parse.add_argument(--msg, typestr, default, help)parse.add_argument(--loop, typeint, default1, help)args parse.parse_args()send_message(args.msg,args.loop)性能测试(4919 qps)
# 安装依赖
pip3 install pika1.3.1# 启动服务端(服务端收到请求后,直接回复)
python3 srv.py # 客户端多路请求,测试总吞吐
cat EOF | tee rpc.sh
for i in \seq 0 \$1\
dopython3 client.py --msg HelloWorld --loop 1000
done
wait
EOF
bash rpc.sh 16 | awk -F: {SUM$2};END{print SUM}