我在Django中有一个应用程序,需要在各种用例中向用户发送大量电子邮件.出于显而易见的原因,我不想在应用程序中同步处理此问题.
有没有人建议消息排队服务器与Python完美集成,或者他们已经在Django项目上使用过?我的堆栈的其余部分是Apache,mod_python,MySQL.
有谁知道是否有办法从客户端应用程序检查RabbitMQ队列中的消息数量?
我正在使用.NET客户端库.
无论我读了多少关于这两种模式,我都看不出差异.
人们使用Rails应用程序的消息队列是什么,决定选择它的驱动力是什么.最新的Twitter宣传其内部队列Starling是否会影响任何现有的设计决策.
我正在开发一个需要一个消息队列来处理一些后台任务的应用程序,我没有做太多这样的事情,我过去看过的大部分内容都是关于Starling和Workling,说实话应用程序不是很大,这个解决方案可能就足够了,但我很乐意获得集成最佳解决方案的经验,因为我确信我会在某个时候将其集成到更大的应用程序中.
你会为Rails应用建议什么消息队列?
编辑:感谢您的建议,我将在本周末看看他们中的一些.
再次编辑:我已经环顾四周,有点不知所措.然而,我将把RabbitMQ与Workling集成到我正在构建的应用程序中,然后如果我需要一些关于快速队列的知识,那么我将拥有它并知道它是否符合我的需求.
编辑:发现越来越多的DJ适合我,如果我在网站上"长大",我会说Resque是我要去的地方.
编辑:(2014年12月)所以自从我问这个问题已经有很长一段时间了,但我看到它仍然得到一些观点或一些投票,所以当我选择背景工作者时,我想我会更新它的方法.
在我看来,目前在Ruby中运行后台作业的最佳方法是使用Sidekiq.很多人真的称赞Sidekiq是因为它是线程化的工作者,而不是每个工人的处理能够使用比Reski更少的内存,而Resque就是我在Sidekiq之前使用的.这很好,但对我来说,这不是杀手级的功能.通过使用Sidetiq与Sidekiq,作业调度是如此微不足道,我切换,从来没有把目光从它背面,我已经使用并取得了Sidekiq一件轻而易举的使用作业迄今为止最容易调度.
我一直在为我的公司评估消息传递技术,但我对几个术语之间的概念差异感到非常困惑:
发布/订阅与多播与扇出 我正在使用以下定义:
这些定义是对的吗?或者Pub/Sub模式和组播,直接,扇出等方式来实现模式?
我正在尝试将开箱即用的RabbitMQ定义应用到我们的架构中,但我现在只是试图为我们的应用程序编写规范.
请有人可以告诉我,我是否正确?
我一直在学习apache kafka一个月了.然而,我现在陷入了困境.我的用例是,我有两个或更多的消费者进程在不同的机器上运行.我运行了一些测试,其中我在kafka服务器上发布了10,000条消息.然后在处理这些消息时,我杀死了一个消费者进程并重新启动它.消费者在文件中编写处理过的消息.消费完成后,文件显示超过10k条消息.所以有些消息是重复的.
在消费者流程中,我已禁用自动提交.消费者手动批量提交偏移量.因此,例如,如果将100条消息写入文件,则消费者提交偏移量.当单个消费者进程正在运行并且以这种方式避免崩溃并恢复重复时.但是当多个消费者正在运行并且其中一个消失并且恢复时,它会将重复的消息写入文件.
是否有任何有效的策略来避免这些重复的消息?
我有一个python应用程序,我想在后台开始做更多工作,以便它变得更加繁忙,因为它变得更加繁忙.在过去,我使用Celery来完成正常的后台任务,这一点运作良好.
这个应用程序和我过去做过的其他应用程序之间的唯一区别是我需要保证这些消息得到处理,它们不会丢失.
对于这个应用程序,我不太关心我的消息队列的速度,我首先需要可靠性和耐用性以及formost.为了安全起见,我希望有两个队列服务器,两个都在不同的数据中心,以防出现问题,一个是另一个的备份.
看看Celery看起来它支持一堆不同的后端,有些后端具有更多功能.两个最流行的看起来像redis和RabbitMQ所以我花了一些时间来进一步检查它们.
RabbitMQ: 支持持久队列和群集,但是它们今天进行群集的方式的问题是,如果丢失群集中的节点,则该节点中的所有消息都将不可用,直到您将该节点重新联机为止.它不会复制群集中不同节点之间的消息,只是复制有关消息的元数据,然后返回到原始节点以获取消息,如果节点未运行,则为SOL Not理想.
他们建议解决这个问题的方法是设置第二台服务器并使用DRBD复制文件系统,然后运行pacemaker之类的东西,以便在需要时将客户端切换到备份服务器.这似乎很复杂,不确定是否有更好的方法.谁知道更好的方法?
Redis: 支持一个读取从站,这将允许我在紧急情况下备份,但它不支持主 - 主设置,我不确定它是否处理主站和从站之间的主动故障转移.它没有RabbitMQ那样的功能,但看起来更容易设置和维护.
问题:
设置芹菜的最佳方法是什么,以保证消息处理.
有没有人这样做过?如果是这样,会分享您的所作所为吗?
我正在CakePHP中构建一个网站,该网站处理通过XML-RPC API和Web前端上传的文件.文件需要由ClamAV扫描,需要生成缩略图等.所有资源密集型工作需要一些时间,用户不必等待.所以,我正在研究PHP的异步处理,特别是CakePHP.
我遇到了CakePHP 的MultiTask插件看起来很有希望.我还遇到了各种消息队列实现,例如dropr和beanstalkd.当然,我还需要某种后台进程,可能是使用某种Cake Shell实现的.我看到MultiTask使用PHP_Fork来实现多线程PHP守护进程.
我需要一些关于如何以最佳方式将所有这些部分组合在一起的建议.
我目前的计划是使用MultiTask插件或编辑它以使用beanstald而不是它自己的MySQL表实现.队列中的作业可以简单地由任务名称和参数数组组成.PHP守护程序将监视传入的作业并将其传递给其中一个子线程.只需用给定的参数执行CakePHP任务即可.
对此有何意见,建议,评论,陷阱或火焰?
我一直在研究各种通信技术/体系结构/模式/实现(阅读:流行语),包括Web服务(WCF,Axis2),ESB,SOA,并希望了解有关消息传递的JMS.
从概念上讲,JMS听起来很简单.我的看法是它是一个中间代理,管理来自发布者的消息并将它们路由到适当的订阅者.这是通过在发布消息时对消息进行排队,并在收到消息时将它们出列来完成的.
问题1:我对JMS的基本理解是否正确?
在阅读有关技术时,让我烦恼的一件事就是当某个特征(有意或无意)挥手时.
根据我的基本理解,必须运行JMS提供程序才能发送或接收消息.我对发布的假设是JMS提供程序只是等待消息发布,然后将其存储在队列中(内存或数据库支持,具体取决于实现).但是,我不太确定接收是如何工作的.
问题2:如果没有消息可以接收(通常)阻止?
问题2b:如果是这样,阻塞是如何实现的?客户端是否不断轮询消息?在发布消息之前,服务器是否只是不响应(如何在没有超时的情况下工作?)提供者是否会向接收者发起呼叫?
问题2c:如果没有,如何确保及时收到消息,而不影响性能?
基本描述似乎倾向于单个JMS提供程序,以确保集中管理消息而不会丢失.我可以看到缩放是一个问题.
问题3:JMS如何扩展?
在扩展时,我可以看到存在复杂性以确保将单个消息传递给所有适当的订户,而不管哪个物理服务器接收到该消息.
问题3b:JMS实施如何确保在规模化环境中可靠交付?
请注意,虽然这些问题与JMS有关,但它们可能适用于任何消息传递基础结构.我欢迎特定于JMS的答案以及那些更通用或甚至特定于其他技术的答案.
当添加或关闭新的消费者/ brorker时,Kafka会触发重新平衡操作.Kafka Rebalancing是一种阻止操作吗?在重新平衡操作正在进行时,Kafka消费者是否受阻?
message-queue producer-consumer apache-kafka kafka-consumer-api
message-queue ×10
rabbitmq ×3
amqp ×2
apache-kafka ×2
java ×2
messaging ×2
.net ×1
asynchronous ×1
cakephp ×1
celery ×1
django ×1
integration ×1
jms ×1
php ×1
python ×1
redis ×1
ruby ×1