Python的RabbitMQ连接器库,与Tornado框架完全集成

tornado-bunn的Python项目详细描述


badgePyPI version fury.ioPyPI download monthPyPI pyversionsAsk Me Anything !

龙卷风兔子

Tornado Framework完全集成的Python的RabbitMQ连接器库。在

简介

Tornado Bunny在这里简化使用RabbitMQ的工作,同时使用Tornado框架。 此库提供与tornado.ioloop完全集成的RabbitMQ连接器的异步实现。 Tornado Bunny连接器是一体式连接器,支持多种功能:

  1. 发布-发布消息。在
  2. 接收-使用队列中的消息。若接收到的属性不是none,则它将结果发布回“reply_to”队列。在
  3. rpc-将带有replay_的消息发布到属性(correlation_id和队列名称),等待应答消息并返回值。在

安装

pip install -U tornado_bunny

示例

简单接收器(从队列打印消息)

^{pr2}$

使用RPC模式的完整微服务

在实现RabbitMQ Remote procedure call (RPC)模式时,实现一个完全可伸缩的应用程序的2个微服务实例可以在examples目录中找到。在

建筑

  1. AsyncConnection- 处理与RabbitMQ服务器的单个连接的类。类构造函数获取一个名为“io_nuloop”的参数,假设创建连接的用户希望自己提供io\u循环。此类同时支持Tornado ioloop和asyncio ioloop。这个类的主要函数是get_connection(),它开始一系列异步调用,直到使用pika包接收到连接对象为止。在
  2. ChannelConfiguration- 在RabbitMQ连接中处理单个通道的类。此类封装了一个AsyncConnection对象,并提供了发布和使用功能。此类获取一个连接(上一段中的异步连接)、一个交换、一个用于将消息发布到的路由键和一个要使用的队列。在
  3. TornadoBunny- 这个类实际上完成了RPC所需的(所有)魔术,它使用了我们到目前为止构建的类以及其他一些小技巧。 封装两个异步通道(每个通道分别有两个连接)的类。第一个通道用于发布消息,而另一个通道用于消费消息。 该类还有两个字典,用于存储与RPC相关的交换和相关id的状态。 receive()函数负责消费消息。如果所使用消息的接收属性不是none,则它将结果发布回reply_to队列。 函数的作用是:将消息发布到给定的交换。 rpc()函数是实现rpc逻辑的函数。首先,它使用接收队列,然后生成一个唯一的uuid,它将用作相关id,因此它作为键存储在字典中,在字典中关联id和调用方之间进行链接。然后,关联id与应答队列一起附加到一个messageproperties对象,该对象附加到消息上,然后将最终发送该对象。在这一阶段,我们将产生一个只有当我们得到响应时才会调用的_wait_result()函数。在

托多

  • 实施普罗米修斯度量支持。在
  • 允许传递现有通道。在
  • 支持asyncio ioloop。在
  • 服务器示例-重构它以呈现真正的HTML
  • 编写测试。在

注释

这个包的灵感来自于我多年来遇到的各种实现,特别是在Python2.7版本上。 当前版本包括改进和调整,使其能够与开发此包时最新的框架集成:

  • Python 3.8
  • 鼠兔1.1.0
  • 龙卷风6.0.4
  • Ubuntu 18上的RabbitMQ服务器3.8.3

在======= 历史

0.1.0(2020年4月11日)

  • PyPI的第一个版本。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
orm如何在Java中实现规范化映射?   java以编程方式修改Xtext生成的Mwe2工作流   java正在覆盖外部文件中的现有数据,如何停止?   java在ANTLR BNF语法符号中epsilon的等价物是什么?   java如何使用Hibernate@Anyrelated注释?   代码生成生成java类并在运行时加载它   java Maven无法在本地jar文件中收集依赖项   java NetBeans IDE 8.2不显示错误消息   java Selenium web驱动程序找不到元素   java如何修复“拒绝访问属性”invoke“”的权限?   JavaApacheJClouds,从比日期更早的blob中删除blob的最佳方法   java如何比较和排序树集中的项目?   使用JavaSpring和无头/解耦CMS   java使用swagercodegen在不同的类中生成端点   Java外部Keylistener没有响应