备份/还原rabbitmq队列
rabbit_droppings的Python项目详细描述
这是一个用于保存和加载rabbitmq的python库和实用程序 与磁盘之间的消息。
为什么?
- 程序无法将消息发布到rabbitmq,但不希望 失去信息。使用这个库,程序可以保存 向文件发送消息。后来,在修复问题后,一个人可以使用 此包中用于发布消息的实用程序。
- 消费者有一个bug,消息堆积在队列中。你 修正了这个错误,你的测试似乎表明消费者会 现在工作,但你需要一些保险。在此使用程序 包,您可以将队列备份到文件。如果程序 不正确地处理消息,您可以使用 从文件还原队列的包。
- 您要编辑队列中的消息。您可以将队列转储到 文件,使用文本编辑器或一次性程序更改文件,以及 然后将消息写回队列。
为什么不呢?
这个图书馆是全新的,没有经过战斗测试。继续 小心。
备份格式
队列是从包含json的文本文件中备份和还原的。每个 文件中的行是一个json字典,其结构如下:
{ "body": "This is a test", "delivery_info": { "delivery_tag": 1 }, "properties": { "app_id": null, "cluster_id": null, "content_encoding": null, "content_type": "text/plain", "correlation_id": null, "delivery_mode": 2, "expiration": null, "headers": { "client_id": null, "host_ip": "10.0.0.15", "host_name": "treebeard", "library_id": "olio_msg (Python) 1.9.0", "metadata_version": "1.0.0", "program_name": "olio_msg_send_test_messages", "version": "1.0.0" }, "message_id": "1df3eb23ffeb476b8355d87b475eb627", "priority": null, "reply_to": null, "timestamp": 1434644774, "type": "test", "user_id": null } }
这一行打印得很漂亮,但实际上只有一行:
{"body": "This is a test", "delivery_info": {...}, "properties: {...}}
使用命令行实用程序
备份队列
rabbit_droppings --host localhost --queue jobs \ --file /path/to/save/file --dump
备份和清除队列
rabbit_droppings --host localhost --queue jobs \ --file /path/to/save/file --purge
恢复队列
rabbit_droppings --host localhost --queue jobs \ --file /path/to/save/file --restore
使用Pika库保存消息
如果有一个程序使用pika库将消息发布到 rabbitmq服务器,下面是如何保存 发布时间:
首先,导入库:
import rabbit_droppings
如果您有一个程序需要保存无法保存的消息 使用pika库发布,它应该创建 rabbit_droppings.writer(可能在构造函数中):
file = open('/path/to/my/file', 'a') self._rd_writer = rabbit_droppings.Writer(file)
当您发布一条消息并且发生pika异常时,保存 消息:
body = "Message body" properties = pika.spec.BasicProperties( content_type='text/plain' ) try: channel.basic_publish(exchange='', routing_key='some_queue_name', properties=properties, body=body) except (pika.exceptions.AMQPError, pika.exceptions.ChannelError) as e: pika_message = rabbit_droppings.PikaMessage(body, properties=properties) self._rd_writer.write(pika_message)
版本控制
这个库实践Semantic Versioning。
这个库当前在alpha中;它的版本看起来像“0.1.0”, “0.2.0”等。α版本没有任何保证:任何版本 bump可以是bug修复、向后兼容api的任意组合 更改或中断API更改。
当库变得稳定时,它的版本号将被调到 “1.0.0”。语义版本控制保证了稳定版本:
- 修补程序级别的版本凹凸(例如“1.0.0”到“1.0.1”)不会更改 公共api。
- 小级别的版本凹凸(例如“1.0.0”到“1.1.0”)会更改 以向后兼容的方式公开api。
- 主版本凹凸(例如“1.0.0”到“2.0.0”)会更改 公共api在某种程度上是不向后兼容的。
python版本
已知可用于python版本:
- 2.6.9
- 2.7.9
开发
运行测试需要在本地安装rabbitmq服务器。这个 已知这些rabbitmq版本通过了测试:
- 3.4.1
运行测试:
./setup.py test