可以在rabbitMq中表示这样的过程吗?

时间:2019-04-17 17:48:55

标签: php architecture rabbitmq

我的网络应用程序运行时间很长(创建Excel报告),需要在后台执行。

有关应用程序和环境的一些详细信息。

该应用程序由许多实例组成,每个实例都有单独的实例(具有自定义的业务逻辑),而所有内容都托管在我们的服务器上。产生Excel的功能是相同的。


我打算安装一台RabbitMq服务器。应用程序(发布者)的一部分将接受用户的所有报告选项,并将其放入消息中。某些后台工作(消费者)将使用它,生成报告并通过电子邮件发送。

但是,这种设计存在一个缺陷,例如,来自一个实例的用户将排队很多复杂的报告(价值约10分钟的工作),而来自另一个实例的用户将排队一个简单的报告(1-2个)分钟),他将不得不等到其他人结束。

每个应用程序实例可能有单独的队列,但是在那种情况下,我需要为每个实例创建一个使用者。鉴于有超过100个实例atm,这似乎不是可行的方法。

我在想,是否有可能检查所有可用队列(和使用者)并为没有一个队列的新使用者创建脚本。消费者和此类脚本的语言没有限制。

这听起来像可行的方法吗?如果没有,请提出建议。

谢谢

1 个答案:

答案 0 :(得分:1)

正如我对主题的正确理解,一切都位于一台服务器上-RabbitMQ,Web应用程序,每个客户端不同的实例以及Messenger的使用者。在那种情况下,我宁愿在每条消息(https://www.rabbitmq.com/tutorials/tutorial-five-python.html)上放置不同的主题,并介绍消费者优先级(https://www.rabbitmq.com/consumer-priority.html)。根据消息发布期间的选项,我将创建消息的主题和优先级的组合-发布者将了解每个客户端已发送的报告数,选定的选项,并确定优先级是高,低还是正常。 根据该数据提取消息的逻辑将在使用者中,因此当已有3个示例时,使用者将不会遇到繁重的话题。

根据队列中的消息总数(不准确的100%)以及先前的主题和优先级,您可以实施某种泄漏存储桶策略以控制资源-最多同时生成100个报告。 / p>

您可以考虑将ZeroMQ(http://zeromq.org)用于您的案例,因为它更简单并且代理解决方案更少,因此它可能比RabbitMQ更合适。