快速为t3设置django rest框架微服务的样板
t3-core的Python项目详细描述
安装
设置virtualenv(可选)
python -m venv .venv source .venv/bin/activate # There is a bug in pip 9.x go ahead and upgrade to make sure that you're pip 10.x pip install --upgrade pip
安装
# Install from pypi pip install t3-core # Install in the `src` dir of your python environment pip install -e git+ssh://git@gitlab.t-3.com:t3-core/t3-core-python.git # Choose where the clone lives git clone git@gitlab.t-3.com:t3-core/t3-core-python.git pip install -e ./t3-python-core
测试和起绒
测试和覆盖报告
pytest
皮棉
pylama
T3活动
在t3 core中,我们有一个子模块,它是一个事件队列系统,用于以异步方式将微服务连接在一起,并具有内置的容错功能它使用rabbitmq作为消息总线来实现这一点。事件队列系统由2个主要部分组成,consumer和publisher。
顾名思义,使用者通过在收到由发布者发布的指定消息时调用回调来使用消息。单独运行的进程(通常称为workers)可以使用消息,而包括web进程在内的任何进程都可以发布消息。如果任何进程无法完成消息的消费,它将在系统中被重新请求,并被发送到其他消费者或存储,直到消费者再次可用。
在t3事件中。t3 events是通过设置两个关键环境变量T3_EVENTS和T3_EVENTS_AMQP_URL来配置的,第一个是关于是否使用事件的true或false布尔值,第二个是rabbit mq的连接字符串。这个env vars可以插入到任何系统中,只要不同的系统对这些env vars具有相同的值,它们就是同一个消息队列系统的一部分。主要有两类消费者和出版商,详情如下:
任务
任务使用者/发布者专用于消费或发布任务,根据定义,对于给定的任务,一次消费一个任务,这意味着,第一个可用的使用者将拿起任务并对其进行处理,然后列表中的下一个任务将转到下一个可用的使用者,依此类推下面是一个示例任务。
消费者:
fromt3.events.consumersimoprtTaskConsumerdefmessage_callback(payload):print(f'message callback task consumer: payload: {payload}')# Start consumertest=TaskConsumer()test.set_task_name('test_task')test.set_callback(message_callback)test.run()
Publisher:
fromt3.events.publishersimportTaskPublisher# Use publishertest=TaskPublisher()test.set_task_name('test_task')test.set_message('test message, could be in json too')test.run()
对于上面的示例,给定的示例任务名称是test_task,这对于连接它们的使用者和发布者是相同的由于这是一个TaskConsumer和一个TaskPublisher,如果您运行了多次Consumer和Publish,它将以循环方式与运行的Consumers进行处理,一次一个一旦处理了一条消息,系统就会转到下一条消息,以此类推。
主题
topic consumer/publisher致力于消费或发布topics,根据定义,这些主题将广播给给定的topic的所有订阅的consumers,这意味着,当发布一个主题时,注册此主题的所有消费者都将收到消息。下面是一个示例主题
消费者:
fromt3.events.consumersimportTopicConsumerdefmessage_callback(payload):print(f'message callback topic consumer: payload: {payload}')# Start consumertest=TopicConsumer()test.set_topic_name('test_topic')test.set_callback(message_callback)test.run()
publisher:
fromt3.events.publishersimportTopicPublisherimportjson# Use publishertest=TopicPublisher()test.set_topic_name('test_topic')test.set_message(json.dumps({'json':'object'}))test.run()
对于上面的示例,给定的主题名是test_topic,这对于消费者和发布者是相同的,它们将它们连接在一起。由于这是一个TopicConsumer和一个TopicPublisher,如果您运行的是1consumer和publish,则所有运行的consumers都将立即处理它。
运行T3事件
T3事件由Consumers和Publishers组成
使用者必须在单独的进程中运行,因为它们独立于系统中正在进行的任何其他操作,对于本地开发,您可以运行python name_of_consumer_file.py,但是在生产环境中,出于容错目的,请使用nohup python name_of_consumer_file.py。
另一方面,发布器可以作为进程的一部分运行,因为它们的主要工作是将事件发布到消息队列系统使用publisher,您可以在上面的示例中运行# Use publisher下面的行,前提是存在2个必需的环境变量。