快速为t3设置django rest框架微服务的样板

t3-core的Python项目详细描述


pipeline statuscoverage reportPyPI version

安装

设置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个主要部分组成,consumerpublisher

顾名思义,使用者通过在收到由发布者发布的指定消息时调用回调来使用消息。单独运行的进程(通常称为workers)可以使用消息,而包括web进程在内的任何进程都可以发布消息。如果任何进程无法完成消息的消费,它将在系统中被重新请求,并被发送到其他消费者或存储,直到消费者再次可用。

t3事件中t3 events是通过设置两个关键环境变量T3_EVENTST3_EVENTS_AMQP_URL来配置的,第一个是关于是否使用事件的truefalse布尔值,第二个是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,如果您运行了多次ConsumerPublish,它将以循环方式与运行的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,如果您运行的是1consumerpublish,则所有运行的consumers都将立即处理它。

运行T3事件

T3事件由ConsumersPublishers组成

使用者必须在单独的进程中运行,因为它们独立于系统中正在进行的任何其他操作,对于本地开发,您可以运行python name_of_consumer_file.py,但是在生产环境中,出于容错目的,请使用nohup python name_of_consumer_file.py

另一方面,发布器可以作为进程的一部分运行,因为它们的主要工作是将事件发布到消息队列系统使用publisher,您可以在上面的示例中运行# Use publisher下面的行,前提是存在2个必需的环境变量。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javajexcel包装文本问题   EclipseJavaEnum缩进超过左括号。如何让它看起来更正常?   java有办法包含Tomcat 6 catalina。out和localhost。在网络应用的日志文件中记录内容?   java如何永久性地阻止JavaFX代码在eclipse中被突出显示为错误?   如何在java中优化两个for循环(for循环中的for循环)   java如何在我的windows机器上从jar文件创建mac osx的可执行文件   使用记忆化/动态规划的Java组合学   Java中的游荡对象垃圾收集   java为什么我在JSP和JDBC和MySQL中遇到连接失败错误   java轮询Pod的就绪状态   如何创建电子邮件并将其发送到Java中的特定地址?   java如何修复Dagger 2错误“。。。无法提供[…]”?   java Android单选按钮看起来太轻   Android Studio:开发在应用程序之间共享的通用java库