在尝试实现并发线程几次失败后,我正在尝试在Grails中实现一个Consumer / Producer应用程序。 基本上我想将来自客户端的所有事件(通过单独的AJAX调用)存储在单个队列中,然后在添加新事件后立即以线性方式处理这样的队列。
这看起来像生产者/消费者问题: http://en.wikipedia.org/wiki/Producer-consumer_problem
我如何在Grails中实现这一点(可能通过生成事件'进程队列'来使用计时器甚至更好)?
基本上我想要一个单件服务等待队列中的新事件并线性处理它们(即使队列是由多个并发进程加载的)。
任何提示?
干杯!
答案 0 :(得分:3)
我建议您使用Java Messaging Service,而不是自己实现它。它可以处理您正在讨论的问题类型。此外,Grails有一个JMS插件。
JMS上的Sun Docs:http://java.sun.com/developer/technicalArticles/Ecommerce/jms/index.html
Grails JMS插件:http://www.grails.org/JMS+Plugin
答案 1 :(得分:1)
我最近不得不实现相同类型的系统,并使用RabbitMQ用于消息传递代理,并使用RabbitMQ plugin用于Grails与其进行交互。
我之所以选择RabbitMQ,是因为它具有我所寻求的功能(规模,速度,可靠性),并且建立在AMQP标准之上,这意味着我可以让我的生产者和消费者用我需要的任何语言编写而不用担心。
Grails作为生产者和消费者都非常有效,并且具有仍然能够使用应用程序的完整GORM域的优势。
要扩展队列的生产者或消费者端,我所要做的就是调整更多的grails实例并调整消费者线程数,这样它的效果非常好。