You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 🐰amqp-worker
amqp-worker 是一个基于 Python 的多线程 RabbitMQ 消费框架。它可以让你在消费消息时更加高效和稳定。
## 功能特点
- 批量消费:按批处理消息,提高消费效率。
- 自动重连:当 RabbitMQ 服务断开连接时amqp-worker 会自动重连,保证消费不中断。
- 自定义消费模式:消费函数中自由决定使用多线程和协程。
- 可配置的消息确认方式:支持自动确认和手动确认两种确认方式,根据你的消费需求进行配置。
- 可配置的异常处理:支持全局配置消息异常的消费模式,重入队列、重新插入、消费消息。
## 安装方式
你可以使用 pip 工具来安装 amqp-worker:
```
pip install amqp-worker
```
## 使用方法
首先,你需要在你的 Python 代码中引入 amqp_worker 模块:
```python
from amqpworker.app import App
```
然后,你需要实例化一个 App 对象而App对象依赖AMQPConnection对象
```python
from amqpworker.connections import AMQPConnection
amqp_conn = AMQPConnection(hostname='127.0.0.1', username='guest', password='guest', port=5672)
app = App(connections=[amqp_conn])
```
接下来,你需要定义消费函数:
```python
@app.amqp.consume(
['test'],
options=AMQPRouteOptions(bulk_size=1024 * 8, bulk_flush_interval=2)
)
def _handler(msgs: List[RabbitMQMessage]):
print(f"Recv {len(msgs)} {datetime.now().isoformat()}")
```
上面的代码中我们给消费函数一个装饰器,给出了消费的队列,每批消费的数量,值得注意的是,消费函数的参数类型为`List[RabbitMQMessage]`
最后,只需要调用 `run` 方法即可开始消费:
```python
app.run()
```
## 示例代码
下面是一个简单的示例代码,它会消费名为 `test` 的队列中的消息:
```python
from datetime import datetime
from typing import List
from amqpworker.app import App
from amqpworker.connections import AMQPConnection
from amqpworker.rabbitmq import RabbitMQMessage
from amqpworker.routes import AMQPRouteOptions
amqp_conn = AMQPConnection(hostname='127.0.0.1', username='guest', password='guest', port=5672)
app = App(connections=[amqp_conn])
@app.amqp.consume(
['test'],
options=AMQPRouteOptions(bulk_size=1024 * 8, bulk_flush_interval=2)
)
def _handler(msgs: List[RabbitMQMessage]):
print(f"Recv {len(msgs)} {datetime.now().isoformat()}")
app.run()
```
## 贡献者
- [@JimZhang](https://git.loom.run/zzl221000)
## 许可证
amqp-worker 使用 MIT 许可证。详情请参阅 LICENSE 文件。