Заставьте solr потреблять запросы из AMQ (rabbitMQ или ActiveMQ) - PullRequest
1 голос
/ 15 ноября 2011

Я бы хотел, чтобы мое приложение взаимодействовало с сервером Apache Solr с помощью очереди AMQ (RabbitMQ или ActiveMQ). Поэтому я хотел бы спросить, есть ли какая-либо реализация такого рода, если нет, где я могу найти информацию о том, как реализовать такой разъем.

Ответы [ 4 ]

2 голосов
/ 21 ноября 2011

Ваш пример интеграции может подойти для использования Apache Camel. Camel позволяет вам создавать маршруты, которые связывают разные системы - в данном случае Solr (или даже Lucene напрямую) и брокер AMQP.

Например, вы можете получить дополнительную эффективность, напрямую ударяя по Lucene, используя компонент Lucene Camel (см. http://camel.apache.org/lucene.html) и создавая маршрут, такой как:

from: amqp:exchange:queue:routingKey
to: lucene:searcherName:query

Только в этих двух строках сообщение будет извлечено из очереди AMQP, обработано Lucene и затем получено ответ. Вы также можете продолжить использовать REST API от Solr, используя HTTP-компонент Camel, например:

from: amqp:exchange:queue:routingKey
to: jaxb:marshal
to: http://solr.server/api/uri
to: jaxb:marshal

На этом маршруте вы должны получить сообщение из очереди AMQP, упаковать его как JSON или XML, отправить его в URI Solr и затем отменить отправку ответа обратно в объект.

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

2 голосов
/ 15 ноября 2011

Я бы написал 'прокси' приложение, которое выполняет следующее:

  1. Получить сообщение из очереди
  2. Отправить соответствующий запрос в Solr через HTTP (который является его стандартным интерфейсом)
  3. Поместить сообщение в очередь с результатами запроса.

Должно быть довольно просто ...

1 голос
/ 24 июля 2012

Я создал источник данных, чтобы обработчик импорта данных мог создавать документы из извлеченных сообщений JSON.Он называется AMQPDataSource, однако в настоящее время он работает только с RabbitMQ и только с сообщениями в формате JSON.Но я хочу, чтобы он работал с другими брокерами, поэтому использование имени AMQP.

Использование его аналогично использованию источника данных JDBC в конфигурации импорта данных.

AMQPИсточник данных принимает несколько параметров, которые передаются ему через конфигурацию импорта данных.Это:

  1. AMQPHost -> сервер хоста AMQP
  2. exchangeName -> имя обмена AMQP.Если он не существует, он будет создан.
  3. queueName -> имя очереди AMQP.Если он не существует, он будет создан.
  4. nextDeliveryTimeoutMS -> максимальное количество времени ожидания доставки сообщения.

Когда вы запускаете импорт данных с использованием этого источника данных, dataimport будет непрерывно получать сообщения, пока не будет превышен nextDeliveryTimeoutMS.

Я создал для нее проблему JIRA и загрузил патч.Проблема JIRA - SOLR-3588.

Пожалуйста, не стесняйтесь проверить.

0 голосов
/ 08 марта 2012

Я на самом деле только что поместил плагин solr, который читает из очереди AMQP на github.https://github.com/ranoble/SolrMQ

По сути, он действует как потребитель и использует существующий плагин обновлений для импорта и анализа обновления.

Вероятно, не на 100% готово к производству, но я на 100000 отдельных обновлений и онсправился со всеми без проблем.Надеемся получить отзывы об этом.

...