2010-05-25 4 views
2

Я пытаюсь внедрить приложение Consumer/Producer в Grails после нескольких неудачных попыток реализации параллельных потоков. В основном я хочу хранить все события, поступающие от клиентов (через отдельные вызовы AJAX), в одну очередь , а затем обрабатывать такую ​​очередь линейным способом, как только будут добавлены новые события.Продюсер/потребитель в Грайле?

Это выглядит как Producer/Consumer проблемы: http://en.wikipedia.org/wiki/Producer-consumer_problem

Как я могу осуществить это в Grails (возможно, с помощью таймера или еще лучше, генерируя событие «очереди процесс»)?

В принципе, я бы хотел, чтобы singleton service ожидал новых событий в очереди и обрабатывал их линейно (даже если очередь загружается несколькими параллельными процессами).

Любые подсказки?

Cheers!

ответ

3

Вместо того, чтобы реализовывать все это самостоятельно, я бы рекомендовал использовать службу обмена сообщениями Java. Он точно описывает тип проблемы, о которой вы говорите. Кроме того, у Grails есть JMS-плагин.

ВС Docs на JMS: http://java.sun.com/developer/technicalArticles/Ecommerce/jms/index.html

Grails JMS Плагин: http://www.grails.org/JMS+Plugin

1

Я недавно был реализовать такой же системы и пошел с RabbitMQ для брокера сообщений, и использовали RabbitMQ plugin для Grails в интерфейс с ним.

Я выбрал RabbitMQ, потому что у него были функции, которые я искал (масштаб, скорость, надежность), и был построен на стандарте AMQP, то есть я мог бы написать своих продюсеров и потребителей на любом языке, который мне нужен, не беспокоясь.

Grails отлично работает как производитель, так и потребитель, и имеет то преимущество, что все еще может работать с полным доменом GORM вашего приложения.

Чтобы увеличить масштаб, либо производитель , либо потребительский конец очереди, все, что мне нужно сделать, это развернуть больше экземпляров графов и настроить подсчет потребительских потоков, чтобы он работал очень хорошо.

Смежные вопросы