跳转到主要内容

Plone (和Zope2)的异步AMQP集成

项目描述

https://travis-ci.org/collective/collective.zamqp.png

AMQP集成用于Zope2 (和Plone)

collective.zamqp通过利用Zope的asyncore主循环(使用支持asyncore的AMQP库pika),并注入消耗的消息作为要由ZPublisher处理的请求,充当一个Zope服务器(类似于Zope ClockServer)。

因此,AMQP消息默认情况下在类似常规HTTP请求的环境中处理:ZCA钩子、事件以及所有其他行为正常。

此包是对affinitic.zamqp的几乎完全重写,但保留了仅通过配置生产者和消费者来设置AMQP消息的想法。

待办事项
  • 重写文档以反映新的设计

  • 更新affinitic.zamqp的新设计测试

虽然我们仍在记录和测试collective.zamqp,但您可能想看看collective.zamqpdemo,以了解如何使用示例。

安装

一个常见的设置包括一个生产者和一个工作实例,它们都连接到同一个rabbitmq服务器。

Buildout

两个实例都可以轻松地使用buildout进行配置

[buildout]
parts =
    instance
    worker

...

[instance]
recipe = plone.recipe.zope2instance
http-address = 8080
eggs =
    ...
    collective.zamqp

...
zope-conf-additional =
    %import collective.zamqp
    <amqp-broker-connection>
        connection_id   superuser
        hostname        my.rabbithostname.com
        port            5672
        username        guest
        password        guest
        heartbeat       120
        keepalive       60
    </amqp-broker-connection>

[worker]
<= instance
http-address = 8081
zserver-threads = 1
environment-vars =
    ZAMQP_LOGLEVEL INFO
zope-conf-additional =
    ${instance:zope-conf-additional}
    <amqp-consuming-server>
        connection_id   superuser
        site_id         Plone
        user_id         admin
    </amqp-consuming-server>

配置参数说明

  • amqp-broker-connection

    connection_id

    连接ID,它是创建的全局BrokerConnection实用程序的注册名称。

    hostname (可选)

    RabbitMQ服务器的主机名或IP地址,默认为localhost

    port (可选)

    连接到RabbitMQ服务器的TCP端口,默认为 5672

    virtual_host (可选)

    要使用的RabbitMQ虚拟主机,默认为 /

    username (可选)

    RabbitMQ连接的纯文本用户名,默认为 guest

    password (可选)

    RabbitMQ连接的纯文本密码,默认为 guest

    heartbeat (可选)

    AMQP心跳间隔(秒),默认为 0 禁用心跳。

    keepalive (可选)

    使用给定的整数超时时间(秒)注册生产者、消费者、视图和时钟服务器以保持连接活跃。默认 0

    prefetch_count (可选)

    AMQP通道预取计数限制,默认为 0 无限制。

  • amqp-consuming-server

    connection_id

    提供配置好的IBrokerConnection的全局实用程序名称。消费服务器将只为它的连接ID注册的消费者提供服务。

    scheme (可选)

    使用VirtualHostMonster配置URL方案进行虚拟重写,默认为 http。如果没有提供主机名,将忽略。

    hostname (可选)

    传递给伪造请求的主机名。在消费服务器中调用 object.absolute_url() 时,您将收到此主机名。URL将使用以下方案通过VirtualHostMonster进行重写

    /VirtualHostBase/{scheme}/{hostname}:{port}/{site_id}/VirtualHostRoot/...

    如果配置了主机名,则VirtualHostMonster将被调用,否则使用 socket.gethostname()

    port (可选)

    使用VirtualHostMonster配置虚拟重写的端口,默认为 80。如果没有提供主机名,将忽略。

    use_vhm (可选)

    当设置主机名时,创建VirtualHostMonster包装的方法调用。VHM用于告知门户配置的实际公共主机名,并从路径中隐藏门户的ID。默认为 开启

    vhm_method_prefix (可选)

    明确设置基于AMQP请求的VHM方法前缀。最典型的选项可能如下所示

    • /VirtualHostBase/https/example.com:443/Plone

    • /VirtualHostBase/https/example.com:443/Plone/VirtualHostRoot

    • /VirtualHostBase/https/example.com:443/Plone/VirtualHostRoot/_vh_subsite

    注意:这通过设置方案、主机名、端口和use_vhm覆盖了默认的隐式VHM支持,但仍需要启用use_vhm才能生效。空值回退到旧默认的use_vhm行为。

    site_id

    消费AMQP消息时应使用的站点的ID,这是消费服务器消费者的上下文。如果提供了主机名,这将被用于VirtualHostMonster重写。

    user_id (可选)

    Plone用户的可选用户ID,其权限用于消费消息。默认情况下,消息以匿名用户调用受信任的文件系统代码的方式消费。

配置日志记录

您可能想要增加/减少 collective.zamqp 日志级别,这可以通过在worker实例中传递环境变量轻松完成,如上面buildout示例所示

[worker]
...
environment-vars =
    ZAMQP_LOGLEVEL INFO
...

有效的参数是

  • DEBUG

  • INFO

变更日志

0.16.2 (2018-02-27)

  • 修复由于路由配置错误导致连接延迟未增加的问题,从而在配置交换、队列或绑定时断开连接 [datakurre]

  • 修复由于自动重连导致额外连接被建立的问题,有时会导致消费消息的错误交付标签,导致在确认这些消息时出现预条件失败错误 [datakurre]

0.16.1 (2017-11-29)

  • 修复由于Pika 0.9.5中的错误导致阻塞连接无法正确关闭通道和连接的问题 [datakurre]

0.16.0 (2016-06-08)

  • 修复msgpack序列化器以默认使用‘utf-8’编码进行编码和解码 [Asko Soukka]

0.15.1 (2016-01-28)

  • 修复要求collective.monkeypatcher >= 1.1.1 [datakurre]

0.15.0 (2016-01-27)

  • 注意:此版本将生产者和消息更改为使用事务的 join 而不是已弃用的 register 来加入当前事务。到目前为止,此更改似乎完全向后兼容。

  • 添加最小化savepoint支持(NoRollbackSavepoint)[datakurre]

  • 修复使用join而不是register加入事务以支持savepoints的问题[datakurre]

  • 修复了pika在0.9.5版本中因为缺少日志导入而导致的阻塞连接引发错误的问题[datakurre]

  • 修复与ZAMQP测试相关的问题,其中ZAMQP测试固定程序留下了悬空注册,这会减慢测试速度并产生副作用[datakurre]

0.14.3 (2014-10-23)

  • 记录连接和频道创建等操作[sunew]

0.14.2 (2014-10-23)

  • 在导入时间点,ZAMQP_LOGLEVEL环境变量尚不可访问。将Logger移动到utils模块以延迟导入[sunew]

0.14.1 (2014-10-10)

  • 修复了日志拒绝没有得到足够参数的问题[datakurre]

0.14.0 (2014-09-18)

  • 修复了AMQP请求中没有正确设置语言的问题[datakurre]

  • 移除对z3c.unconfigure 1.0.1的硬依赖[saily]

0.13.2 (2013-11-08)

  • 从测试固定程序中移除重复的默认生产者[datakurre]

0.13.1 (2013-11-08)

  • 修复打包问题。

0.13.0 (2013-11-08)

  • 添加vhm_method_prefix选项以替换旧的vhm选项[datakurre]

0.12.0 (2013-08-08)

  • 修复在重新连接期间在内存中基于消息的delivery_mode属性而不是生产者的durable属性存储可持久发布的消息的问题[datakurre]

  • 合并记录器并减少记录量[saily, datakurre]

0.11.0 (2013-06-05)

  • 为ZAMQP测试层设置use_vhm=False[saily]

  • 添加选项use_vhm以使VHM方法可选(允许在开发中使用hostname=localhost:8080/Plone)[datakurre]

  • 为消费者中的伪请求对象添加可配置的方案、主机名和端口关键字,我们将自动使用VirtualHostMonster重写这些URL。[datakurre, saily]

  • 减少记录量,修复#2。[saily]

  • 更新文档[saily]

  • 为连接添加prefetch_count选项[datakurre]

  • 添加带有RabbitMQ跟踪firehose消费者测试固定程序以简化调试[datakurre]

  • 修复在提交期间引发ConflictError子类(例如ReadConflictError)时也重新队列消息的问题[datakurre]

0.10.2 (2013-03-14)

  • 修复在每次asyncore轮询中处理Pika超时以解决心跳问题。

0.10.1 (2013-03-13)

  • 添加配置选项exchange_auto_declare和queue_auto_declare

  • 将queue_exclusive = True修复为隐式也设置queue_durable = False和queue_auto_delete = True

0.10.0 (2013-03-12)

  • 将keepalive-ping-queue更新为使用1小时的消息TTL

  • 添加选项(默认为true)以对Zope2 lifetime_loop进行猴子补丁,以缩短消费实例的asyncore.poll-timeouts。

0.9.8 (2013-03-09)

  • 修复回归:允许使用空路由键绑定队列

0.9.7 (2013-03-05)

  • 修复在冲突错误时不要尝试重新队列自动确认的消息,因为这不可能

  • 修复消费者配置以支持路由键列表(以简化类似于metronome的交换的使用)

0.9.6 (2013-02-21)

  • 修复Rabbit-fixture,当在teardown之前Rabbit已死亡时保持安静

0.9.5 (2013-02-20)

  • 修复在默认测试层中包含方便的默认生产者

0.9.4 (2012-11-27)

  • 修复在ZAMQP层中注册连接和消费服务器中的错误。

  • 添加‘text/csv’序列化器(用于将字典的可迭代容器序列化为RFC4180 CSV数据,并将此类消息反序列化为字典元组)

0.9.3 (2012-11-27)

  • 增强‘runAsyncTest’以接受‘loop_timeout’和‘loop_count’参数。

  • 修复可选的json序列化器以首先尝试导入‘json’,然后才是‘simplejson’。

0.9.2 (2012-09-18)

  • 固定z3c.unconfigure==1.0.1。

  • 添加用于与ZSERVER-fixtures一起使用的测试固定程序以支持Selenium测试。

  • 修复消费服务器以默认为‘匿名用户’而不是None。

  • 添加runAsyncTest助手以运行依赖于asyncore循环的测试,并添加ZAMQP层的消费服务器。

0.9.1 (2012-09-18)

  • 修复了在给定correlation_id为None时不要为消息设置correlation_id属性的问题。

0.9.0 (2012-09-17)

  • 为VTM._register添加别名‘Producer.register’。

  • 将‘connected’属性重命名为‘is_connect’。

0.8.1 (2012-09-06)

  • 修复队列长度助手,使其正确使用BlockingChannel助手。

0.8.0 (2012-09-06)

  • 修复没有标记接口的消费者不会开始消费的问题。

  • 通过‘zamqp-consumer’视图增强了undolog事务。

  • 修复了消费视图,以将用户配置为当前消费服务的用户注解到事务中。

  • 为交换和队列添加了单独的auto_delete设置。之前auto_delete被设置为持久性的否定,这仍然是默认值。

  • 将连接配置添加到默认配置中,具有隐式默认生产者注册(即与连接具有相同名称/ID的生产者,但没有任何特殊路由)。

  • 添加了对自定义‘x-cookie-auth’头部的支持。其值将设置为AMQP请求中‘__ac’cookie的值,以允许PAS身份验证登录用户(例如,支持认证的异步任务)。

  • 为消费者和生成器添加了__len__,以使用阻塞通道获取队列长度(如果定义了相关的队列)。

  • 添加了BlockingChannel包装器,用于与with语句一起使用,以创建用于快速原始AMQP操作的单独阻塞连接。

  • 修复了从不声明以‘amq.’开头的队列的问题,这是RabbitMQ中保留的前缀。允许空队列名称以支持自动(代理生成的)队列名称。

  • 修复了从不声明RabbitMQ默认交换的问题(任何以‘amq.’开头的交换都将被跳过)。

  • 添加了json-serializer(当可以导入json或simplejson时)。

0.7.18 (2012-08-10)

  • 错误修复。[malthe]

  • 为RabbitMQ + Zope添加了plone.testing层。添加了一个层的虚拟测试。在测试构建中启用了RabbitMQ部分。

  • 修复了消费者和生成器,以默认使用默认交换,以允许最简单的配置仅使用默认交换。

0.7.17 (2012-05-21)

  • 向消息添加了事务感知的拒绝。

  • 为消费者名称添加了site_id替换支持,以便查找特定于消费服务和站点的消费者。

  • 修复了如果连接未定义则不会崩溃的问题。只是警告。

  • 修复了grok.name-magic,使其在消费者(名称作为队列)中与生产者(名称作为路由键)更相似。

  • 重构ping以使用简单的动态属性进行路由键和队列。

  • 重构生产者、消费者和连接初始化,以允许使用简单动态属性进行配置。

  • 重构生产者、消费者和连接初始化,以允许使用简单动态属性进行配置。

  • 从keepalive的ping队列中删除了“魔法”的构建名称。

  • 在依赖它之前,删除了“魔法”代理消息体的属性。

0.7.16 (2012-05-04)

  • 强制correlation_id为str。

  • 将默认序列化器从‘text/plain’更改为‘pickle’。

  • 修复了在Plone 4.0.x上工作的添加的依赖关系。

0.7.14 (2012-05-02)

  • 修复了在成功处理的事务被中止时重新排队消息的问题(例如,由于ZODB冲突错误)。

0.7.12 (2012-04-25)

  • 添加了对sauna.reload的支持。

0.7.11 (2012-04-18)

  • 将ping更改为在调试级别而不是信息级别记录。

0.7.10 (2012-04-18)

  • 修复了Pika适配器以处理超时,以支持AMQP心跳。

0.7.9 (2012-04-16)

  • 修改了keepalive设置,以接受整数而不是布尔值,以允许详细配置keepalive-ping-interval。

0.7.8 (2012-04-16)

  • 修复了消息反序列化时隐藏反序列化体的问题。

0.7.7 (2012-04-04)

  • 修复了在threadlocals中找不到属性的问题。

0.7.5 (2012-02-26)

  • 对更友好地使用sauna.reload进行了小的修复。

0.7.4 (2012-03-12)

  • 简化Ping消费者,以确认消息并在异步循环中直接记录ping,而不是创建伪HTTP请求。

0.7.3 (2012-03-09)

  • 添加了一个辅助函数collective.zamqp.utils.getBuildoutName,用于在配置可重用包中使用依赖于buildout的AMQP队列(例如,用于回复)。

0.7.2 (2012-03-08)

  • 在zope.conf中为AMQP代理连接配置添加了keepalive选项,以自动注册所有需要的工具、视图和时钟服务器,以使用定期ping消息保持连接。

0.7.1 (2012-03-06)

  • 允许在zope.conf中定义新的命名AMQP代理连接(或在实例构建脚本中的‘zope-conf-additional’)。

0.7.0 (2012-02-05)

  • 内部开发版本。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码发行版

collective.zamqp-0.16.2.tar.gz (64.2 kB 查看哈希值)

上传时间 源代码

构建发行版

collective.zamqp-0.16.2-py2-none-any.whl (73.4 kB 查看哈希值)

上传时间 Python 2

支持者