关于amqp:Make solr使用来自AMQ(rabbitMQ或ActiveMQ)的查询

Make solr consume queries from AMQ (rabbitMQ or ActiveMQ)

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


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

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

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

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

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

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

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


我要编写一个执行以下任务的"代理"应用程序:

  • 从队列中获取消息
  • 通过HTTP(其标准接口)将相应的查询发送到Solr
  • 将消息与查询结果一起放入队列。
  • 应该很简单...


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

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

    AMQP数据源采用几个参数,这些参数通过数据导入配置传递给它。它们是:

  • AMQPHost-> AMQP主机的服务器
  • exchangeName-> AMQP交换的名称。如果不存在
    它将被创建。
  • queueName-> AMQP队列的名称。如果它
    不存在,它将被创建。
  • nextDeliveryTimeoutMS->等待消息传递的最长时间。
  • 使用此数据源运行数据导入时,数据导入将连续提取消息,直到超过nextDeliveryTimeoutMS。

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

    请随时查看。


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

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

    可能不是100%准备生产,但我通过100000个单独的更新进行了处理,因此所有这些都没有问题。希望得到一些反馈。