RPC调用client端解析

  1. import pika
  2. import uuid
  3. # 建立连接
  4. class FibonacciRpcClient(object):
  5. def __init__(self):
  6. # 建立建立连接和通道
  7. self.connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))
  8. self.channel = self.connection.channel()
  9. # exclusive(专有的): Only allow access by the current connection
  10. result = self.channel.queue_declare(exclusive=True)
  11. # 获取队列名称
  12. self.callback_queue = result.method.queue
  13. # 接收服务端的回应
  14. # param on_response:The function for dispatching messages to user, having the signature:
  15. """
  16. Start a queue consumer.
  17. This method asks the server to start a "consumer",
  18. which is a transient request for messages from a specific queue.
  19. Consumers last as long as the channel they were declared on, or until the client cancels them.
  20. """
  21. self.channel.basic_consume(self.on_response, no_ack=True, queue=self.callback_queue)
  22. # 接收到返回消息的处理方法消息
  23. def on_response(self, ch, method, props, body):
  24. if self.corr_id == props.correlation_id:
  25. self.response = body
  26. def call(self, n):
  27. self.response = None
  28. self.corr_id = str(uuid.uuid4())
  29. """This method publishes a message to a specific exchange.
  30. The message will be routed to queues as defined by the exchange configuration
  31. and distributed to any active consumers when the transaction, if any, is committed."""
  32. self.channel.basic_publish(exchange="",
  33. routing_key="rpc_queue",
  34. properties=pika.BasicProperties(
  35. reply_to=self.callback_queue, correlation_id=self.corr_id),
  36. body=str(n)
  37. )
  38. # 确认是否有收到消息,没有的话阻塞在这里
  39. # Will make sure that data events are processed. Dispatches timer and
  40. # channel callbacks if not called from the scope of BlockingConnection or
  41. # BlockingChannel callback. Your app can block on this method.
  42. # while self.response is None: # 跟start_consuming相似
  43. # 是一个等待消息的阻塞过程,连接的任何消息都可以使它脱离阻塞状态(有点像Ajax的事件等待机制)
  44. while self.response is None:
  45. self.connection.process_data_events()
  46. return int(self.response)
  47. ssh_rpc = FibonacciRpcClient()
  48. response = ssh_rpc.call(30)
  49. # Processes(处理) I/O events and dispatches timers and `basic_consume`
  50. # callbacks until all consumers are cancelled."""
  51. # 循环接收我们的消息,接收之后并执行我们的callback函数
  52. channel.start_consuming()

Python自动化之rabbitmq rpc client端代码分析(原创)的更多相关文章

  1. 推荐一款最强Python自动化神器!不用写一行代码!

    搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: selenium.结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人 ...

  2. 推荐一款最强Python自动化神器!再也不用写代码了!

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: seleniu ...

  3. Appium+python自动化(三十)- 实现代码与数据分离 - 数据配置-yaml(超详解)

    简介 本篇文章主要介绍了python中yaml配置文件模块的使用让其完成数据和代码的分离,宏哥觉得挺不错的,于是就义无反顾地分享给大家,也给大家做个参考.一起跟随宏哥过来看看吧. 思考问题 前面我们配 ...

  4. tls 双向认证 client端代码例子

    example: python import httplib import json import ssl import urllib2 import requests CA_FILE = " ...

  5. Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)

    简介 江湖有言:”代码写死一时爽,框架重构火葬场“,更有人戏言:”代码动态一时爽,一直动态一直爽

  6. swoole 异步非堵塞 server/端 client/端 代码,已经测试完毕。贴代码

    服务器环境  centos7.0  swoole4.3 php7.2 pcre4.8  nginx1.8   php-fpm server.php <?php class Server { pr ...

  7. [深度学习]Python/Theano实现逻辑回归网络的代码分析

    2014-07-21 10:28:34 首先PO上主要Python代码(2.7), 这个代码在Deep Learning上可以找到. # allocate symbolic variables for ...

  8. 有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

    答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查

  9. Python实例---抽屉热搜榜前端代码分析

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 关于Unity动态物体无法向使用使用custom shader和lightmap的物体投射阴影

    最近在做unity shader forge和marmoset的优化,TA那边遇到了一个阴影显示的问题,具体如下:   在Forward Rendering状态下,静态场景使用了是shader for ...

  2. Python之路【第九篇】堡垒机基础&数据库操作

    复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...

  3. WindowsService 创建.安装.部署

    windows服务的用法很适合用于一些长期跑的项目..不需要人工操作..不需要服务器一直登陆..很方便.. 不说废话..直接开整.. 启动VS2012..创建Windows服务项目.. 确定..创建成 ...

  4. iwebshop二次开发

    1.iwebshop中写hello world ① 动作action方式 controllers目录下,然后创建text.php. <?php class Test extends IContr ...

  5. Owin是什么?

    OWIN的英文全称是Open Web Interface for .NET. 如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平台的开放Web接口. 那Web接口是谁和谁之间的接口呢?是 ...

  6. [工具]json转类

    摘要 这周在园子看到一篇介绍JsonCSharpClassGenerator这个工具的文章,感觉挺实用的,在现在项目中json用的是最多的,所以在转换对应的类的时候,确实挺频繁,所以就研究了一下这个工 ...

  7. Win8/Win10无法打开这个应用 内置管理员账户

    现在装win10系统的同伴越来越多了,相比于win7,win10在某些设置方面也有些变化,比如我们在使用win8或者win10时,会碰到如图所示的对话框: Windows10/Windows8无法使用 ...

  8. matlab 聚类

    目前已知matlab的聚类方法有三种: 一.利用 clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法: 二.层次聚类,该方法较为灵活,需要进行细节了 ...

  9. POJ 1019 Number Sequence

    找规律,先找属于第几个循环,再找属于第几个数的第几位...... Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submi ...

  10. Mac Pro 解压安装MySQL二进制分发版 mysql-5.6.30-osx10.11-x86_64.tar.gz(不是dmg的)

    没有mac的root密码,当前用户有sudo权限,所以想以root身份执行的命令都加了sudo. 是否存在 _mysql 用户和用户组,并查看用户 _mysql 是不是用户组 _mysql 的成员. ...