使solr消耗来自AMQ(rabbitMQ或ActiveMQ)的查询

时间:2011-11-15 08:52:12

标签: solr amqp

我想让我的应用程序使用AMQ队列(RabbitMQ或ActiveMQ)与Apache Solr服务器进行交互。因此,我想问一下是否有这种实现,如果没有,我在哪里可以找到如何实现这种连接器的信息。

4 个答案:

答案 0 :(得分:2)

我会编写一个执行以下操作的“代理”应用程序:

  1. 从队列中获取消息
  2. 通过HTTP(这是其标准接口)向Solr发送相应的查询
  3. 使用查询结果将消息放入队列。
  4. 应该很简单......

答案 1 :(得分:2)

您的集成案例可能适合使用Apache Camel。 Camel允许您创建将不同系统链接在一起的路由 - 在本例中为Solr(甚至直接为Lucene)和AMQP代理。

例如,您可能希望通过直接点击Lucene并利用Camel的Lucene组件(请参阅http://camel.apache.org/lucene.html)并创建一条路线来获得额外的效率,例如:

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

在这两行中,将从AMQP队列中检索消息,由Lucene处理,然后回复。您还可以通过利用Camel的HTTP组件继续使用Solr的REST API,例如:

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

在该路由中,您将从AMQP队列获取消息,将其编组为JSON或XML,将其发送到Solr URI,然后将响应解组回到对象中。

没有任何预先烹饪可以为您提供开箱即用的功能,但您可以利用多个集成框架来帮助您将系统连接在一起。

答案 2 :(得分:1)

我创建了一个数据源,使数据导入处理程序能够从提取的JSON消息中构建文档。它被称为AMQPDataSource,但它目前仅适用于RabbitMQ,仅适用于JSON格式的消息。但是,我希望它与其他经纪人合作,因此在名称中使用AMQP。

使用它类似于在数据导入配置中使用JDBC数据源。

AMQP数据源接受几个通过数据导入配置传递给它的参数。他们是:

  1. AMQPHost - > AMQP主机的服务器
  2. exchangeName - > AMQP交易所的名称。如果它不存在, 它将被创建。
  3. queueName - > AMQP队列的名称。如果它 它不存在,它将被创建。
  4. nextDeliveryTimeoutMS - >等待邮件传递的最长时间。
  5. 当您使用此数据源运行dataimport时,dataimport将持续提取消息,直到超出nextDeliveryTimeoutMS。

    我为它创建了一个JIRA问题并上传了一个补丁。 JIRA问题是SOLR-3588。

    请随时查看。

答案 3 :(得分:0)

我实际上只是将一个从AMQP队列读取的solr插件放到github上。 https://github.com/ranoble/SolrMQ

它基本上充当使用者并使用现有的更新插件来导入和解析更新。

可能没有100%生产就绪,但我通过100000个单独的更新,它处理它们都没有问题。希望得到一些反馈。