This document is for Kombu's development version, which can be significantly different from previous releases. Get the stable docs here: 5.0.
更改历史记录¶
5.3.2¶
- 发布日期:
2023年8月31日
- 发布依据:
托默·诺斯拉蒂
恢复了#1629中引入的有害约束,最大重试次数(#1755)
文档修复(#1755的热修复)(#1758)
Python3.12:修复kombu/utils/objects.py中的导入(#1756)
[fix #1726] 对SQS异步请求使用boto3(#1759)
文档:删除SimpleQueue导入(#1764)
修复了提交前问题(#1773)
Azure服务总线:添加托管标识支持(#1641)
FIX:在轮询中关闭连接时防止Redis任务丢失(#1733)
Kombu和西芹配SQS#222(#1779)
语法更正(#1780)
5.3.1¶
- 发布日期:
2023年6月15日
- 发布依据:
阿西夫·赛义夫·乌丁
更新pycurl版本。
宣布支持python3.11(#1425)。
FIX:允许反序列化任何版本的UUID。
在SQS中更新PyCurl版本(#1747)。
5.3.0¶
- 发布日期:
2023年6月3日
- 发布依据:
阿西夫·赛义夫·乌丁
支持卡夫卡作为交通工具。
将扇出添加到文件系统(#1499)。
增加了在JSON中序列化和反序列化二进制消息的可能性(#1516)。
支持pymongo 4.x(#1536)。
支持redis-py 4.5.x。
将Azure存储队列传输升级到版本12(#1539)。
增加对SQS DelaySecond(#1567)的支持。
将监视添加到添加了前缀的复杂命令。
避免在序列化/反序列化时丢失UUID类型(#1575)。
将hlen添加到前缀的redis命令列表(#1540)。
将托管身份支持添加到Azure存储队列(#1631)。
添加了对SqlalChemy v2.0的支持。
不推荐使用pytz并使用zoneinfo(#1680)
5.3.0rc2¶
- 发布日期:
2023年5月31日
- 发布依据:
阿西夫·赛义夫·乌丁
添加缺少的zoneInfo依赖项(#1732)。
支持Redis>=4.5.2
放宽botocore公司的urlib3版本范围
5.3.0rc1¶
- 发布日期:
2023年5月24日
- 发布依据:
阿西夫·赛义夫·乌丁
移动到最热的冷冻室(#1683)。
不建议使用pytz并使用zoneinfo(#1680)。
当消息不是时,处理azuReserve vicebus传输中的键错误
并执行BASIC_ACK(#1691)。-修复MongoDB传输过时调用(#1694)。-SQS:使用缓存的队列url避免GetQueueURL调用过多(#1621)。-更新confluentkafka.txt版本(#1727)。-现在恢复到pyro4。
5.3.0b3¶
- 发布日期:
2023年3月20日
- 发布依据:
阿西夫·赛义夫·乌丁
在项目元数据中使用SPDX许可证表达式。
允许Connection.Enure()重试策略(#1629)指定的特定例外。
雷迪斯==4.3.4,试图避开公元前(#1634)。
将托管身份支持添加到Azure存储队列(#1631)。
支持SQLA v2.0(#1651)。
切换到Firero5(#1655)。
从Serialization.py中删除unusedsetupfuns。
重构:重构utils/json(#1659)。
调整模拟以正确模拟在Python3.10上实现的行为。(参考文献编号1663)
5.3.0b2¶
- 发布日期:
2022年10月19日
- 发布依据:
阿西夫·赛义夫·乌丁
FIX:将QueueProperties保存到_QUEUE_NAME_CACHE,而不是QueueClient。
集线器:滴答延迟修复(#1587)。
修复断开连接()(#1589)中与redis的不兼容。
解决Kombu文件系统传输线程不安全的问题。
Importlib_METADATA删除不推荐使用的入口点接口(#1601)。
允许在docker-compose中与Azurite仿真器一起使用azurestoragequeue传输(#1611)。
5.3.0b1¶
- 发布日期:
2022年8月1日
- 发布依据:
阿西夫·赛义夫·乌丁
将ext.py文件添加到setup.cfg。
增加对SQS DelaySecond(#1567)的支持。
将监视添加到添加了前缀的复杂命令。
避免在序列化/反序列化时丢失UUID类型(#1575)。
杂务:在临时演员中加入confluentkafka。
5.3.0a1¶
- 发布日期:
2022年6月29日
- 发布依据:
阿西夫·赛义夫·乌丁
将扇出添加到文件系统(#1499)。
通过锁定保护一组就绪任务,以避免并发更新。(#1489)。
说明Kombu使用PICLE协议版本2的正确文档。
使用新的Entry_Points接口。
将mypy添加到管道(#1512)。
增加了在JSON中序列化和反序列化二进制消息的可能性(#1516)。
升级版本并添加 __future__. 注释导入。
从过时的库中清除json.py(#1533)。
将新的py-amqp提升到5.1.1(#1534)。
为PyPI添加GitHub URL。
将pytest升级到~=7.1.1。
支持pymongo 4.x(#1536)。
最初的卡夫卡支持(#1506)。
将Azure存储队列传输升级到版本12(#1539)。
移至咨询2(#1544)。
DateTime序列化和反序列化已修复(#1515)。
红色凹凸>=4.2.2(#1546)。
更新SQS依赖项(#1547)。
将hlen添加到前缀的redis命令列表(#1540)。
添加了一些类型批注。
5.2.4¶
- 发布日期:
2022年3月6日
- 发布依据:
阿西夫·赛义夫·乌丁
允许在没有活动传输的情况下获取RECOVERABLE_CONNECTION_ERROR。
通过从setup.py中删除INSTALLED_SCHEMA HACK来防止KeyError:‘purelib’。
恢复“尝试拼写setupTools(#1466)”(#1481)。
修复问题#789:异步http代码不允许代理配置(#790)。
修正不正确的重试次数。
使用Redis设置芹菜的重新交付属性(#1484)。
删除在不同地方使用OrderedDict(#1483)。
仅当默认主机名可用时才警告缺少主机名(#1488)。
所有受支持的Python版本都定义 __package__.
添加了对pubSub客户端的global_keyprefix支持(#1495)。
试试pytest 7(#1497)吧。
添加一个选项以不对SQS消息进行Base64编码。
修复SQS EXTRACT_TASK_NAME消息引用。
5.2.3¶
- 发布日期:
2021年12月29日
- 发布依据:
阿西夫·赛义夫·乌丁
允许redis>=4.0.2。
修复PYPy CI作业。
SQS传输:通过检查队列URL(#1450)正确检测FIFO队列。
确保还原在Redis传输中是原子的(#1444)。
限制setuptools>=59.1.1,<59.7.0。
将最低Py-AMQP提升至v5.0.9(#1462)。
减少传输的内存使用量(#1470)。
防止关闭的Redis传输上的事件循环轮询(并导致泄漏)。
遵守连接超时(#1458)
阻止‘Consumer:Cannot Connection’上的Redis事件循环停止(#1477)。
5.2.2¶
- 发布日期:
2021年11月16日
- 发布依据:
阿西夫·赛义夫·乌丁
将redis版本设置为>=3.4.1<4.0.0,因为它还不完全兼容。
5.2.1¶
- 发布日期:
2021年11月8日
- 发布依据:
阿西夫·赛义夫·乌丁
将redis版本升级到>=3.4.1。
尝试使用最新的SQS依赖项修复安全警告。
测试和依赖项更新
5.2.0¶
- 发布日期:
2021年11月5日
- 发布依据:
娜奥米·埃尔斯坦
V 1.4.x(#1338)。
别再提librabbitmq(#1381)。
合并https://github.com/celery/kombu的分支机构“Master”
测试新的最新版本(#1383)。
将Python3.6从CI中删除(#1382)。
使用任何来自unittest而不是case。mock。
修复了文档要求中缺少的对redis的依赖。
[pre-commit.ci] 提交前自动更新。
删除对大小写的依赖项(#1389)。
FIX:检查Redis响应类型。
[pre-commit.ci] 提交前自动更新(#1393)。
安装时的PY3.7+(#1392)。
防止在Pidbox(#1394)中缓存OID。
添加了#1394的单元测试。
修复kombu/asynchronous/aws/Connection.py(#1397)中的flke8。
[pre-commit.ci] 提交前自动更新。
修复test_pidbox单元测试以支持非Linux平台(#1398)。
[pre-commit.ci] 提交前自动更新。
移走bdist。
将python3.10添加到配置项并修复其他问题(#1402)。
尝试修复配置项(#1407)。
当pypy3测试失败时,不要快速失败(#1408)。
当交换表为空时,返回空列表而不是不一致错误(#1404)。
[pre-commit.ci] 提交前自动更新。
5.2.0rc1¶
- 发布日期:
2021-09-07 UTC晚上7:00+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
删除不再使用的向后兼容代码(#1344)。
添加对设置redis用户名(#1351)的支持。
添加对Python3.9的支持。
当SERVER_HOST为NONE时,使用URI中的主机名。
默认情况下,使用Python的内置json模块,而不是简单的json。
如果未定义,则SQS Channel.prefined_queues应为{}。
为Redis Transporter设置的密钥添加全局密钥前缀(#1349)。
修复:引发BrokenPipeError(#1231)。
FIX:将缺少的命令添加到前缀。
使BrokerState Transport具体化。
测试和文档清理。
5.1.0¶
- 发布日期:
2021-05-23 UTC下午7:00+3:00
- 发布依据:
奥梅尔·卡茨
修复Azure Service Bus的队列名称特殊字符替换。(#1324)
添加对SQLAlChemy 1.4的支持。(#1328)
中将秒参数强制为浮点数
Timer.enter_after
。(#1330)向SimpleQueue类添加接受参数。(#1140)
prepare_accept_content()
现在提高SerializerNotInstalled
而不是KeyError
。(#1343)
5.1.0b1¶
- 发布日期:
2021-04-01世界协调时晚上10:30+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
车轮不再是万能的。
Revert“添加了来自envars的redis传输key_prefix”。
Redis Transport:小幅改进 SentinelChannel (#1253)。
修复不使用默认频道的Pidbox。
REVERT“在工作进程重新启动时-恢复可见,与时间无关(#905)”。
将藤条添加到依赖项中。
固定urllib3<1.26以修复失败的单元测试。
将超时添加到生产者发布(#1269)。
删除python2兼容代码(#1277)。
Redis:支持带有SSL的Sentinel。
支持Azure Service Bus 7.0.0(#1284)。
允许指定会话令牌(#1283)。
Kombu/asynchronous/http/curl:IMPLEMENT_SET_TIMEOUT。
禁用Simplejson中的命名元组到对象功能(#1297)。
更新到毒物对接2.0。
SQS退让政策(#1301)。
修复了SQS单元测试。
修复:SQS传输中的非kombu json消息解码(#1306)。
添加Github Actions CI(#1309)。
将默认PICLE协议版本更新为4(#1314)。
更新Connection.py(#1311)。
放弃对lzma后端的支持。
丢弃过时的代码导入泡菜(#1315)。
更新librabbitmq和pyamqp(#936)的默认登录方法。
SQS Broker-使用AWS处理STS身份验证(#1322)。
最低Py-AMQP版本为v5.0.6(#第1325)。
大量的文档和示例修复。
使用CACHED_PROPERTY(#1316)的线程安全实现。
5.0.2¶
- 发布日期:
2020-09-06世界协调时下午6:30+3:00
- 发布依据:
奥梅尔·卡茨
将所需的AMQP版本升级到5.0.0。
5.0.1¶
- 发布日期:
2020-08-23 19:10 UTC+3:00
- 发布依据:
奥梅尔·卡茨
从参考文档中删除了kombu.Five,因为它已不存在
调整了Sphinx配置中稳定文档的版本,因为在最新版本中忽略了这一点
5.0.0¶
- 发布日期:
2020-08-05世界协调时下午16:00+3:00
- 发布依据:
奥梅尔·卡茨
BREAKING CHANGE :已放弃对Python2的支持(#1232)
为自定义botocore配置添加SQS传输选项(#1219)
4.6.11¶
- 发布日期:
2020-06-24 UTC下午1:15+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
恢复#1193中的不兼容更改和其他改进(#1211)
DEFAULT_CHANNEL应自动重新连接(#1209)
4.6.10¶
- 发布日期:
2020-06-03世界协调时上午10:45+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
医生改进。
SET_CONNECTION in_Asure_Connection(#1205)
修复问题#1172
重用连接 [bug fix]
4.6.9¶
- 发布日期:
世界协调时2020-06-01下午14:00+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
如果未在预定义上明确定义AWS证书,则可防止失败。
在启用重试和的情况下,在Maybe_Declare中引发RecoverableConnectionError。
修复问题#1172。
#1174的可能修复。
FIX:使SQLAlChemy Channel init线程安全
为RabbitMQ添加了集成测试基础设施
初始Redis集成测试实施
SQLAlChemy传输:使用Query.with_for_UPDATE()而不是已弃用
修复消费者编码
添加了针对直接、主题和扇出交换类型的集成测试
添加了TTL集成测试
添加了针对优先级队列的集成测试
修复使用SQS时Linux上100%的CPU使用率
修改Mutex以使用redis LuaLock实现
FIX:从SQLAlChemy通道中消除剩余的争用条件
修复连接IMAYBE_DECLARE(#1196)
修复问题#1198:芹菜在没有足够的
连接到Broker时确保连接
使用可选的胞质化功能将pyamqp更新到2.6
4.6.8¶
- 发布日期:
2020-03-29世界协调时上午20:45+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
添加了对Broker_TRANSPORT_OPTIONS(#1145)中Health_Check_Interval选项的支持
向Redis频道添加RETRY_ON_TIMEOUT参数(#1150)
增加对Redis(#1139)的ssl_cert_reqs查询参数标准值的支持
将预定义_队列选项添加到SQS传输(#1156)
添加了在将amqps用于pyamqp传输时根据ca证书进行的SSL证书验证(#1151)
修复了问题(#701),其中kombu.Transport.redis.Mutex在Python3中断开(#1141)
修复Redis频道中的BROP错误(#1144)
4.6.7¶
- 发布日期:
2019-12-07 20:45 UTC+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
在Python3.8+(#1086)上使用标准库中的Importlib.Metadata。
添加要使用传输选项更改的窥视锁定设置(#1119)。
修复Redis运行状况检查(#1122)。
在执行回调之前重置就绪(#1126)。
在kombu.Connection.SimpleBuffer(#1128)中添加缺少的参数QUEUE_ARGS
4.6.6¶
- 发布日期:
2019-11-11 00:15 UTC+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
REVERT_LOOKUP_DIRECT及其相关更改。
对Python3.8的支持
修复‘NoneType’对象没有属性‘Can_Read’的Redis传输错误
问题#1019修复Redis传输套接字超时
添加等待超时设置以接收队列消息(#1110)
凹凸Py-AMQP至2.5.2
4.6.5¶
- 发布日期:
2019-09-30 UTC下午19:30+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
REVERT_LOOKUP接口和正确的redis实现。
通过添加更多功能齐全的fakeredis模块,对redis测试用例进行了重大改造。
添加更多测试用例以提高Kombu redis传输的覆盖率。
重构生产者消费者测试用例,使其基于原始模拟并通过
修复了测试中挥之不去的线路长度问题。
当INCLUDE_PASSWORD为FALSE时清除URL
将pycurl固定到7.43.0.2,因为它是最新的版本,提供了轮子
凹凸Py-AMQP至2.5.2
4.6.4¶
- 发布日期:
2019-08-14 22:45 UTC+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
使用导入库元数据而不是pkg_resource以获得更好的性能
允许用户在忽略资源标识符的情况下切换URL(#1032)
出现503SQS错误时,不要停止接收任务。(#1064)
修复可能会声明(#1066)
REVERT“REVERT”使用SIMEMBERS而不是SMEMBERS检查队列(Redis Broker)
修复MongoDB后端,正常使用TTL(#1076)
确保最大重试次数=0不同于无(#1080)
凹凸Py-AMQP至2.5.1
4.6.3¶
- 发布日期:
2019-06-15 UTC上午12:45+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
恢复Kombu 4.6的FastUUID
4.6.2¶
- 发布日期:
2019-06-15 UTC上午12:45+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
修复错误和回归
4.6.1¶
- 发布日期:
2019-06-06世界协调时上午10:30+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
修复了Kombu 4.6中新引入的一些错误
4.6.0¶
- 发布日期:
2019-05-30 UTC下午15:30+6:00
- 发布依据:
阿西夫·赛义夫·乌丁
丢弃的Python3.4
凹凸Py-AMQP到2.5.0
使用SIMEMBERS而不是SMEMBERS检查队列(Redis Broker)
增列 _lookup_direct 方法设置为虚拟通道。(#994)
增加了优化直接交换集中队列查找的可能性。
增列 _lookup_direct 方法来修改虚拟通道。(#994)
使用 SISMEMBER 而不是 SMEMBERS 命令检查集合中是否存在队列。时间复杂度从O(N)增加到O(1),其中N是集合基数。
贡献者 Stevan Milic 和 Asif Saif Uddin
仅当优先级不为None时才在属性中包含优先级。由于我们尝试序列化优先级属性(如果它存在于字典中),因此它必须是一个整数。
贡献者 Omer Katz
在适当的地方从函数定义中删除了危险的默认可变参数。
贡献者 Todd Cook
通过以下方式改进和修复CodeBase:
Omer Katz
Asif Saif Uddin
4.5.0¶
- 发布日期:
2019-03-3 UTC下午18:30+3:00
- 发布依据:
奥梅尔·卡茨
Redis传输现在支持键的自定义分隔符。
以前,在Redis中存储表示队列的键时,我们使用硬核值
\x06\x16
分隔符,用于在队列名称中存储队列的不同属性。现在可以使用SEP传输选项配置分隔符:
with Connection('redis://', transport_options={ 'sep': ':', }): # ... pass
贡献者 Joris Beckers
当SQS服务器返回超时时,我们会忽略它并继续尝试,而不是引发错误。
这将防止芹菜出现错误和挂起。
贡献者 Erwin Rossen
正确声明对QPID传输的异步支持。
如果您正在使用这种交通工具,我们强烈建议您升级。
贡献者 Rohan McGovern
还原 celery/kombu#906 并引入唯一的广播队列名称作为可选的关键字参数。
如果希望每个广播队列具有唯一名称,请指定 unique=True :
>>> from kombu.common import Broadcast >>> q = Broadcast(queue='foo', unique=True) >>> q.name 'foo.7ee1ac20-cda3-4966-aaf8-e7a3bb548688' >>> q = Broadcast(queue='foo') >>> q.name 'foo'
通过以下方式改进和修复CodeBase:
Omer Katz
4.4.0¶
- 发布日期:
2019-03-3 UTC晚上9:00+2:00
- 发布依据:
奥梅尔·卡茨
在压缩模块中恢复bz2导入检查。
支票是在#年删除的 celery/kombu#938 因为假设它只影响Jython。然而,在没有bz2支持的Python中可能会缺少bz2支持。
贡献者 Patrick Woods
修复了4.3.0中解析包含密码的Redis Sentinel主URI时发生的回归。
贡献者 Peter Lithammer
处理仅提供一个Redis Sentinel节点的情况。
贡献者 Peter Lithammer
正确支持以下项的SSL URL参数 rediss:// `URI。
贡献者 Paul Bailey
还原 celery/kombu#954 。相反,将所需的redis-py依赖项提升到3.2.0以包含此修复 andymccurdy/redis-py@4e1e748 。
贡献者 Peter Lithammer
添加了对使用正则表达式模式或GLOB模式向多个Pidbox广播的支持。
贡献者 Jason Held
4.3.0¶
- 发布日期:
2019-01-14 UTC下午7:00+2:00
- 发布依据:
奥梅尔·卡茨
添加了对Python3.7的支持。
贡献者 Omer Katz , Mads Jensen 和 Asif Saif Uddin
避免缓存使用TTL声明的队列。
使用TTL声明的队列现在也被排除在内存缓存之外,以防它们在同一通道上的发布之间过期。
贡献者 Matt Yule-Bennett
向消息表中添加了用于SQLAlChemy传输的索引。
该索引允许根据消息的时间戳对表进行有效的排序。
备注
我们还不提供此型号的迁移。如果您已经在使用SQLAlChemy传输,则需要手动添加索引。
不同数据库的语法可能会有所不同。有关说明,请参考您的数据库文档。
贡献者 Mikhail Shcherbinin
添加了限制重新尝试重新连接到传输的时间的超时。
贡献者 :github_user:`tothegump`
:class:``celery.asynchronous.hub.Hub` 现在是可重入的。
这允许调用
celery.bin.celery.main()
在将工人从停工中解救出来后,在相同的过程中使其苏醒 (:class:``SystemExit` `)。贡献者 Alan Justino da Silva
如文档所述,队列现在接受字符串交换名称作为参数。
增加了测试,以避免进一步的倒退。
贡献者 Antonio Gutierrez
现在,为广播队列指定名称可以按预期工作。
以前,命名广播队列不会为每个工作进程创建多个队列。他们错误地声明了命名队列,这导致每个扇出交换一个队列,从而错过了扇出交换的全部要点。该行为现在与未命名的广播队列相匹配。
贡献者 Kuan Hsuan-Tso
在结合GEvent初始化Redis传输时,将所有未确认的消息恢复到队列中。
贡献者 Gal Cohen
允许 :class:``kombu.simple.SimpleQueue` `将Queue_Arguments传递给队列对象。
这使得 :class:``kombu.simple.SimpleQueue` `使用自定义参数连接到RabbitMQ队列,如‘x-Queue-MODE’=‘lazy’。
贡献者 C Blue Neeh
为安全的Redis连接添加对‘rediss’方案的支持。
Rediss方案默认为最不安全的形式,因为没有合适的默认位置 ca_certs 。建议仍然是遵循文档并具体说明 broker_use_ssl 如果是从芹菜来的话。
贡献者 Daniel Blair
添加了Azure存储队列传输。
传输是在Azure存储队列之上实现的。这为Azure中的芹菜用户提供了一种简单但可扩展的低成本PaaS传输。该传输旨在与Azure块Blob存储后端结合使用。
贡献者 Clemens Wolff , :github_user:`@ankurokok` , Denis Kisselev , Evandro de Paula , Martin Peck 和 :github_user:`@michaelperel`
添加了Azure Service Bus传输。
该传输是在Azure Service Bus之上实现的,并为Azure中要求更高的芹菜工作负载提供PaaS支持。该传输旨在与Azure CosmosDB后端结合使用。
贡献者 Clemens Wolff , :github_user:`@ankurokok` , Denis Kisselev , Evandro de Paula , Martin Peck 和 :github_user:`@michaelperel`
完全删除其余提到的Jython支持。
贡献者 Asif Saif Uddin 和 Mads Jensen
将消息发布到Pidbox时,如果出现错误,请重试。
贡献者 Asif Saif Uddin
修复中的无限循环 :method:``kombu.asynchronous.hub.Hub.create_loop` `。
以前尝试解决该问题(PR Kombu/760)时没有考虑边缘情况。现在它被修复了。
贡献者 Vsevolod Strukchinsky
使用SQS Broker时,工作进程关闭不再复制消息。
贡献者 Mintu Kumar Sah
在使用SQS代理时,优先选择boto的默认区域,而不是硬编码的默认区域。
贡献者 Victor Villas
修复了以前导致芹菜挂起的共享Redis插座的关闭问题。
贡献者 Alexey Popravka
这个 Pyro 运输 (
kombu.transport.pyro
)现在可以与最新的Firero版本一起使用。还添加了此传输所需的队列所需的Pyro Kombu代理。贡献者 Irmen de Jong
处理非Base64编码的SQS消息。
修复由以下人员贡献 Tim Li , Asif Saif Uddin 和 Omer Katz 。
将哨兵失败的处理转移到redis库本身。
以前,只有当URI中的第一个节点的哨兵服务启动时,Redis Sentinel才能工作。服务器停机可能会导致停机。
贡献者 Brian Price
当使用具有二进制数据的芹菜和泡菜串行器作为有效负载的一部分时, UnicodeDecodeError 将被提出,因为内容不是UTF-8。我们现在根据错误进行替换。
贡献者 Jian Dai
允许设置 :method:``boto3.sqs.create_queue` `通过TRANSPORT_OPTIONS的属性。
贡献者 Hunter Fernandes
修复了在连接断开时将entity.Channel替换为vivive()时的无限循环。
贡献者 Tzach Yarimi
添加了对Brotli压缩的可选支持。
贡献者 Omer Katz
使用SQS Broker时,无法正确解析名称以‘f’字母结尾的FIFO队列。这一问题现在已得到解决。
贡献者 Alex Vishnya 和 Ilya Konstantinov
添加了对LZMA压缩的可选支持。
贡献者 Omer Katz
添加了对ZStandard压缩的可选支持。
贡献者 Omer Katz
要求最低版本为Py-AMQP 2.4.0。
贡献者 Asif Saif Uddin
DISABLE_TRACEBACKS环境变量的值现在在调试、信息和警告记录器级别受到重视。
贡献者 Ludovic Rivallain
如Kombu/#741和Eventlet/Eventlet#415中所述,在猴子修补的Eventlet队列和Kombu期望的接口之间存在不匹配。这会导致芹菜在 broker_pool_limit 配置选项为SET Eventlet/Eventlet#415表明互斥锁可以是noop。现在的情况就是这样。
贡献者 Josh Morrow
通过以下方式改进和修复CodeBase:
Omer Katz
Mads Jensen
Asif Saif Uddin
Lars Rinn
通过以下方式改进文档:
Jon Dufresne
Fay Cheng
Asif Saif Uddin
Kyle Verhoog
Noah Hall
:github_user:`brabiega`
4.2.2-post1¶
- 发布日期:
IST 2019-01-01下午04:00
- 发布依据:
奥梅尔·卡茨
备注
之前的版本包含来自Master的代码。现在,它将从PyPI中删除。请改用此版本。
自上一版本以来未发生任何更改。
4.2.2¶
- 发布日期:
IST 2018-12-06 04:30
- 发布依据:
奥梅尔·卡茨
支持Redis客户端版本2.x和版本3.x。
贡献者 Ash Berlin-Taylor 和 Jeppe Fihl-Pearson
4.2.1¶
- 发布日期:
IST 2018年05月21日09:00
- 发布依据:
奥梅尔·卡茨
备注
版本4.2.0包含了 async
模块意外损坏。这一问题现在已得到解决。
处理librabbitmq文件,在套接字未连接时引发ValueError。
贡献者 Bryan Shelton
4.2.0¶
- 发布日期:
IST 2018年05月21日09:00
- 发布依据:
奥梅尔·卡茨
现在过去了
max_retries
,interval_start
,interval_step
,interval_max
来自Broker的参数transport_options
至ensure_connection()
什么时候回来default_connection()
(问题#765)。贡献者 Anthony Lukach 。
QPID:消息现在默认情况下是持久的
贡献者 David Davis
Kombu现在需要2.10.4或更高版本的redis库,以与芹菜保持一致
贡献者 Colin Jeanne
修复了某些环境中过时的Simejson中的ImportError
贡献者 Aaron Morris
MongoDB:修复带有-rc标签的MongoDB版本失败
贡献者 dust8
确保定期轮询频率不超过虚拟传输中的超时
贡献者 Arcadiy Ivanov
修复了使用Python-Future模块时的字符串处理
贡献者 John Koehl
在为Python3.7做准备时,将“async”替换为“async
贡献者 Thomas Achtemichuk
允许在使用时取消池大小限制
贡献者 Alex Hill
通过以下方式改进和修复CodeBase:
j2gg0s
Jon Dufresne
Jonas Lergell
Mads Jensen
Nicolas Delaby
Omer Katz
通过以下方式改进文档:
Felix Yan
Harry Moreno
Mads Jensen
Omer Katz
Radha Krishna. S.
Wojciech Matyśkiewicz
4.1.0¶
- 发布日期:
格林尼治标准时间2017-07-17 04:45
- 发布依据:
安东尼·卢卡奇
SQS:添加了对所有受支持查询的长轮询支持。修复了在解析未从SQS检索到的消息的响应时导致错误的错误。
贡献者 Anthony Lukach 。
异步集线器:修复了执行待办任务时可能出现的无限循环(发出芹菜/芹菜#3712)。
QPID:修复了消息可能重复的错误
delivery_tag
(第563期)。贡献者 bmbouter 。
MongoDB:修复了使用
readPreference
PYMOGO 3.X的选项。贡献者 Mikhail Elovskikh 。
重新添加了对以下各项的支持 :pypi:``SQLAlchemy` `
贡献者 Amin Ghadersohi 。
SQS:修复了主机名默认为的错误
localhost
如果未在设置中指定,则为。贡献者 Anthony Lukach 。
Redis:添加了从传输URL读取密码的支持(问题#677)。
贡献者 George Psarakis 。
RabbitMQ:确保对队列参数进行更安全的编码。
贡献者 Robert Kopaczewski 。
添加了回退到 :func:``uuid.uuid5` 输入 :func:``generate_oid 如果 :func:``uuid.uuid3 `失败。
贡献者 Bill Nottingham 。
修复了以下项的争用条件和加速超时 :class:``kombu.simple.SimpleBase` `(问题#720)。
贡献者 c-nichols 。
ZooKeeper:修正了最后一个色罗字符的修剪
贡献者 Dima Kurguzov 。
RabbitMQ:修复了尝试关闭已关闭的连接时导致异常的错误(问题#690)。
贡献者 eavictor 。
删除了生成器中不推荐使用的StopIteration和无效的regex转义序列。
贡献者 Jon Dufresne 。
在CI测试中添加了Python3.6。
贡献者 Jon Dufresne 。
SQS:允许在boto3连接中指定终结点URL。
贡献者 georgepsarakis 。
SQS:添加了对Python3.4的支持。
贡献者 Anthony Lukach 。
SQS:
kombu[sqs]
现在取决于 This is title (不再使用 This is title 。添加了对Python3.4+的支持
添加了对FIFO队列(问题#678)和(问题芹菜/芹菜#3690)的支持
避免了有关损坏的端点文件的问题(发出celery/celery#3672)
贡献者 Mischa Spiegelmock 和 Jerry Seutter 。
ZooKeeper:增加了对Python3延迟任务的支持。
贡献者 Dima Kurguzov 。
SQS:修复了以下错误
kombu.transport.SQS.drain_events()
不支持回调参数(问题#694)。贡献者 Michael Montgomery 。
修复了在迭代时修改字典大小的错误(问题#675)。
贡献者 Felix Yan 。
Etcd:添加了对
EtcdException
异常,而不是EtcdError
。贡献者 Stephen Milner 。
通过以下方式改进文档:
Mads Jensen
Matias Insaurralde
Omer Katz
Dmitry Dygalo
Christopher Hoskin
4.0.2¶
- 发布日期:
太平洋标准时间2016-12-15 03:31
- 发布依据:
问索勒姆
现在取决于
amqp
2.1.4这个新版本利用了Linux上的TCP Keeplive设置,使其在检测关闭的连接时更好,也在故障转移条件下。
Redis:优先级颠倒,因此,优先级0变为优先级9。
4.0.1¶
- 发布日期:
太平洋标准时间2016-12-07下午06:00
- 发布依据:
问索勒姆
现在取决于
amqp
2.1.3这个新版本利用了新的
TCP_USER_TIMEOUT
Linux上的Socket选项。生产者:修复了指定默认交换时的性能下降(问题#651)。
QPID:切换到在中使用getattr qpid.Transport.__del__ (问题#658)
贡献者 Patrick Creech 。
现在对暂停使用单调时间。
MongoDB:修复了与Python3的兼容性(问题#661)。
消费者:
__exit__
现在,如果出现与连接相关的错误(问题#670),则跳过取消使用者。MongoDB:取消使用自然排序(问题#638)。
贡献者 Anton Chaporgin 。
修复了错误的关键字参数
channel
错误(问题#652)。贡献者 Toomore Chiang 。
稳妥地论证
urllib.quote
在Python2.x上必须是字节(问题#645)。通过以下方式改进文档:
Carlos Edo
Cemre Mengu
4.0¶
- 发布日期:
2016-10-28 UTC下午16:45
- 发布依据:
问索勒姆
现在取决于
amqp
2.0版本。新的py-amqp版本进行了重构,使用了现代的Python套接字约定和API一致性,从而获得了更好的性能。
不再依赖于
anyjson
。删除了此版本不再支持的传输:
Django ORM运输
SQLAlChemy ORM传输
豆茎运输
ZeroMQ传输
Amqplib传输(使用pyamqp)。
API更改
签署:
kombu.Message
现在以身体为第一武器。它曾经是
Message(channel, body=body, **kw)
,但现在是Message(body, channel=channel, **kw)
。这不会影响您,因为Kombu API没有让用户手动实例化消息。
新的SQS传输
由Nextdoor捐赠,MDK提供额外捐款。
备注
kombu[sqs]
现在取决于 This is title 。新领事专车。
贡献者 Wido den Hollander 。
新的etcd交通工具。
贡献者 Stephen Milner 。
新的QPID交通工具。
它是在Kombu 3.0中作为试验性传输引入的,但现在已经足够成熟,可以完全支持。
创建者和维护者 Brian Bouterse 。
Redis:优先级0现在是最低的,9是最高的。( backward incompatible )
这与AMQP中的优先级工作方式相匹配。
修复由以下人员贡献 Alex Koshelev 。
Redis:支持Sentinel
您可以将连接指向前哨URL列表,如下所示:
sentinel://0.0.0.0:26379;sentinel://0.0.0.0:26380/...
其中每个哨兵由一个 ; 。多个哨兵由
kombu.Connection
构造函数,并放置在连接失败时要连接到的备用服务器列表中。贡献者 Sergey Azovskov ,以及 Lorenzo Mancini
RabbitMQ队列扩展
已将新参数添加到
kombu.Queue
这使您可以直接、方便地配置RabbitMQ队列扩展。Queue(expires=20.0)
设置队列过期时间,单位为浮点秒。
看见
kombu.Queue.expires
。Queue(message_ttl=30.0)
设置队列消息生存时间浮点秒。
Queue(max_length=1000)
将队列最大长度(消息数)设置为int。
Queue(max_length_bytes=1000)
将队列最大长度(消息总大小,以字节为单位)设置为int。
Queue(max_priority=10)
声明队列为优先级队列,该队列根据
priority
消息的字段。
RabbitMQ:
Message.ack
现在支持multiple
争论。如果将Multiple设置为True,则在确认消息之前收到的所有消息也将被确认。
amqps://
现在可以指定为需要SSL(问题#610)。Consumer.cancel_by_queue
现在是恒定的时间。Connection.ensure*
现在提高kombu.exceptions.OperationalError
。可以重试的东西现在被重新命名为
kombu.exceptions.OperationalError
。Redis:修复了对SSL的支持。
贡献者 Robert Kolba 。
新的
Queue.consumer_arguments
可用于通过以下方式设置消费者优先级x-priority
。请参阅https://www.rabbitmq.com/consumer-priority.html
示例:
Queue( 'qname', exchange=Exchange('exchange'), routing_key='qname', consumer_arguments={'x-priority': 3}, )
队列/交换:
no_declare
已添加选项(也为内部AMQ启用。交易所)(第565期)。JSON序列化程序现在调用
obj.__json__
用于不受支持的类型。这意味着您现在可以定义一个
__json__
方法用于可以简化为内置json类型的自定义类型。示例:
class Person: first_name = None last_name = None address = None def __json__(self): return { 'first_name': self.first_name, 'last_name': self.last_name, 'address': self.address, }
JSON序列化程序现在可以处理DateTime、Django Promise、UUID和Decimal。
豆茎:优先级0现在是最低的,9是最高的。( backward incompatible )
这与AMQP中的优先级工作方式相匹配。
修复由以下人员贡献 Alex Koshelev 。
Redis:现在支持使用
ssl
参数为Connection
。Redis:vhost之间的扇出交换不再可见,并且扇出消息可以按模式过滤。( backward incompatible )
以前可以使用
fanout_prefix
,以及fanout_patterns
传输选项,但现在默认启用这些选项。如果您想混合和匹配运行不同版本的生产者/消费者,您需要配置您的Kombu 3.x客户端以同时启用这些选项:
>>> Connection(transport_options={ 'fanout_prefix': True, 'fanout_patterns': True, })
邮箱:邮箱新参数:ttl和过期。
Mailbox现在支持用于控制邮箱队列和回复队列的邮件TTL和队列过期的新参数。
queue_expires
(浮点数/整数秒)。queue_ttl
(浮点数/整数秒)。reply_queue_expires
(浮点数/整数秒)。reply_queue_ttl
(浮点数/整数秒)。
整型/浮点型都需要几秒钟。
贡献者 Alan Justino 。
Exchange.Delivery_MODE现在默认为
None
,而缺省值由Producer.publish
。Consumer
现在支持新的prefetch_count
参数,如果提供该参数,将强制使用者在启动前设置初始预取计数。虚拟运输现在存储
priority
作为一种财产,而不是delivery_info
,以与AMQP兼容。reply_to
参数为Producer.publish
现在可以是Queue
举个例子。联系:现在有了一种新的方法
Connection.supports_exchange_type(type)
它可用于检查当前传输是否支持特定的交换类型。SQS:消费者现在可以阅读非Kombu发送的json消息。
贡献者 Juan Carlos Ferrer 。
SQS:现在将记录身份验证失败时使用的访问密钥。
贡献者 Hank John 。
添加了新的
kombu.mixins.ConsumerProducerMixin
对于也将在单独的连接上发布消息的消费者。信息:现在有了更具描述性的
repr
。贡献者 Joshua Harlow 。
Async:基于cURL的HTTP客户端。
异步:现在使用 poll 而不是 select 如果可以的话。
MongoDB:现在支持优先级
贡献者 Alex Koshelev 。
虚拟传输现在支持多队列绑定。
贡献者 Federico Ficarelli 。
虚拟传输现在支持匿名交换。
如果在发布消息时,交换参数设置为‘’(空字符串),则ROUTING_KEY将被视为目标队列。
这将完全绕过路由表,只将消息传递到路由键中指定的队列名称。
ZooKeeper:当使用服务器名列表时,Transport现在使用kazoo中的内置支持来处理故障转移。
贡献者 Joshua Harlow 。
Consumer erMixin.run现在将关键字参数传递给.Consumer。
不推荐使用和删除¶
不推荐使用的方法
Consumer.add_queue_from_dict
已被移除。请改用:
consumer.add_queue(Queue.from_dict(queue_name, **options))
不推荐使用的函数
kombu.serialization.encode
已被移除。使用
kombu.serialization.dumps()
取而代之的是。不推荐使用的函数
kombu.serialization.decode
已被移除。使用
kombu.serialization.loads()
取而代之的是。已卸下的模块
kombu.syn
detect_environment
已移至kombu.utils.comat
3.0.37¶
- 发布日期:
太平洋标准时间2016-10-06下午05:00
- 发布依据:
问索勒姆
连接:返回值为
.info()
不再是JSON可序列化的,导致了“itertools.cle对象不是JSON可序列化的”错误(问题#635)。
3.0.36¶
- 发布日期:
太平洋标准时间2016-09-30 03:06
- 发布依据:
问索勒姆
连接:修复了使用备用URL克隆连接时的错误。
FIX由Emmanuel Cazenave贡献。
Redis:修复了Unix套接字连接的问题。
https://github.com/celery/celery/issues/2903
FIX由拉斐尔·米歇尔贡献。
Redis:修复了与旧的redis-py版本的兼容性(问题#576)。
广播现在在被复制/拾取时保留队列名称(问题#578)。
3.0.35¶
- 发布日期:
太平洋标准时间2016-03-22晚上11:22
- 发布依据:
问索勒姆
Msgpack:msgpack支持现在需要msgpack-python>0.4.7。
Redis:TimeoutError不再作为可恢复的错误处理。
Redis:增加了设置更多Redis连接选项的功能
Connection(transport_options={...})
。socket_connect_timeout
socket_keepalive
(需要redis-py
>2.10)socket_keepalive_options
(需要redis-py
>2.10)
Msgpack:修复对二进制/Unicode数据的支持
3.0.34¶
- 发布日期:
太平洋标准时间2016-03-03 05:30
- 发布依据:
问索勒姆
QPID:添加了异步错误处理。
作者:Brian Bouterse。
QPID:送货标签现在是UUID4(问题#563)。
FIX由Brian Bouterse贡献。
Redis:Connection.as_uri()返回格式错误的URL
redis+socket
方案已确定(发布芹菜/芹菜#2995)。Msgpack:使用二进制编码而不是UTF-8(问题#570)。
3.0.33¶
- 发布日期:
太平洋标准时间2016-01-08 06:36
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.9。Redis:修复了辅助连接导致主用户连接关闭的问题(问题#550)。
QPID:不再使用线程操作,以确保与所有环境兼容(问题#531)。
3.0.32¶
- 发布日期:
太平洋标准时间2015-12-16 02:29
- 发布依据:
问索勒姆
Redis:修复了3.0.31中引入的错误,其中redis传输始终连接到本地主机,而无论主机设置如何。
3.0.31¶
- 发布日期:
太平洋标准时间2015-12-16中午12:00
- 发布依据:
问索勒姆
REDIS:修复了3.0.30中引入的错误,其中套接字过早断开连接。
集线器:已删除调试日志记录消息:“已取消注册FD...”(第549期)。
3.0.30¶
- 发布日期:
太平洋标准时间2015-12-07 12:28
- 发布依据:
问索勒姆
修复了与Python2.7.11和3.5.1中的UUID的兼容性。
修复由凯·格罗纳贡献。
Redis传输:尝试在断开与服务器的连接后修复挂起用户的问题。
- 事件循环:
尝试在使用Redis传输时修复100%CPU的问题,
数据库传输:修复了Oracle兼容性。
将ORACLE数据库与数据库传输一起使用时,可能会出现“ORA-00907:缺少右括号”错误。
FIX由Deepak N.
文档修复
作者:Tommaso Barbugli。
3.0.29¶
- 发布日期:
太平洋标准时间2015-10-26 11:10
- 发布依据:
问索勒姆
修复了的序列化问题
bindings.as_dict()
(问题#453)。修复由Sergey Tikhonov贡献。
JSON序列化程序错误地将字节视为
ascii
,不是utf-8
(问题#532)。MongoDB:现在支持pymongo 3.x。
作者:Len Buckens。
SQS:在Python3上通过测试。
FIX由Felix Yan贡献
3.0.28¶
- 发布日期:
太平洋标准时间2015-10-12 12:00
- 发布依据:
问索勒姆
Django运输移民。
如果您使用的是Django 1.8,并且已经创建了Kombu_Transport_Django表,则必须运行一次假的初始迁移:
$ python manage.py migrate kombu_transport_django --fake-initial
默认情况下不再与南方兼容。
要继续将kombu.Transport.django用于南迁移,您现在需要为kombu迁移配置一个新位置:
SOUTH_MIGRATION_MODULES = { 'kombu_transport_django': 'kombu.transport.django.south_migrations', }
让旧的南方移民留在
kombu.transport.django.south_migrations
。现在再次与Redis<2.10版本一起工作。
3.0.27¶
- 发布日期:
太平洋标准时间2015-10-09 3:10
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.7。修复了某些MacOS 10.11(El Capitan)安装上的libSystem导入错误。
修复由Eric Wang贡献。
现在兼容Django 1.9。
Django:为数据库传输添加迁移。
Redis:现在依赖于py-redis 2.10.0或更高版本(问题#468)。
QPID:现在可以作为本地主机连接(问题#519)。
FIX由Brian Bouterse贡献。
QPID:添加对以下各项的支持
login_method
(问题#502,问题#499)。作者:Brian Bouterse。
QPID:现在从代理字符串中读取SASL机制(问题#498)。
FIX由Brian Bouterse贡献。
QPID:监视器线程现在可以在会话关闭时正确终止(问题#485)。
FIX由Brian Bouterse贡献。
QPID:修复了文件描述符泄漏(问题#476)。
修复由杰夫·奥特尔贡献
DOCS:修复了入口点参数的错误顺序(问题#473)。
Consumer Mixin:连接错误日志现在包括回溯(问题#480)。
BaseTransport现在在断开连接时会引发RecoverableConnectionError(问题#507)。
消费者:添加
tag_prefix
修改消费者标签生成方式的选项(问题#509)。
3.0.26¶
- 发布日期:
世界协调时2015-04-22 06:00
- 发布依据:
问索勒姆
修复了与2.10.3之前的py-redis版本的兼容性(问题#470)。
3.0.25¶
- 发布日期:
世界协调时2015-04-21下午02:00
- 发布依据:
问索勒姆
当启用了SSL时,pyamqp/librabbitmq现在使用5671作为默认端口(问题#459)。
Redis:现在支持
redis+socket://:pass@host:port
URL(问题#460)。Producer.publish
现在定义了expiration
属性以支持 RabbitMQ per-message TTL extension 。作者:Anastsis Andronidis。
现在为所有传输正确设置了连接传输属性。
作者:Alex Koshelev。
修复了连接未正确关闭的错误。
作者:Brian Bouterse。
bindings
现在JSON是可序列化的(问题#453)。作者:Sergey Tikhonov。
修复了未安装YAML时的打字错误(表示
msgpack
)。作者:Joshua Harlow。
雷迪斯:现在可以正确处理
redis.exceptions.TimeoutError
提出者redis
。由Markow贡献。
QPID:添加连接到QPID时要检查的附加字符串。
当我们连接到QPID时,我们需要确保如果当前机制失败,我们将跳到下一个SASL机制。否则,我们将继续重试与不工作的机械设备的连接。
作者:Chris Duryee。
QPID:句柄
NotFound
例外情况。作者:Brian Bouterse。
Queue.__repr__
现在确保返回值不是Unicode(问题#440)。QPID:
Queue.purge
错误地提升AttributeErrror
如果不存在(问题#439)。作者:Brian Bouterse。
Linux:现在忽略EPOLL注销时的权限错误。
3.0.24¶
- 发布日期:
世界协调时2014-11-17晚上11:00
- 发布依据:
问索勒姆
这个 Qpid 在Python2.x环境中支持Broker。QPID传输在Kombu中包括完全的SSL支持。请参阅
kombu.transport.qpid
有关更多信息,请参阅文档。由Brian Bouterse和Chris Duryee通过Red Hat的支持贡献。
依存关系:附加 [librabbitmq] 现在需要librabbitmq 1.6.0
文档字符串用于
TokenBucket
与实施不匹配。FIX由杰西·狄龙贡献。
oid_from()
不小心被叫到uuid.getnode()
但没有使用返回值。修复由亚历山大·托多罗夫贡献。
Redis:现在在调整底层连接时会忽略错误。
Redis:恢复消息现在将使用单一连接。
kombu.five.monotonic
:现在可以导入,即使ctype由于某种原因不可用(例如App Engine)文档:改进的示例以使用
declare
参数为Producer
(问题#423)。Django:已修复
app_label
对于较旧的Django版本 (< 1.7
)。(问题#414)。
3.0.23¶
- 发布日期:
世界协调时2014-09-14晚上10:45
- 发布依据:
问索勒姆
Django:修复了Django 1.7中与自动提交处理相关的兼容性改进中的错误。
作者:Radek Chaajka。
Django:在应用程序标签重命名后,Django传输模型将不会在syncdb上创建(问题#406)。
3.0.22¶
- 发布日期:
世界协调时2014-09-04 03:00
- 发布依据:
问索勒姆
Kombu.async:分钟。等待计时器之间的延迟总是增加到一秒。
修复了在With语句退出块后接收消息的IterMessages中的错误。
由鲁米亚娜·内科娃修复
- 自动重试:现在可以处理缺少包装属性的函数
(
__module__
,__name__
,__doc__
)。修复#392。由Johtso贡献。
Django:现在为以下对象设置定制应用程序标签
kombu.transport.django
来处理Django 1.7中的最新变化。SimpleQueue从缓冲区的错误端删除了消息(问题#380)。
测试:现在使用
unittest.mock
如果可用(问题#381)。
3.0.21¶
- 发布日期:
世界协调时2014-07-07 02:00
- 发布依据:
问索勒姆
修复了中的剩余错误
maybe_declare
为auto_delete
交流。FIX由罗杰·胡贡献。
MongoDB:创建通道现在可以正确评估连接(问题#363)。
FIX由Len Buckens贡献。
3.0.20¶
- 发布日期:
世界协调时2014-06-24 02:30
- 发布依据:
问索勒姆
恢复3.0.17中的更改,其中
maybe_declare
缓存AUTO_DELETE队列和交换的声明。FIX由罗杰·胡贡献。
REDIS:修复了使用GEvent且通道关闭时的竞争条件。
修复由安德鲁·罗迪奥诺夫贡献。
3.0.19¶
- 发布日期:
世界协调时2014-06-09 03:10
- 发布依据:
问索勒姆
由于未能列出所需的额外依赖项,车轮发行版不支持Python2.6。
持久队列/交换和AUTO_DELETE队列/交换可以使用
maybe_declare
。
3.0.18¶
- 发布日期:
世界协调时2014-06-02 06:00
- 发布依据:
问索勒姆
3.0.17中引入的一个输入错误导致kombu.async.Hub崩溃(问题#360)。
3.0.17¶
- 发布日期:
世界协调时2014-06-02 05:00
- 发布依据:
问索勒姆
kombu[librabbitmq]
现在取决于librabbitmq 1.5.2。Async:事件循环现在有选择地删除失败模式的文件描述符,并保留其他描述符(例如,读和写)。
FIX由罗杰·胡贡献。
CouchDB:现在无需设置用户ID即可工作。
作者声明:Latitia M.Haskins;
SQLAlChemy:现在支持从连接错误中恢复。
作者:Felix Schwarz。
REDIS:关闭时恢复现在可以在ACK模拟被禁用的情况下工作。
kombu.common.eventloop()
意外接受插座错误。
3.0.16¶
- 发布日期:
世界协调时2014-05-06下午01:00
- 发布依据:
问索勒姆
kombu[librabbitmq]
现在取决于librabbitmq 1.5.1。Redis:修复
TypeError
中的问题unregister
(问题#342)。修复由托拜厄斯·肖特多夫贡献。
测试:某些单元测试意外地需要 redis-py 类库。
FIX由兰迪·巴洛贡献。
Librabbitmq:使用旧版本的时会崩溃
librabbitmq
,现在改为发出警告。
3.0.15¶
- 发布日期:
世界协调时2014-04-15 09:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.5。RabbitMQ 3.3更改了Qos语义(问题#339)。
点击此处查看RabbitMQ发行说明:http://www.rabbitmq.com/blog/2014/04/02/breaking-things-with-rabbitmq-3-3/
添加了一个新的连接属性,该属性可用于检测远程服务器是否正在使用此新的QOS行为:
>>> Connection('amqp://').qos_behavior_matches_spec False
因此,如果您的应用程序依赖于旧的语义,您可以使用它来设置
apply_global
适当地标记:def update_prefetch_count(channel, new_value): channel.basic_qos( 0, new_value, not channel.connection.client.qos_behavior_matches_spec, )
的用户
librabbitmq
鼓励升级到librabbitmq 1.5.0。这个
kombu[librabbitmq]
Extra已更新,以依赖于此版本。池:现在比较连接时会考虑传输选项(问题#333)。
MongoDB:修复了与Python3的兼容性。
Async:SELECT:尝试从循环中注销句柄时忽略套接字错误。
Pidbox:现在可以配置为使用除json之外的序列化程序,但将序列化程序参数指定为
Mailbox
。作者:Dmitry Malinovsky。
消息解压缩现在可以与Python3一起使用。
FIX由Adam Gaca贡献。
3.0.14¶
- 发布日期:
世界协调时2014-03-19 07:00
- 发布依据:
问索勒姆
MongoDB :现在经历了连接故障转移(问题#123)。
FIX由Alex Koshelev贡献。
MongoDB :固定
KeyError
删除副本集成员时。还修复了芹菜#971和芹菜/#898。
FIX由Alex Koshelev贡献。
MongoDB :修复MongoDB广播游标重新初始化错误。
FIX由Alex Koshelev贡献。
Async :修复了松懈信号量实现中的错误,在某些使用模式中,未正确遵守限制。
修复由Ionel Cristian MăRieș贡献。
Redis :修复了使用Python3时扇出的问题(问题#324)。
Redis :固定
AttributeError
尝试关闭不存在的连接(问题#320)。
3.0.13¶
- 发布日期:
世界协调时2014-03-03 04:00
- 发布依据:
问索勒姆
Redis:修复了可能导致数据丢失的严重争用情况。
传递标记被意外设置为通道本地的递增数字,但传递标记需要是全局唯一的,以便邮件不会覆盖备份存储中的较旧邮件。
此更改并不向后兼容,建议您尽快使用以前的版本更新您的所有系统。
现在取决于
amqp
1.4.4。Pidbox:现在确保在默认情况下处理消息编码错误,因此不需要指定自定义错误处理程序。
Redis:扇出交换机现在可以使用AMQP模式来路由和过滤消息。
此更改向后不兼容,必须使用
fanout_patterns
运输选项:>>> conn = kombu.Connection('redis://', transport_options={ ... 'fanout_patterns': True, ... })
启用时,如果绑定键是模式,则交换将像AMQP主题交换一样工作。
这计划在未来成为默认行为。
Redis:已修复
cycle
没有这样的属性错误。
3.0.12¶
- 发布日期:
世界协调时2014-02-09 03:50
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.3。修复了Python3.4日志记录不兼容问题(问题#311)。
Redis:现在可以正确处理未知的发布/订阅消息。
FIX由Sam Stavinoha贡献。
Amqplib:修复了从套接字请求的字节数超过必要的错误。
修复由Ionel Cristian MăRieș贡献。
3.0.11¶
- 发布日期:
世界协调时2014-02-03 05:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.2。现在始终信任类型为 application/data 和 application/text 或者具有未指明的内容类型(问题#306)。
压缩错误现在被作为解码错误处理,并将触发
Consumer.on_decode_error
如果已指定,则为回调。新的
kombu.Connection.get_heartbeat_interval()
方法,该方法可用于访问协商的心跳信号值。- kombu.common.oid_for 不再使用主机的MAC地址,但
而是使用进程范围的UUID4作为节点ID。
这避免了调用 uuid.getnode() 在模块范围内。
现在使注册的文件号正常化。
作者:Ionel Cristian MăRieș。
SQS:修复了不遵守预取计数限制的错误。
3.0.10¶
- 发布日期:
世界协调时2014-01-17 05:40
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.1。maybe_declare
现在,如果通道断开连接而不是ChannelError
以便可以重试该操作。雷迪斯:
Consumer.cancel()
现在是线程安全的。这修复了使用GEvent/Eventlet时的问题,并且在取消消费者之后处理消息,从而导致“Message for Queue Without Consumer”错误。
在计算休眠时间时,重试操作并不总是考虑INTERVAL_START值(问题#303)。
FIX由Antoine Legrand贡献。
定时器:修正了Python3上的“unhasable type”错误。
集线器:不要试图注销已关闭的轮询器实例上的操作。
3.0.9¶
- 发布日期:
世界协调时2014-01-13 05:30
- 发布依据:
问索勒姆
现在取决于
amqp
1.4.0。Redis:基于扇出的队列的基本取消现在会发送相应的
UNSUBSCRIBE
命令发送到服务器。这修复了Pidbox的一个问题,在Pidbox中,消费者被取消后可以接收回复消息,给出了
"message to queue without consumers"
错误。MongoDB:改进了连接字符串和选项处理(版本#266+问题#120)。
作者:Alex Koshelev。
SQS:批量接收消息数量限制为10条。
这是Amazon强制执行的硬限制,因此SQS传输不能超过此值。
修复由埃里克·雷诺兹贡献。
Consumer Mixin:
consume
现在每次套接字超时都会检查心跳。作者:Dustin J.Mitchell。
重试策略:最大重试次数为0不会永远重试。
FIX由Antoine Legrand贡献。
Simple:如果传递一个Queue对象,Simple Utils现在将从该队列中获取缺省路由键。
费尔南多·豪尔赫·莫塔贡献。
repr(producer)
不再计算基础通道。Redis:Redis错误类的映射现在使用
kombu.transport.redis.get_redis_error_classes()
功能。异步:
Hub.close
现在集.poller
对一个都不是。
3.0.8¶
- 发布日期:
2013-12-16 UTC下午05:00
- 发布依据:
问索勒姆
序列化程序:加载和转储现在将引发的异常包装到
DecodeError
和kombu.exceptions.EncodeError
分别进行了分析。Ionel Cristian Maries贡献
Redis:如果发生SELECT/EPOLL/kQueue异常事件,将尝试从错误的连接中读取。
修复由迈克尔·纳尔逊贡献。
Redis:禁用ACK模拟现在可以正常工作。
修复由迈克尔·纳尔逊贡献。
SQS:通过批量读取消息来提高性能。
作者:Matt Wise。
连接池:尝试从已关闭的池获取现在将引发
RuntimeError
。
3.0.7¶
- 发布日期:
世界协调时2013-12-02下午04:00
- 发布依据:
问索勒姆
修复了与Python2.6的兼容性。
Redis:修复了‘错误的文件描述符’的问题。
3.0.6¶
- 发布日期:
世界协调时2013-11-21 04:50
- 发布依据:
问索勒姆
计时器:不再尝试散列关键字参数(问题#275)。
Async:未考虑文件描述符的Long类型。
FIX由Fabrice Rabaute贡献。
PyPy:对kQueue的支持已中断。
Redis:糟糕的酒吧/订阅负载不再使消费者崩溃。
Redis:Unix套接字URL现在可以通过将虚拟主机作为查询参数来指定它。
使用数据库编号3指定虚拟主机的URL示例:
redis+socket:///tmp/redis.sock?virtual_host=3
kombu.VERSION
现在是命名元组。
3.0.5¶
- 发布日期:
2013-11-15 UTC晚上11:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.3.3。Redis:修复了Python3兼容性问题(问题#270)。
MongoDB:修复了使用身份验证时URL解析的问题。
修正由东卫明贡献。
Pyamqp:修复了发布消息时的小问题,属性字典设置为无。
修复由维克多·加西亚贡献。
已修复中的问题
repr(LaxBoundedSemaphore)
。FIX由Antoine Legrand贡献。
测试现在通过的是Python3.3。
3.0.4¶
- 发布日期:
2013-11-08 UTC下午01:00
- 发布依据:
问索勒姆
通用。服务质量:
decrement_eventually
现在,如果启用预取计数,则确保该值不会低于1。
3.0.3¶
- 发布日期:
2013-11-04世界协调时下午03:00
- 发布依据:
问索勒姆
SQS:正确恢复导致消息之间延迟的补丁。
由James Saryerwinnie贡献
SELECT:清除poller.cloe上所有已注册的FDS
Eventloop:如果引发EBADF,则取消注册。
3.0.2¶
- 发布日期:
2013-10-29 UTC下午02:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.3.2版。SELECT:修复了注销未正确删除FD的问题。
3.0.1¶
- 发布日期:
2013-10-24 UTC下午04:00
- 发布依据:
问索勒姆
现在取决于
amqp
版本1.3.1。Redis:新选项
fanout_keyprefix
建议所有用户使用此传输选项,因为它可确保发送的广播(扇出)消息仅被当前虚拟主机看到:
Connection('redis://', transport_options={'fanout_keyprefix': True})
然而,启用此选项意味着您无法发送或接收来自较旧版本的Kombu的消息,因此请确保您的所有参与者都已升级并启用了传输选项。
这将是Kombu 4.0中的默认行为。
分发:删除的文件
requirements/py25.txt
。MongoDB:现在禁用
auto_start_request
。MongoDB:启用
use_greenlets
如果使用了Eventlet/GEvent。Pidbox:修复了Expires头为None的问题,这是AMQ协议不支持的值。
消费者米信:新
consumer_context
在不排出事件的情况下启动使用者的方法。
3.0.0¶
- 发布日期:
英国夏令时2013-10-14 04:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.3版。不再支持Python2.5
现在,支持的最低版本是适用于Python2的Python2.6.0和适用于Python3的Python3.3。
同时支持Python2和3的双代码库。
不再使用
2to3
,使维护对这两个版本的支持变得更容易。Pickle、YAML和msgpack反序列化现在默认禁用。
这意味着Kombu将默认拒绝处理除json之外的任何内容类型。
众所周知,Pickle是一个安全问题,因为它会很高兴地加载任何嵌入到Pickle有效负载中的对象,并且有效负载可以被精心设计成几乎可以做任何您想做的事情。Kombu中的默认序列化程序是json,但它还支持许多其他序列化格式,如果收到这些格式,它将对这些格式进行评估:包括PICLE。
人们总是认为,用户接受了有关Pickle安全含义的教育,但事后我们认为,如果我们有能力默认安全,就不应该指望用户保护他们的服务。
通过禁用用户不明确希望启用的任何内容类型,我们确保用户在添加Pickle作为支持的序列化格式时必须有意识。
其他内置的串行化程序(YAML和msgpack)也被禁用,即使它们不被认为不安全 [1] 在这点上。相反,它们被禁用,因此如果将来在这些库中的一个库中发现安全漏洞,只有在显式启用它们的情况下才会受到影响。
要让您的消费者接受json以外的格式,您必须显式地将所需格式添加到可接受内容类型的白名单中:
>>> c = Consumer(conn, accept=['json', 'pickle', 'msgpack'])
或在使用同步访问时:
>>> msg = queue.get(accept=['json', 'pickle', 'msgpack'])
这个
accept
参数最先在2.5.10版中为消费者提供支持,并且最先由Queue.get
在版本2.5.15中,为了与以前的版本保持兼容,您可以启用以前的行为:>>> from kombu import enable_insecure_serializers >>> enable_insecure_serializers()
但请注意,这会对全球产生影响,因此使用时要非常小心。
脚注
Kombu.async:实验性事件循环实现。
这段代码以前是在Celery中编写的,但被移到这里是为了使其更容易实现异步传输。
该API旨在与Tulip API匹配,后者将作为
asyncio
模块。它显然不是一个完整的实现,但目标是,一旦有可能,它将很容易更改为它。效用函数
kombu.common.ipublish
已被移除。使用
Producer(..., retry=True)
取而代之的是。效用函数
kombu.common.isend_reply
已被删除使用
send_reply(..., retry=True)
取而代之的是。kombu.common.entry_to_queue
和kombu.messaging.entry_to_queue
已被移除。使用
Queue.from_dict(name, **options)
取而代之的是。Redis:消息现在恢复到列表的末尾。
作者:Mark Lavin。
StdConnectionError
和StdChannelError
被删除和
amqp.ConnectionError
和amqp.ChannelError
而不是使用。
消息对象实现已移至
kombu.message.Message
。串行化:重命名的函数编码/解码为
dumps()
和loads()
。为了向后兼容,旧名称仍可用作别名。
这个
kombu.log.anon_logger
功能已删除。使用
get_logger()
取而代之的是。queue_declare
现在返回名为tuple的queue
,message_count
,以及consumer_count
菲尔兹。LamportClock:现在可以设置锁类
kombu.utils.clock
:添加了用于排序事件的实用程序。SimpleQueue
现在允许您重写使用的交换类型。文斯·冈萨雷斯贡献。
ZooKeeper传输已更新,以支持
kazoo
类库。撰稿人:Mahendra M.
- Pyamqp/librabbitmq:传输选项现在作为关键字参数转发
到底层连接(问题#214)。
传输现在可以区分可恢复和不可恢复的连接和通道错误。
kombu.utils.Finalize
已删除:使用multiprocessing.util.Finalize
取而代之的是。内存传输现在支持扇出交换类型。
作者:Davanum Srinivas。
实验性新闻 Pyro 运输 (
kombu.transport.pyro
)。作者:Tommie McAfee。
实验性新闻 SoftLayer MQ 运输 (
kombu.transport.SLMQ
)。由凯文·麦克唐纳贡献
Eveno:KQueue以微妙的方式中断,因此现在改用SELECT。
SQLAlChemy传输:现在可以使用
queue_tablename
和message_tablename
交通选择。作者:Ryan Petrello。
- Redis传输:现在支持使用本地UNIX套接字与
Redis服务器(问题#1283)
要使用UNIX套接字进行连接,您必须使用
redis+socket
URL-前缀:redis+socket:///tmp/redis.sock
。此功能是从 celery-redis-unixsocket 项目。作者:Maxime Rouyrre。
ZeroMQ传输:DRAIN_EVENTS现在支持超时。
作者:Jesper Thomschütz。
2.5.16¶
- 发布日期:
英国夏令时2013-10-04 03:30
- 发布依据:
问索勒姆
Python3:修复了依赖项未安装的问题。
2.5.15¶
- 发布日期:
英国夏令时2013-10-04 03:30
- 发布依据:
问索勒姆
声明缓存:现在只保留声明的散列,这样它就不会保留对通道的引用。
声明缓存:现在尊重
entity.can_cache_declaration
属性。修复了与Python2.5的兼容性。
修复了python-msgpack更改后的测试。
Queue.get
:现在支持accept
争论。
2.5.14¶
- 发布日期:
英国夏令时2013-08-23下午05:00
- 发布依据:
问索勒姆
Safe_str无法正常工作,导致
UnicodeDecodeError
(第248期)。
2.5.13¶
- 发布日期:
英国夏令时2013-08-16下午04:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.0.13修复了Django功能测试中的拼写错误。
在Python2.x中,Safe_str现在返回Unicode
FIX由Germán M.Bravo贡献。
AMQP:传输选项现在与提供给连接的参数合并。
测试不再依赖于分发,而分发已被弃用,并重新合并到setupTools中。
修复由Sascha Peilicke贡献。
Consumer Mixin现在也会在出现与频道相关的错误时重新启动。
FIX由Corentin Ardeois贡献。
2.5.12¶
- 发布日期:
英国夏令时2013-06-28 03:30
- 发布依据:
问索勒姆
Redis:忽略循环周期中缺少密钥的错误。
修复了Python3上的测试套件错误。
修复了msgpack测试失败。
2.5.11¶
- 发布日期:
英国夏令时2013-06-25 02:30
- 发布依据:
问索勒姆
现在取决于AMQP 1.0.12(Py3兼容性问题)。
MongoDB:删除了“URI中的数据库名称被忽略”警告的原因。
Flavio Percoco Premoli修复
添加
passive
选项以Exchange
。设置此标志意味着该交换不会由Kombu声明,但它必须已经存在(否则将引发异常)。
拉法尔·马林诺夫斯基贡献
现在,Connection.info()给出了当前主机名,而不是可用主机名列表。
FIX由John Shuping贡献。
Pyamqp:传输选项现在作为kwargs转发到
amqp.Connection
。Librabbitmq:传输选项现在作为kwargs转发到
librabbitmq.Connection
。Librabbitmq:现在提高
NotImplementedError
如果启用了SSL。Librabbitmq库不支持安全套接字层,但您可以使用stantnel或更改为
pyamqp://
相反,交通工具。FIX由Dan LaMotte贡献。
Librabbitmq:修复了连接关闭时的循环引用。
EVENTIO:SELECT实现现在删除错误的文件描述符。
EVENTIO:修复了Py3兼容性问题。
添加了对py-amqp和librabbitmq传输的功能测试。
ORCE.FORCE_CLOSE_ALL不再使用互斥。
Pidbox:现在忽略 IconsistencyError 发送回复时,因为此错误只是意味着客户端可能不再处于活动状态。
添加新的
Connection.collect
方法,该方法可用于在无I/O的连接后进行清理。queue_bind
不再为绑定到“默认交换”的队列调用(问题#209)。作者:Jonathan Halcrow。
未正确考虑重试的max_reTRIES设置(一次关闭)。
2.5.10¶
- 发布日期:
英国夏令时2013-04-11 06:10
- 发布依据:
问索勒姆
关于Kombu 3.0即将进行的更改的说明¶
默认情况下,Kombu 3消费者将不再接受Pickle/YAML或msgpack,并且您必须显式启用不受信任的反序列化程序,或者使用 kombu.enable_insecure_serializers()
,或使用 accept
参数为 Consumer
。
变化¶
禁用/启用不受信任的串行化程序的新实用程序函数。
消费者:
accept
现在可以用于指定要接受的内容类型的白名单。如果设置了接受白名单,并且接收到内容类型不在白名单中的消息,则
ContentDisallowed
引发异常。请注意,此错误可以由现有的 on_decode_error 回调例如:
Consumer(accept=['application/json']) Consumer(accept=['pickle', 'json'])
现在取决于AMQP 1.0.11
Pidbox:邮箱现在支持
accept
争论。Redis:当钥匙丢失时,更友好的错误。
连接URL:当有多个‘+’令牌时,解析器无法正常工作。
2.5.9¶
- 发布日期:
英国夏令时2013-04-08 05:07
- 发布依据:
问索勒姆
Pidbox:如果有多个节点使用同一个Pidbox,现在会发出警告。
-
声明队列时要调用的回调,带签名
(name, messages, consumers)
。 现在使用模糊匹配来建议交通工具名称中拼写错误的替代方案。
SQS:添加新的运输选项
queue_prefix
。作者:Johnsmith。
Pyamqp:不再重写Verify_Connection。
SQS:现在指定
driver_type
和driver_name
属性。FIX由Mher Movsisyan贡献。
修复了的错误
kombu.utils.retry_over_time
当未指定错误时。
2.5.8¶
- 发布日期:
世界协调时2013-03-21下午04:00
- 发布依据:
问索勒姆
现在取决于
amqp
1.0.10,修复了一个与Python3兼容的错误。Redis:修复了可能的争用条件(问题#171)。
REDIS:现在可以使用传输选项禁用ACK仿真/可见性_超时。
ACK仿真增加了相当多的开销,以确保即使在不干净的关机情况下数据也是安全的。如果您不担心数据丢失,现在有一个 ack_emulation 可以用来禁用它的传输选项:
Connection('redis://', transport_options={'ack_emulation': False})
SQS:已修复
boto
V2.7兼容性(问题#207)。交换:不应尝试重新声明默认交换 (
""
)(第209期)。SQS:长轮询现在默认情况下被禁用,因为它没有正确实现,导致接收消息之间的长时间延迟(问题#202)。
修复了Python2.6的不兼容性问题
exc.errno
有空。由星历贡献的修复。
2.5.7¶
- 发布日期:
世界协调时2013-03-08 01:00
- 发布依据:
问索勒姆
现在取决于AMQP 1.0.9
Redis:2.5.6中的回归导致redis传输忽略在
transport_options
。瑞迪斯:新消息
socket_timeout
交通工具选项。雷迪斯:
InconsistencyError
现在被认为是一个可以恢复的错误。资源池:将不再尝试释放从未获得的资源。
MongoDB:现在支持
ssl
选择。作者:Sebastian Pawlus。
2.5.6¶
- 发布日期:
世界协调时2013-02-08 01:00
- 发布依据:
问索勒姆
现在依赖于AMQP 1.0.8,它解决了在一些Python2.5安装中发现的错误,其中2**32溢出到0。
2.5.5¶
- 发布日期:
世界协调时2013-02-07 05:00
- 发布依据:
问索勒姆
SQS:现在支持长轮询(问题#176)。
轮询间隔缺省值已更改为0,并有一个新的传输选项 (
wait_time_seconds
)已添加。此参数指定等待来自SQS的消息的时间,默认为20秒,这是Amazon SQS当前允许的最大值。作者:James Saryerwinnie。
SQS:现在在恢复消息之前删除不可拾取的字段。
Consumer.__exit__ 现在忽略取消使用者时发生的异常。
虚拟:路由键现在可以由也在正则表达式中使用的字符组成(例如,括号)(问题#194)。
虚拟:修复了恢复邮件时的压缩标头。
FIX由Alex Koshelev贡献。
虚拟:确认/拒绝/重新排队现在可以在使用
basic_get
。虚拟:Message.reject现在由虚拟传输支持(重新排队取决于单独的传输支持)。
修复了用于静态分析器的Hack中的拼写错误。
FIX由Basil Mironenko贡献。
2.5.4¶
- 发布日期:
世界协调时2012-12-10 12:35
- 发布依据:
问索勒姆
修复了连接克隆和多个URL的问题(问题#182)。
修复由Dane Guempel贡献。
Zeromq:现在兼容libzmq 3.2.x。
FIX由Andrey Antukh贡献。
修复了Python3安装问题(问题#187)。
2.5.3¶
- 发布日期:
世界协调时2012-11-29中午12:35
- 发布依据:
问索勒姆
Pidbox:修复了与Python2.6的兼容性
2.5.2¶
- 发布日期:
世界协调时2012-11-29中午12:35
- 发布依据:
问索勒姆
2.5.2¶
- 发布日期:
世界协调时2012-11-29中午12:35
- 发布依据:
问索勒姆
[Redis] 修复了连接泄漏问题,并添加了新的‘max_Connections’传输选项。
2.5.1¶
- 发布日期:
世界协调时2012-11-28中午12:45
- 发布依据:
问索勒姆
修复了无法使用JSON序列化Queue.as_dict返回值的错误(问题#177)。
2.5.0¶
- 发布日期:
世界协调时2012-11-27下午04:00
- 发布依据:
问索勒姆
py-amqp 现在是新的默认传输,取代了
amqplib
。新的 py-amqp 类库是amqplib的一个分支,最初的目标如下:
使用AMQP 0.9.1而不是0.8
支持心跳(第79期+第131期)
在出现频道错误时自动恢复频道。
- 支持所有RabbitMQ扩展
消费者取消通知(问题#131)
出版商确认(第131期)。
交换到交换绑定:
exchange_bind
/exchange_unbind
。
API兼容
librabbitmq
因此,在不能编译rabbitmq-c的环境中,它可以用作纯Python的替代品。Librabbitmq将进行更新,以支持与py-AMQP相同的所有功能。
支持使用多个连接URL进行故障转移。
的第一个参数
Connection
现在可以是连接URL的列表:Connection(['amqp://foo', 'amqp://bar'])
或者,它可以是由分号分隔的多个URL的单个字符串参数:
Connection('amqp://foo;amqp://bar')
还有一个新的关键字参数
failover_strategy
它定义了如何ensure_connection()
/ensure()
/kombu.Connection.autoretry()
将在连接失败时重新连接。默认的重新连接策略是
round-robin
,它将简单地在列表中循环,并且还有一个shuffle
将从列表中选择随机主机的策略。也可以使用自定义策略,在这种情况下,参数必须是生成要连接到的URL的生成器。示例:
Connection('amqp://foo;amqp://bar')
现在支持PyDev、PyCharm、pylint等静态代码分析工具。
Queue
现在支持多个绑定。现在,通过将第二个参数设置为列表,您可以在同一队列中拥有多个绑定:
from kombu import binding, Queue Queue('name', [ binding(Exchange('E1'), routing_key='foo'), binding(Exchange('E1'), routing_key='bar'), binding(Exchange('E2'), routing_key='baz'), ])
为此,添加了帮助器方法:
作者:Rumana Neykova。
现在可以使用SetupTools入口点注册自定义序列化程序。
看见 使用SetupTools入口点创建扩展 。
新的
kombu.common.QoS
类作为线程安全的方式使用,以管理对使用者或通道prefetch_count的更改。这以前是芹菜中使用的内部类,现在移到
kombu.common
模块。消费者现在支持
on_message
可用于处理原始消息(未解码)的回调。方法指定的其他回调
callbacks
参数,以及receive
当存在On消息回调时,将不会调用方法。新的实用程序
kombu.common.ignore_errors()
忽略连接和通道错误。必须仅用于关闭或断开连接时的清理操作。
支持交换到交换绑定。
这个
Exchange
实体已获得bind_to
和unbind_from
方法:e1 = Exchange('A')(connection) e2 = Exchange('B')(connection) e2.bind_to(e1, routing_key='rkey', arguments=None) e2.unbind_from(e1, routing_key='rkey', arguments=None)
目前只有
pyamqp
运输。作者:Rumana Neykova。
2.4.10¶
- 发布日期:
世界协调时2012-11-22 06:00
- 发布依据:
问索勒姆
以前版本的连接池更改破坏了Redis支持,因此无论提供什么连接参数,它都将始终连接到本地主机(默认设置)(问题#176)。
2.4.9¶
- 发布日期:
2012-11-21 UTC下午03:00
- 发布依据:
问索勒姆
Redis:修复了尝试恢复消息时可能发生的争用情况(问题#171)。
修复由奥利·沃尔什贡献。
Redis:每个通道现在使用一个特定的连接池实例,该实例在连接失败时断开连接。
ProducerPool:修复了获取方法中可能出现的死锁。
产品池:
force_close_all
不再试图呼唤不存在的Producer._close
。Librabbitmq:现在实现
transport.verify_connection
以便连接池不会返回不再工作的连接。新的和更好的
repr()
用于队列和Exchange对象。Python3:修复了运行单元测试套件的问题。
Python3:修复了JSON编解码器的问题。
2.4.8¶
- 发布日期:
世界协调时2012-11-02 05:00
- 发布依据:
问索勒姆
REDIS:改进了公平队列周期的实施(问题#166)。
作者:Kevin McCarthy。
Redis:未确认消息恢复限制现在默认情况下是无限制的。
此外,现在可以使用
unacked_restore_limit
运输选项:Connection('redis://', transport_options={ 'unacked_restore_limit': 100, }) A limit of 100 means that the consumer will restore at most 100 messages at each pass.
Redis:现在使用互斥来确保一次只有一个使用者恢复消息。
默认情况下,互斥锁在5分钟后到期,但可以使用
unacked_mutex_expire
交通工具选项。LamportClock.Adjust Now返回新的时钟值。
现在可以在URL中指定心跳。
FIX由Mher Movsisyan贡献。
Kombu现在可以与PyDev、PyCharm和其他静态分析工具一起使用。
修复了Python3上msgpack的问题(问题#162)。
FIX由Jasper Bryant-Greene贡献
Amqplib:修复了在非阻塞模式下使用SSL时超时的错误。
修复由Mher Movsisyan贡献
2.4.7¶
- 发布日期:
2012-09-18英国夏令时下午03:00
- 发布依据:
问索勒姆
虚拟:在发送消息时,未知的交换现在默认为“直接”。
MongoDB:修复了合并存储在数据库中的密钥时的内存泄漏(问题#159)
修复由迈克尔·科尔巴科夫贡献。
MongoDB:MongoDB传输的更好索引(问题#158)。
这一改进将为Queue和_id创建一个新的复合索引,以便能够同时使用索引字段获取新消息(使用队列字段)和按_id排序。需要从集合中手动删除旧索引。
Rmihael对改进的贡献
2.4.6¶
- 发布日期:
英国夏令时2012-09-12 03:00
- 发布依据:
问索勒姆
添加其他兼容性依赖项:
Python<=2.6:
Importlib
已排序的判决
PYTHON<=2.5
Simejson
2.4.5¶
- 发布日期:
英国夏令时2012-08-30 03:36
- 发布依据:
问索勒姆
由于测试需求清理,上一版本破坏了在PyPy和Jython上的安装。
2.4.4¶
- 发布日期:
英国夏令时2012-08-29下午04:00
- 发布依据:
问索勒姆
Amqplib:修复了异步读取大型消息的错误。
Pyamqp:现在需要AMQP 0.9.3
清理了测试要求。
2.4.3¶
- 发布日期:
英国夏令时2012-08-25晚上10:30
- 发布依据:
问索勒姆
修复了AMQP传输别名的问题(问题#154)。
2.4.2¶
- 发布日期:
英国夏令时2012-08-24下午05:00
- 发布依据:
问索勒姆
2.4.1中出现了传输名称为空的情况。
2.4.1¶
- 发布日期:
英国夏令时2012-08-24下午04:00
- 发布依据:
问索勒姆
Redis:修复了可能导致消费者崩溃的竞争条件(问题#151)
通常会导致错误消息
"could not convert string to float"
连接重试可能会导致初始循环(问题#145)。
这个
amqp
Alias现在是在运行时解析的,因此即使在以后进行了修补,事件小程序检测也可以工作。
2.4.0¶
- 发布日期:
英国夏令时2012-08-17 08:00
- 发布依据:
问索勒姆
新实验
ZeroMQ <kombu.transport.zmq
运输。作者:John Watson。
REDIS:使用Eventloop时未恢复ACK超时消息。
现在默认情况下使用Pickle协议2以与Python3交叉兼容。
现在还可以使用
PICKLE_PROTOCOL
环境变量。添加
Transport.supports_ev
属性。PICA:队列清除未正常工作。
FIX由SteeveMorin贡献。
从Kombu 2.3开始,Pika后端不再工作
FIX由SteeveMorin贡献。
2.3.2¶
- 发布日期:
英国夏令时2012-08-01 06:00
- 发布依据:
问索勒姆
修复了Python3中的反序列化问题。
2.3.1¶
- 发布日期:
英国夏令时2012-08-01下午04:00
- 发布依据:
问索勒姆
Librabbitmq:现在可以处理未设置CONTENT_ENCODING/CONTENT_TYPE的消息(问题#149)。
FIX由C Anthony Risinger贡献。
Beanstrik:现在,如果URL不包含主机,则默认情况下使用本地主机。
2.3.0¶
- 发布日期:
英国夏令时2012-07-24 03:50
- 发布依据:
问索勒姆
新的
pyamqp://
交通工具!新的 py-amqp 类库是amqplib的一个分支,最初的目标如下:
使用AMQP 0.9.1而不是0.8
应支持所有RabbitMQ扩展
API兼容
librabbitmq
因此,在不能编译rabbitmq-c的环境中,它可以用作纯Python的替代品。
如果您开始使用py-amqp而不是amqplib,您可以享受许多优势,包括:
心跳支持(问题#79+问题#131)
消费者取消通知(问题#131)
出版商确认
Amqplib已经很长一段时间没有更新了,所以维护我们自己的分支可以确保我们可以快速推出新功能和修复程序,而不需要求助于猴子补丁。
要使用py-amqp传输,您必须安装
amqp
库:$ pip install amqp
并更改连接URL以使用正确的传输:
>>> conn = Connection('pyamqp://guest:guest@localhost//')
这个
pyamqp://
传输将是Kombu版本3.0中的默认备用传输,当librabbitmq
没有安装,librabbitmq也将更新以支持相同的功能。Connection现在支持心跳参数。
如果启用,则必须确保通过调用
Connection.heartbeat_check
速度是指定心跳间隔的两倍。例如,如果你有
Connection(heartbeat=10)
,那么你必须打电话给Connection.heartbeat_check()
每隔5秒。如果服务器没有以适当的速率发送心跳,则心跳检查方法必须引发中列出的错误
Connection.connection_errors
。该属性
Connection.supports_heartbeats
添加了检查传输器是否支持心跳的功能。叫唤
heartbeat_check
在不支持心跳的传输上会导致noop操作。SQS:修复了队列名称中包含无效字符的错误。
FIX由扎克·史密斯贡献。
Utils.reprcall:修复了默认情况下kwargs参数是空元组而不是空字典的拼写错误。
2.2.6¶
- 发布日期:
英国夏令时2012-07-10 05:00
- 发布依据:
问索勒姆
添加
kombu.messaging.entry_to_queue
以便与以前的版本进行比较。
2.2.5¶
- 发布日期:
英国夏令时2012-07-10 05:00
- 发布依据:
问索勒姆
Pidbox:现在设置回复队列的队列过期时间为10秒。
EventIO:现在忽略
ValueError
由EPOLL注销引发。MongoDB:修复问题#142
Flavio Percoco Premoli修复
2.2.4¶
- 发布日期:
2012-07-05英国夏令时下午04:00
- 发布依据:
问索勒姆
对msgpack-python0.2.0的支持(问题#143)
最新的msgpack版本不再支持Python2.5,因此,如果您仍在使用该版本,则需要依赖较早的msgpack-python版本。
修复由Sebastian Insua贡献
maybe_declare()
不再缓存具有auto_delete
设置了标志。新的实验性文件系统传输。
作者:Bobby Beever。
虚拟传输:现在支持匿名队列和交换。
2.2.3¶
- 发布日期:
英国夏令时2012-06-24下午05:00
- 发布依据:
问索勒姆
BrokerConnection
现已重命名为Connection
。名字
Connection
在很长一段时间里一直是别名,但现在文档中也正式使用了更名。连接别名从1.1.3版开始可用,并且
BrokerConnection
将仍然有效,并且不会被弃用。Connection.clone()
现在为SqlalChemy运输公司工作。kombu.common.eventloop()
,kombu.utils.uuid()
,以及kombu.utils.url.parse_url()
现在可以从kombu
模块直接运行。Pidbox传输回调
after_reply_message_received
现在发生在Finally块中。尝试使用
librabbitmq://
传输现在将在ImportError
如果librabbitmq
未安装。Librabbitmq退回到更老的
pylibrabbitmq
出于兼容性原因命名,因此将显示No module named pylibrabbitmq
而不是librabbitmq。
2.2.2¶
- 发布日期:
英国夏令时2012-06-22 02:30
- 发布依据:
问索勒姆
现在取决于
anyjson
0.3.3JSON序列化程序:现在通过
buffer
对象,因为在最新的anyjson
版本。修复了在超时设置为0时阻止EPOLL调用的问题。
修复由约翰·沃森贡献。
现在setup.py从
requirements/
目录。分发目录
contrib/
现已重命名为extra/
2.2.1¶
- 发布日期:
2012-06-21英国夏令时下午01:00
- 发布依据:
问索勒姆
SQS:默认可见性超时现在为30分钟。
因为我们有ACK仿真,所以可见性超时只有在消费者被突然终止时才有效。
重试参数以
Producer.publish
当指定了DECLARE参数时,现在可以正常工作。JSON序列化程序:未处理缓冲区对象(问题#135)。
FIX由Jens Hoffrichter贡献。
虚拟:现在支持被动参数
exchange_declare
。Exchange队列现在可以绑定到连接(将使用默认通道)(&Q):
>>> exchange = Exchange('name') >>> bound_exchange = exchange(connection) >>> bound_exchange.declare()
SimpleQueue
&SimpleBuffer
现在可以绑定到连接(将使用默认通道)。Connection.manager.get_bindings
现在为librabbitmq和pika工作。添加新的运输信息属性:
Transport.driver_type
底层驱动类型,如“AMQP”、“REDIS”、“SQL”。
Transport.driver_name
使用的库名称,例如“amqplib”、“redis”、“pymongo”。
Transport.driver_version()
基础库的版本。
2.2.0¶
- 发布日期:
英国夏令时2012-06-07 03:10
- 发布依据:
问索勒姆
重要说明¶
规范的源代码存储库已移动到
Pidbox:Pidbox使用的交换不再是AUTO_DELETE。
自动删除被描述为错误功能,因此我们已禁用它。
对于RabbitMQ用户,必须删除Pidbox使用的旧交易所,这些交易所被命名为
mailbox_name.pidbox
,以及reply.mailbox_name.pidbox
。可以使用以下命令清理这些交换:
$ VHOST=/ URL=amqp:// python -c'import sys,kombu;[kombu.Connection( sys.argv[-1]).channel().exchange_delete(x) for x in sys.argv[1:-1]]' \ $(sudo rabbitmqctl -q list_exchanges -p "$VHOST" \ | grep \.pidbox | awk '{print $1}') "$URL"
这个
VHOST
变量必须设置为目标RabbitMQ虚拟主机,并且URL
必须是服务器的AMQP URL。这个
amqp
传输别名现在将使用librabbitmq
如果已安装。py-librabbitmq 是一个使用librabbitmq C库的用于Python的快速AMQP客户端。
它可以通过以下方式安装:
$ pip install librabbitmq
如果进程是由Eventlet/GEvent修补的,则不会使用它。
新闻¶
REDIS:ACK仿真改进。
降低数据丢失的可能性。
现在通过在消息被消费时存储消息的副本来实现ACK。直到消费者确认或拒绝该副本,才会删除该副本。
这意味着,当连接关闭或超过可见性超时时,将重新传递未确认的消息。
可见性超时
这是ACK的超时,因此,如果消费者没有在此时间限制内确认消息,则消息将被重新传递给另一个消费者。
默认情况下,超时设置为一小时,但可以通过配置传输选项进行更改:
>>> Connection('redis://', transport_options={ ... 'visibility_timeout': 1800, # 30 minutes ... })
NOTE :如果超过可见性超时,将重新发送尚未确认的消息,对于芹菜用户来说,这意味着计划执行的ETA/倒计时任务将被执行两次(或更多)。如果您计划使用较长的ETA/倒计时,则应相应地调整可见性超时:
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 18000} # 5 hours
设置较长的超时意味着在停电时重新发送消息需要很长时间,但如果发生这种情况,您可以暂时将可见性超时设置得较低,以便在重新启动系统时清除消息。
实验 Apache ZooKeeper 运输
有关更多信息,请参阅模块参考:
kombu.transport.zookeeper
。撰稿人:Mahendra M.
雷迪斯:优先支持。
这条信息是
priority
字段现在被Redis传输所尊重,因为每个命名队列都有多个列表。然后,按优先级顺序使用这些队列。优先级字段是0-9范围内的数字,其中0是默认的最高优先级。
默认情况下,优先级范围折叠为四个步骤,因为九个步骤不太可能产生比使用四个步骤更多的好处。步骤数可以通过设置
priority_steps
传输选项,它必须是中的数字列表 sorted order :>>> x = Connection('redis://', transport_options={ ... 'priority_steps': [0, 2, 4, 6, 8, 9], ... })
以这种方式实现的优先级不如服务器端的优先级可靠,这就是为什么将该功能昵称为“准优先级”的原因; Using routing is still the suggested way of ensuring quality of service 由于客户端实现的优先级在许多方面不足,例如,如果工作者忙于长时间运行的任务、已经预取了许多消息、或者队列拥塞。
尽管如此,将优先级与路由结合使用可能比单独使用路由或优先级更有利。应该用实验和监测来证明这一点。
作者:Germán M.Bravo。
Redis:现在循环排队,这样消费是公平的。
这确保了非常繁忙的队列不会阻塞来自其他队列的消息,并确保所有队列都有相同的机会被消费。
这是以前的情况,但在切换到使用阻止POP时,行为被意外更改。
Redis:绑定到扇出交换的自动删除队列现在将在Channel.lose中删除。
Amqplib:重构了DRAIN_EVENTS实现。
Pidbox:现在使用
connection.default_channel
。Pickle序列化:现在可以解码缓冲区对象。
现在,即使实体是非持久的,也可以缓存交换/队列声明。
这是可能的,因为缓存的声明列表现在与连接一起保存,以便在连接丢失时重新声明实体。
Kombu源代码现在只使用一级显式相对导入。
修复¶
EVENTIO:现在忽略由
epoll.register
和EEXIST来自epoll.unregister
。EVENTIO:kQueue现在忽略
KeyError
取消注册。雷迪斯:
Message.reject
现在支持requeue
争论。Redis:删除多余的管道调用。
FIX由托马斯·约翰逊贡献。
Redis:现在为重新传递的消息设置重新传递的标头。
现在总是确保引用
sys.exc_info()
被移除。虚拟:现在在恢复消息之前删除了压缩标头。
针对SQLAlChemy后端的更多测试。
作者:Frank Cuny。
URL解析未正确处理MongoDB URL。
修复由弗拉维奥·佩尔可科·普雷莫利贡献。
豆茎:预约时忽略默认管道。
FIX由赵晓红贡献。
非阻塞消费支持¶
现在可以无阻塞地使用librabbitmq、amqplib和redis传输。
界面非常手动,到目前为止,只消费消息是非阻塞的。
不应以任何方式将该API视为稳定或最终的。它被目前需求非常有限的芹菜所使用。希望我们稍后能引入一个适当的基于回调的API。
Transport.eventmap
是一张地图
fd -> callback(fileno, event)
在Eventloop中注册。Transport.on_poll_start()
在每次调用轮询之前都会调用。投票者必须支持
register(fd, callback)
和unregister(fd)
方法:研究方法。Transport.on_poll_start(poller)
在集线器初始化时调用。Poller参数必须支持与相同的接口
kombu.utils.eventio.poll
。Connection.ensure_connection
现在接受一个回调参数,当连接断开时,每个循环都会调用该参数。添加
connection.drain_nowait
这是DRAIN_EVENTS的非阻塞替代方法,但仅受amqplib/librabbitmq支持。
DRAIN_EVENTS现在设置
connection.more_to_read
如果有更多的数据需要读取。这是为了支持必须在排出事件之间处理其他事情的事件循环。
2.1.8¶
- 发布日期:
英国夏令时2012-05-06 03:06
- 发布依据:
问索勒姆
绑定的交换/队列现在可以拾取。
消费者/生产者现在可以在没有通道的情况下实例化,并且只能在以后使用
.revive(channel)
。ProducerPool现在需要
Producer
争论。fxrange()
如果将STOP参数设置为NONE,则现在将永远计算。(fxrange类似于xrange,但用于小数)。对虚拟传输的自动删除支持不完整,可能会导致问题,因此将其删除。
缓存的声明 (
maybe_declare()
)现在绑定到底层连接,以便在连接丢失时重新声明实体。这也意味着以前不可缓存的实体(例如非持久实体)现在可以被缓存。
Compat Consumer Set:现在可以指定频道。
2.1.7¶
- 发布日期:
英国夏令时2012-04-27 06:00
- 发布依据:
问索勒姆
Compat Consumer erset现在接受可选的通道参数。
2.1.6¶
- 发布日期:
英国夏令时2012-04-23 01:30
- 发布依据:
问索勒姆
更改URL解析器后,SQLAlChemy传输无法正常工作。
现在,在极少数情况下,数据在连接中断后从代理中消失,而不是全局地存储每个底层连接的缓存声明。
Django:增加了南迁。
作者:Joseph Crosland。
2.1.5¶
- 发布日期:
英国夏令时2012-04-13 03:30
- 发布依据:
问索勒姆
URL解析器删除了超过第一个前导斜杠(问题#121)。
SQLAlChemy:现在可以使用+分隔符指定URL
示例:
Connection('sqla+mysql://localhost/db')
更好地支持匿名队列(问题#116)。
作者:Michael Barrett。
Connection.as_uri
现在引用URL部分(第117期)。Beanstak:现在可以将消息Ttr设置为消息属性。
安德烈·科斯滕科贡献
2.1.4¶
- 发布日期:
2012-04-03格林尼治标准时间下午04:00
- 发布依据:
问索勒姆
MongoDB:URL解析现在委托给了pymongo库(修复了问题#103和问题#87)。
FIX由Flavio Percoco Premoli和James Sullivan贡献
SQS:一个错误导致即使没有启用SDB持久性也会使用SimpleDB(问题#108)。
修复由阿南德·库姆里亚贡献。
Django:事务在错误的位置提交,导致数据清理失败(问题#115)。
修复由藤原大辅贡献。
MongoDB:现在支持副本集URL。
作者:Flavio Percoco Premoli。
Redis:现在,如果当前正在使用的队列键消失,则会引发通道错误。
FIX由Stephan Jaekel贡献。
所有传输‘CHANNEL_ERROR’列表现在包括
kombu.exception.StdChannelError
。所有Kombu异常现在都继承自
KombuError
。
2.1.3¶
- 发布日期:
2012-03-20格林尼治标准时间03:00
- 发布依据:
问索勒姆
修复了Jython兼容性问题。
修复了Python2.5兼容性问题。
2.1.2¶
- 发布日期:
2012-03-01格林尼治标准时间01:00
- 发布依据:
问索勒姆
Amqplib:上一个版本打破了对SSL的支持。
2.1.1¶
- 发布日期:
2012-02-24格林尼治标准时间下午02:00
- 发布依据:
问索勒姆
连接URL现在支持编码字符。
修复了连接池无法从连接丢失中恢复的情况。
FIX由弗洛里安·芒兹贡献。
我们现在修补amqplib的
__del__
方法跳过在套接字未连接时尝试关闭套接字,因为这会导致恼人的警告。压缩现在可以与二进制消息有效负载一起使用。
FIX由SteeveMorin贡献。
2.1.0¶
- 发布日期:
2012-02-04格林尼治标准时间10:38
- 发布依据:
问索勒姆
MongoDB:现在支持扇出(广播)(第98版)。
斯科特·莱昂斯贡献。
Amqplib:现在通过使用
MSG_PEEK
。Pylibrabbitmq:现在支持
basic_get
(第97期)。GEvent:现在始终使用
select
轮询后端。鼠兔运输:现在适用于鼠兔0.9.5和0.9.6dev。
旧的Pika传输(支持0.5.x)现在可以作为别名使用
oldpika
。(请注意,新的Pika版本已经经历了可怕的延迟,所以这仍然是一个实验性的传输)。
虚拟传输:现在可以通过传输选项设置轮询间隔(问题#96)。
示例:
>>> Connection('sqs://', transport_options={ ... 'polling_interval': 5.0})
默认间隔是特定于传输的,但通常是1.0(或Django数据库传输的5.0),这也可以使用
KOMBU_POLLING_INTERVAL
设置)。增加了方便功能:
kombu.common.eventloop()
。
2.0.0¶
- 发布日期:
2012-01-15格林尼治标准时间06:34
- 发布依据:
问索勒姆
重要说明¶
与Python的兼容性¶
不再支持Python2.4。
Python2.4的用户仍然可以使用1.x系列。
1.x系列已经进入了仅修复错误的维护模式,只要有需求并愿意维护,它就会一直保持这种模式。
新运输工具¶
django-kombu
现在是Kombu核心的一部分。Django消息传输使用Django ORM存储消息。
它使用轮询,默认轮询间隔为5秒。轮询间隔可以通过配置
KOMBU_POLLING_INTERVAL
Django设置,这是以整型或浮点型表示的轮询间隔(秒)。请注意,较短的轮询间隔可能会对数据库造成极大的压力:如果需要响应,您应该考虑切换到非轮询传输。要使用它,您必须使用传输别名
"django"
,或作为URL:django://
然后添加
kombu.transport.django
至INSTALLED_APPS
,然后跑manage.py syncdb
创建必要的数据库表。Upgrading
如果您以前使用过
django-kombu
,则中的条目INSTALLED_APPS
必须从djkombu
至kombu.transport.django
:INSTALLED_APPS = ( # …, 'kombu.transport.django', )
如果您以前使用过Django-Kombu,则不需要重新创建表,因为旧表将与新版本完全兼容。
kombu-sqlalchemy
现在是Kombu核心的一部分。此更改不需要更改代码,因为
sqlalchemy
使用了传输别名。
新闻¶
kombu.mixins.ConsumerMixin
是一个允许您轻松编写使用者程序和线程的Mixin类。SQS传输:添加了对SQS队列前缀的支持(问题#84)。
可以使用传输选项设置队列前缀
queue_name_prefix
:BrokerTransport('SQS://', transport_options={ 'queue_name_prefix': 'myapp'})
由Nitzan Mron贡献。
Producer.publish
现在支持自动重试。重试是由
reply
参数,并设置重试选项retry_policy
论据:exchange = Exchange('foo') producer.publish(message, exchange=exchange, retry=True, declare=[exchange], retry_policy={ 'interval_start': 1.0})
看见
ensure()
有关支持的重试策略选项的列表。Producer.publish
现在支持declare
关键字参数。这是一个实体列表 (
Exchange
,或Queue
),它应该在消息发布之前声明。
修复¶
Redis传输:使用时超时为1000秒
select
对于事件I/O(问题#86)。
1.5.1¶
- 发布日期:
2011-11-30格林尼治标准时间下午01:00
- 发布依据:
问索勒姆
修复了的问题
kombu.compat
在1.5.0中引入(第83期)。添加在序列化程序注册表中禁用Content_Types的功能。
任何内容类型为禁用的邮件都将被拒绝。一个例子是禁用Pickle串行化器:
>>> from kombu.serialization import registry # by name >>> registry.disable('pickle') # or by mime-type. >>> registry.disable('application/x-python-serialize')
1.5.0¶
- 发布日期:
2011-11-27格林尼治标准时间06:00
- 发布依据:
问索勒姆
修复了导致资源不能正确释放的错误。
这是由于使用了
__hash__
来区分它们。虚拟传输:现在默认禁用死信队列。
死信队列在默认情况下是启用的,以帮助应用程序作者,但现在Kombu很稳定,应该删除它。毕竟,在许多情况下,消息应该在没有队列进行缓冲的情况下被丢弃,而保留它们而不支持自动清理,与其说是一种功能,不如说是资源泄漏。
如果需要,仍然可以启用死信队列,方法是使用
deadletter_queue
运输选项:>>> x = Connection('redis://', ... transport_options={'deadletter_queue': 'ae.undeliver'})
此外,一个
UndeliverableWarning
现在,当启用死信队列并且消息在那里结束时,将发出。作者:Ionel Maries Cristian。
MongoDB传输现在支持Replicaset(问题#81)。
作者:伊万·梅茨拉尔。
这个
Connection.ensure
方法现在接受一个max_retries
值为0。现在值为0意味着 do not retry ,这有别于
None
这意味着 retry indefinitely 。作者:Dan McGee。
SQS传输:现在有一个小写
sqs
别名,以便它可以与代理URL一起使用(问题#82)。修复由洪敏熙贡献
SQS传输:修复了消息确认上的KeyError(问题#73)。
SQS传输现在使用UUID作为交付标记,而不是计数器。
FIX由布莱恩·伯恩斯坦贡献。
SQS传输:与Unicode相关的修复(问题#82)。
修复由洪敏熙贡献。
Redis版本检查可能会因为类型处理不当而崩溃(问题#63)。
修复了的错误 Resource.force_close_all 当资源尚未正确初始化时(问题#78)。
1.4.3¶
- 发布日期:
英国夏令时2011-10-27晚上10:00
- 发布依据:
问索勒姆
修复了ProducerPool中会获取太多资源的错误。
1.4.2¶
- 发布日期:
英国夏令时2011-10-26 05:00
- 发布依据:
问索勒姆
事件:轮询应该忽略 errno.EINTR
在Py2.7之后,str.encode才开始接受kwarg。
SIMPLE_TASK_QUEUE示例未正确运行(问题#72)。
FIX由Stefan Eletzhofer贡献。
空消息不会引发无法由 on_decode_error (第72期)
FIX由克里斯托夫·肖韦贡献。
CouchDB:如果设置了用户/密码,则正确进行身份验证(问题#70)
FIX由Rafael Duran Castaneda贡献
连接。消费者的签名错误。
修复由Pavel Skvazh贡献
1.4.1¶
- 发布日期:
英国夏令时2011-09-26下午04:00
- 发布依据:
问索勒姆
1.4.0打破了生产者池,导致每次收购都会建立新的连接。
1.4.0¶
- 发布日期:
英国夏令时2011-09-22 05:00
- 发布依据:
问索勒姆
添加模块
kombu.mixins
。此模块包含一个
ConsumerMixin
类,该类可用于轻松实现使用来自一个或多个kombu.Consumer
实例。新示例: 任务队列示例
使用
ConsumerMixin
、默认频道和全球连接池,以演示新的Kombu功能。MongoDB传输不能与MongoDB>=2.0一起使用(问题#66)
修复由詹姆斯·特克贡献。
Redis-py版本检查没有考虑版本字符串中的测试版标识符。
修复由大卫·齐格勒贡献。
生产者和消费者现在接受连接实例作为第一个参数。
然后将使用连接默认通道。
此外,还向Connection添加了快捷方式:
>>> connection.Producer(exchange) >>> connection.Consumer(queues=..., callbacks=...)
Connection已经获得了一个
connected
属性,该属性可用于检查连接实例是否已建立连接。ConnectionPool.acquire_channel
现在返回连接默认通道,而不是建立必须手动处理的新通道。增列
kombu.common.maybe_declare
maybe_declare(entity)
如果实体以前未在同一进程中声明,则声明该实体。kombu.compat.entry_to_queue()
has been moved tokombu.common
新模块
kombu.clocks
现在包含了Lamports逻辑时钟的实现。
1.3.5¶
- 发布日期:
英国夏令时2011-09-16 06:00
- 发布依据:
问索勒姆
Python3:AMQP_PROTOCOL_HEADER必须是字节,而不是字符串。
1.3.4¶
- 发布日期:
英国夏令时2011-09-16 06:00
- 发布依据:
问索勒姆
修复池中的语法错误。重置
1.3.3¶
- 发布日期:
英国夏令时2011-09-15下午02:00
- 发布依据:
问索勒姆
Pools.Reset不支持Forker之后的参数。
1.3.2¶
- 发布日期:
英国夏令时2011-09-10 01:00
- 发布依据:
莫夫西相
通过导入中断了与Python 2.5的兼容性
parse_qsl
从…urlparse
Connection.Default_Channel现在在连接失败后恢复连接时关闭。
Pika:Channel现在支持
connection.client
属性,以满足简单界面的要求。现在,如果限制低于以前的限制,则pools.set_Limit会引发异常。
Pools.set_Limit不再重置池。
1.3.1¶
- 发布日期:
2011-10-07英国夏令时下午03:00
- 发布依据:
问索勒姆
由于池重新初始化,上一版本在分叉之后中断。
生产者/消费者现在有一个
connection
属性,从而允许访问Connection
实例的。Pika:通道现在可以访问底层的
Connection
实例使用channel.connection.client
。这在以前是
Simple
类,现在还需要Consumer
和Producer
。Connection.Default_Channel现在在对象恢复时关闭。
添加kombu.clocks.LamportClock。
Compat.Entry_to_Queue已移至新模块
kombu.common
。
1.3.0¶
- 发布日期:
2011-10-05英国夏令时下午01:00
- 发布依据:
问索勒姆
现在可以使用URL指定代理连接信息
现在可以将代理主机名指定为URL,而不是以下格式:
transport://user:password@hostname:port/virtual_host
例如,默认代理表示为:
>>> Connection('amqp://guest:guest@localhost:5672//')
传输默认为AMQP,并且不是必需的。USER、PASSWORD、PORT和VIRTUAL_HOST也不是必需的,将默认为相应的传输缺省值。
备注
请注意,路径组件(VIRTUAL_HOST)始终以正斜杠开头。这对于区分虚拟主机‘’(空)和‘/’是必要的,这两个都是可接受的虚拟主机名。
‘/’的虚拟主机变为::
.. code-block:: text
AMQP://Guest:Guest@Localhost:5672//
并且‘’(空)的虚拟主机变为:
amqp://guest:guest@localhost:5672/
因此,路径组件中的前导斜杠是 always required 。
现在配备了默认的全球连接和生产商池。
使用连接参数从
Connection
:>>> from kombu import Connection, connections >>> connection = Connection('amqp://guest:guest@localhost//') >>> with connections[connection].acquire(block=True): ... # do something with connection
使用连接参数从
Connection
:>>> from kombu import Connection, producers >>> connection = Connection('amqp://guest:guest@localhost//') >>> with producers[connection].acquire(block=True): ... producer.publish({'hello': 'world'}, exchange='hello')
获取生产者还将从关联的池中获取
connections
,因此生产者的数量与连接的数量受到相同的限制。可以通过执行以下操作来更改每个连接实例100个连接的默认限制:
>>> from kombu import pools >>> pools.set_limit(10)
还可以通过执行以下操作强制关闭泳池:
>>> from kombu import pools >>> pool.reset()
SQS传输:在报告不稳定的SimpleDB连接导致错误后,现在默认情况下禁用使用SimpleDB的持久性。
Producer
现在可以用作上下文管理器。Producer.__exit__
现在可以正确地调用release
而不是接近。之前的行为会导致在使用
kombu.pools.ProducerPool
现在将所有异常从 import ctypes 匹配标准的Python UUID模块的行为,并避免在启用SELinux的系统上传递内存错误异常(问题#52+问题#53)
amqp
现在是amqplib
运输。kombu.syn.detect_environment
现在根据已安装的猴子补丁返回‘Default’、‘Eventlet’或‘GEvent’。序列化注册表具有新属性
type_to_name
因此,可以按内容类型查找序列化程序名称。将参数交换到
Producer.publish
现在可以成为一种Exchange
举个例子。compat.Publisher
现在支持channel
关键字参数。在某些传输上窃听邮件可能会导致
KeyError
被提出(问题57)。连接池:创建池时不再实例化连接,而是根据需要实例化连接。
测试现在通过了PyPy。
Connection.as_uri
现在,如果关键字参数include_password
已经设置好了。虚拟交通工具现在有一个默认设置
default_connection_params
属性。
1.2.1¶
- 发布日期:
英国夏令时2011-07-29中午12:52
- 发布依据:
问索勒姆
现在取决于amqplib>=1.0.0。
Redis:现在在以下位置自动删除AUTO_DELETE队列
basic_cancel
。serialization.unregister
已添加,以便可以删除不需要的Seralizers。修复了在SELinux上导入ctype时出现的内存错误(问题#52)。
Connection.autoretry
是一个版本的ensure
可与任意函数一起使用(即,它不需要实现revive
方法。用法示例:
channel = connection.channel() try: ret, channel = connection.autoretry(send_messages, channel=channel) finally: channel.close()
ConnectionPool.acquire
不再使用武力建立连接。将根据需要建立连接。
Connection.ensure
现在支持on_revive
重新建立连接时应用的回调。Consumer.consuming_from(queue)
如果消费者从queue
。Consumer.cancel_by_queue
未从中删除队列queues
。compat.ConsumerSet.add_queue_from_dict
现在如果出现以下情况,则自动声明队列auto_declare
准备好了。
1.2.0¶
- 发布日期:
英国夏令时2011-07-15中午12:00
- 发布依据:
问索勒姆
虚拟:修复了Channel.Close中的循环引用(问题#49)。
发布:现在可以使用关键字参数设置其他属性(问题#48)。
添加了queue.no_ack选项以控制各个队列的no_ack选项。
最近的版本打破了对pylibrabbitmq的支持。
SimpleQueue和SimpleBuffer现在可以用作上下文。
测试要求将PyYAML==3.09指定为3.10已删除的Python2.4支持
现在可以在Connection.info/.as_uri中正确报告缺省值
1.1.6¶
- 发布日期:
英国夏令时2011-06-13下午04:00
- 发布依据:
问索勒姆
Redis:修复了1.1.4中引入的问题,在该问题中,Redis连接失败可能会让消费者永远挂起。
SQS:现在通过使用SimpleDB存储路由表来支持扇出消息传递。
这可以通过设置 supports_fanout 运输选项:
>>> Connection(transport='SQS', ... transport_options={'supports_fanout': False})
SQS:现在可以在消息被确认时正确删除消息。
SQS:现在可以通过使用设置Amazon AWS区域
region
交通工具选项。Amqplib:现在使用 localhost 作为默认主机名,而不是引发错误。
1.1.5¶
- 发布日期:
英国夏令时2011-06-07 06:00
- 发布依据:
问索勒姆
修复了与redis-py 2.4.4的兼容性。
1.1.4¶
- 发布日期:
英国夏令时2011-06-07下午04:00
- 发布依据:
问索勒姆
Redis传输:现在需要redis-py版本2.4.4或更高版本。
添加了新的Amazon SQS传输。
用途:
>>> conn = Connection(transport='SQS', ... userid=aws_access_key_id, ... password=aws_secret_access_key)
环境变量
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
也受支持。Librabbitmq传输:修复默认凭据支持。
Amqplib传输:现在支持 login_method 用于SSL身份验证。
Connection
现在支持 login_method 关键字参数。默认 login_method 是
AMQPLAIN
。
1.1.3¶
- 发布日期:
2011年04月21日中部标准时间下午04:00
- 发布依据:
问索勒姆
Redis:从多个连接消费现在可以与Eventlet一起使用。
REDIS:现在可以在频道处于BRPOP/LISTEN模式时执行频道操作(问题35)。
此外,异步BRPOP现在在1秒后超时,这意味着从队列取消消费/从其他队列开始消费具有高达1秒的延迟(BRPOP不支持亚秒超时)。
虚拟:允许多次无错误地关闭频道对象。
Amqplib:
AttributeError
已添加到已知连接相关错误列表中 (Connection.connection_errors
)。Amqplib:现在转换
SSLError
超时错误至socket.timeout
(http://bugs.python.org/issue10272))确保在连接关闭时销毁循环引用。
1.1.2¶
- 发布日期:
中欧标准时间2011-04-06 04:00
- 发布依据:
问索勒姆
修复了消息可能丢失的严重问题。
如果消息大小超过特定的千字节数,则可能会发生此问题。
建议Redis运输机的所有用户都应升级到此版本,即使目前没有遇到任何问题。
1.1.1¶
- 发布日期:
中东部时间2011-04-05 03:51
- 发布依据:
问索勒姆
1.1.0开始使用
Queue.LifoQueue
它只在Python2.6+中可用(第33期)。我们现在配备了自己的LifoQueue。
1.1.0¶
- 发布日期:
中东部时间2011-04-05 01:05
- 发布依据:
问索勒姆
重要说明¶
虚拟传输:消息正文现在默认使用Base64编码(问题#27)。
这应该可以解决使用虚拟传输发送二进制数据的问题。
消息兼容性的处理方法是将
body_encoding
属性,因此旧版本发送的消息与此版本兼容。然而,如果您不使用Kombu直接访问消息,那么您必须遵守body_encoding
财产。如果您需要禁用Base64编码,则可以通过传输选项执行此操作:
Connection(transport='...', transport_options={'body_encoding': None})
For transport authors :
您不必更改定制传输中的任何内容,因为这是由基类自动处理的。
如果要使用其他编码器,可以通过将密钥添加到
Channel.codecs
。默认编码由Channel.body_encoding
属性。新的编解码器必须提供两种方法:
encode(data)
和decode(data)
。ConnectionPool/ChannelPool/资源:设置
limit=None
(或0)现在禁用池语义,并在每次获取或释放时建立和关闭资源。ConnectionPool/ChannelPool/Resource:现在使用后进先出队列,而不是以前的FIFO行为。
这意味着最后释放的资源将是下一个获得的资源。即,如果只有一个线程在使用该池,这意味着只有一个连接将被使用。
连接:克隆的连接未继承TRANSPORT_OPTIONS (
__copy__
)。Conrib/Requirements现在位于发行版的顶层目录中。
MongoDB:现在支持使用
userid
和password
争论到Connection
(第30期)。连接:默认身份验证凭据现在委派给各个传输。
这意味着
userid
和password
连接的参数不再是 guest/guest 默认情况下。Amqplib和Pika传送器仍将具有默认凭据。
Consumer.__exit__()
没有正确的签名(第32期)。频道对象现在有一个
channel_id
属性。- MongoDB:版本嗅探与开发版本决裂
僧侣(第29期)。
- 新环境变量
KOMBU_LOG_CONNECTION
现在将发出调试 记录与连接相关的操作的消息。
KOMBU_LOG_DEBUG
还将启用KOMBU_LOG_CONNECTION
。- 新环境变量
1.0.7¶
- 发布日期:
欧洲中部时间2011-03-28 05:45
- 发布依据:
问索勒姆
现在取决于anyjson 0.3.1
Cjson不再是推荐的json实现,如果使用,anyjson现在将发出弃用警告。
请注意,Pika后端仅适用于0.5.2版。
最新版本(0.9.x)极大地改变了API,目前还不兼容。
Message_to_python中的异常现在调用ON_DECODE_ERROR(问题24)。
Redis:不尊重Qos设置。
Redis:现在创建连接可确保连接已建立。
这意味着
Connection.ensure_connection
与Redis一起工作正常。Consumer_tag参数为
Queue.consume
不可能None
(第21期)。None值现在会自动转换为空字符串。空字符串将使服务器生成唯一的标记。
Connection现在支持
transport_options
争论。这可用于将其他参数传递给传输。
鼠兔:
drain_events
已提高socket.timeout
即使没有设置超时(问题8)。
1.0.6¶
- 发布日期:
2011年03月22日欧洲中部时间下午04:00
- 发布依据:
问索勒姆
这个
delivery_mode
别名(永久/临时)不会自动转换为整数,如果使用amqplib传输会导致崩溃。雷迪斯:雷迪斯
InvalidData
异常突然将名称更改为DataError
。这个
KOMBU_LOG_DEBUG
现在可以将环境变量设置为记录所有通道方法调用。添加了对以下环境变量的支持:
KOMBU_LOG_CHANNEL
将把通道包装在记录每次方法调用的对象中。KOMBU_LOG_DEBUG
两者都启用通道日志记录,并配置根记录器向标准错误发送消息。
Example Usage :
$ KOMBU_LOG_DEBUG=1 python >>> from kombu import Connection >>> conn = Connection() >>> channel = conn.channel() Start from server, version: 8.0, properties: {u'product': 'RabbitMQ',.............. } Open OK! known_hosts [] using channel_id: 1 Channel open >>> channel.queue_declare('myq', passive=True) [Kombu channel:1] queue_declare('myq', passive=True) (u'myq', 0, 1)
1.0.5¶
- 发布日期:
2011年03月17日欧洲中部时间下午04:00
- 发布依据:
问索勒姆
修复了创建虚拟通道时的内存泄漏。所有受影响的虚拟传输(redis、MongoDB、Memory、Django、SqlalChemy、CouchDB、Beanistk)。
虚拟传输:修复了确认消息时可能出现的争用情况。
如果您受此影响,则错误本身将显示为由OrderedDict实现引发的异常。 (
object no longer exists
)。MongoDB传输需要
findandmodify
命令仅在MongoDB 1.3+中可用,因此如果连接到不兼容的服务器版本,现在会引发异常。虚拟传输:
basic.cancel
不应尝试删除未知的消费者标签。
1.0.4¶
- 发布日期:
2011年02月28日欧洲中部时间下午04:00
- 发布依据:
问索勒姆
添加了Transport.Polling_Interval
由Django-Kombu使用,用于在队列中没有消息时增加两次选择之间的休眠时间。
Django-Kombu的用户应该升级到Django-Kombu v0.9.2。
1.0.3¶
- 发布日期:
欧洲中部时间2011-02-12 04:00
- 发布依据:
问索勒姆
ConnectionPool:如果amqplib连接关闭,则重新连接
添加
Queue.as_dict
+Exchange.as_dict
。版权标题更新为包括2011年。
1.0.2¶
- 发布日期:
2011年01月31日欧洲中部时间晚上10:45
- 发布依据:
问索勒姆
Amqplib:消息属性设置不正确。
Ghettoq后端名称现在会自动转换为新名称。
1.0.1¶
- 发布日期:
2011年01月28日欧洲中部时间下午12:00
- 发布依据:
问索勒姆
Redis:现在支持Linux(EPOLL)
1.0.0¶
- 发布日期:
2011年01月27日欧洲中部时间中午12:00
- 发布依据:
问索勒姆
初始版本
0.1.0¶
- 发布日期:
欧洲中部时间2010-07-22 04:20
- 发布依据:
问索勒姆
胡萝卜的初始叉子