【问题标题】:Connect my code with elasticsearch将我的代码与 elasticsearch 连接
【发布时间】:2014-06-07 05:51:52
【问题描述】:

我在一台机器上安装了一个 elasticsearch 服务器:

这是配置的一部分:

transport: {
  bound_address: inet[/192.168.1.42:9300]
  publish_address: inet[/192.168.1.42:9300]
}
http: {
  bound_address: inet[/192.168.1.42:9200]
  publish_address: inet[/192.168.1.42:9200]
  max_content_length_in_bytes: 104857600
} 

我尝试从带有 elasticsearch java 库的 Scala 程序连接到该服务器。 这是使用 nodeBuilder 连接到服务器的代码:

val builder:Node = nodeBuilder()
  .client(true)
  .local(false)
  .loadConfigSettings(false)
  .clusterName("elasticsearch")
  .settings(
      ImmutableSettings.settingsBuilder()
      //.put("network.bind_host", "192.168.1.42")
  .put("network.host", "192.168.1.42")
      .put("transport.tcp.port",9300)
      .put("http.port",9200)
      .build()
).node()

val client:Client = builder.client()

但收到此异常:

java.lang.ExceptionInInitializerError
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
        at actors.DaasySocketActor$$anonfun$receive$1.applyOrElse(DaasySocketActor.scala:25)
        at akka.actor.ActorCell.invoke(ActorCell.scala:487)
        at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
        at actors.DaasySocketActor.aroundReceive(DaasySocketActor.scala:17)
        at akka.dispatch.Mailbox.run(Mailbox.scala:220)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
        at akka.actor.ActorCell.invoke(ActorCell.scala:487)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at akka.dispatch.Mailbox.run(Mailbox.scala:220)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
Caused by: org.elasticsearch.transport.BindTransportException: Failed to bind to [9300]
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:389)    
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
        at org.elasticsearch.transport.TransportService.doStart(TransportService.java:91)
Caused by: org.elasticsearch.transport.BindTransportException: Failed to bind to [9300]
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
        at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:389)
        at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:231)
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
        at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:166)
        at org.elasticsearch.transport.TransportService.doStart(TransportService.java:91)
        at lib.int_elasticsearch$.<init>(int_elasticsearch.scala:55)
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
        at lib.int_elasticsearch$.<clinit>(int_elasticsearch.scala)
        at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:231)
        ... 12 more
        at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:166)
Caused by: org.elasticsearch.common.netty.channel.ChannelException: Failed to bind to: /192.168.1.42:9300

如果我尝试连接此代码效果很好:

val client:Client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress("192.168.1.42", 9300))

但我想连接节点客户端而不是 TransportClient。

错误是什么? 非常感谢

【问题讨论】:

    标签: scala elasticsearch


    【解决方案1】:

    从节点客户端剥离主机名和端口。节点客户端本身就是一个节点,因此将主机名/端口设置为另一个节点是您发生冲突的原因(表现为绑定异常)。

    val builder:Node = nodeBuilder()
      .client(true)
      .local(false)
      .loadConfigSettings(false)
      .clusterName("elasticsearch")
      .node()
    
    val client:Client = builder.client()
    

    一个节点加入集群。传输客户端只是连接到一个节点。

    【讨论】:

    • 好的,但是我的代码和elasticsearch不在同一台服务器上,我的代码怎么知道连接elasticsearch的ip?谢谢
    猜你喜欢
    • 2015-10-26
    • 2017-03-09
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    相关资源
    最近更新 更多