ReactiveMongo 0.11.9 выдает, что основной узел недоступен при подключении к mongodb 3.0.4

У меня просто есть запрос на вставку реактивного монго (версия: 0.11.9), как показано ниже,

class MongoInsertQuery extends Query {
  val DbName = "events-db"
  val CollectionName = "EventStream"

  val driver = new MongoDriver
  val connection = driver.connection(List("127.0.0.1:27018"))

    def insert() = {
        val db = connection(DbName)
        val collection: BSONCollection = db(CollectionName)
        val futureResult: Future[WriteResult] = collection.insert(BSONDocument("type" -> "Product_Received"))
        futureResult onComplete {
          case Success(s) => println("Success " + s)
          case Failure(e) => {
            println("error " + e.getMessage)
            e.printStackTrace()
          }
        }
      }
}

Не так важно, но контроллер REST Scala Play вызовет этот метод

  def sayBeard = Action { request =>
    new MongoInsertQuery().insert()
    Ok(Json.obj("message" -> "TODO respond writeResult"))
  }

Когда я вызываю конечную точку,

$ curl -XGET localhost:9000/sayBeard
{"message":"TODO respond writeResult"}

Он успешно вставляется в mongodb 2.4.14,

precise64(mongod-2.4.14) events-db> db.EventStream.find({})
{
  "_id": ObjectId("5683337120906c127504eb79"),
  "type": "Product_Received"
}

Но я получаю ошибку readAndDeserialize с Failure на future onComplete.

[info] - play.api.Play - Application started (Dev)
error 83
java.lang.ArrayIndexOutOfBoundsException: 83
    at org.jboss.netty.buffer.LittleEndianHeapChannelBuffer.getInt(LittleEndianHeapChannelBuffer.java:69)
    at reactivemongo.api.SerializationPack$class.readAndDeserialize(serializationpack.scala:31)
    at reactivemongo.api.BSONSerializationPack$.readAndDeserialize(serializationpack.scala:41)
    at reactivemongo.api.collections.GenericCollection$$anonfun$insert$1$$anonfun$apply$12.apply(genericcollection.scala:279)
    at reactivemongo.api.collections.GenericCollection$$anonfun$insert$1$$anonfun$apply$12.apply(genericcollection.scala:279)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:237)
    at scala.util.Try$.apply(Try.scala:192)
    at scala.util.Success.map(Try.scala:237)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

Мое намерение здесь состоит в том, чтобы прочитать WriteResult (N, message) в writeResult после вставки в коллекцию.

С mongo 3.0.6 он даже не смог найти mongodb.

23:02:02.172 [ForkJoinPool-6-worker-9] ERROR reactivemongo.api.Failover2 - Got an error, no more attempts to do. Completing with a failure...
reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$: MongoError['No primary node is available!']
    at reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$.<clinit>(actors.scala) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at reactivemongo.core.actors.MongoDBSystem$$anonfun$reactivemongo$core$actors$MongoDBSystem$$pickChannel$4.apply(actors.scala:681) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at reactivemongo.core.actors.MongoDBSystem$$anonfun$reactivemongo$core$actors$MongoDBSystem$$pickChannel$4.apply(actors.scala:681) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at scala.Option.getOrElse(Option.scala:121) ~[scala-library-2.11.7.jar:?]
    at reactivemongo.core.actors.MongoDBSystem$class.reactivemongo$core$actors$MongoDBSystem$$pickChannel(actors.scala:681) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at reactivemongo.core.actors.MongoDBSystem$$anonfun$4.applyOrElse(actors.scala:335) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:170) ~[scala-library-2.11.7.jar:?]
    at akka.actor.Actor$class.aroundReceive(Actor.scala:467) ~[akka-actor_2.11-2.3.13.jar:?]
    at reactivemongo.core.actors.LegacyDBSystem.aroundReceive(actors.scala:796) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) ~[akka-actor_2.11-2.3.13.jar:?]
    at akka.actor.ActorCell.invoke(ActorCell.scala:487) ~[akka-actor_2.11-2.3.13.jar:?]
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) ~[akka-actor_2.11-2.3.13.jar:?]
    at akka.dispatch.Mailbox.run(Mailbox.scala:220) ~[akka-actor_2.11-2.3.13.jar:?]
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) ~[akka-actor_2.11-2.3.13.jar:?]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.7.jar:?]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.7.jar:?]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.7.jar:?]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.7.jar:?]

Хотя я вижу журнал подключения на монго,

2015-12-30T23:21:57.688-0500 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51663 #11 (11 connections now open)

Ссылка

http://reactivemongo.org/releases/0.11/documentation/tutorial/write-documents.html

https://groups.google.com/forum/#!topic/reactivemongo/0jxS1cgXjP8


person prayagupd    schedule 30.12.2015    source источник
comment
Сначала вы просматриваете документацию версии 0.10 при использовании 0.11.9. Если вы посмотрите документ 0.11, вы увидите, что MongoDB ‹ 2.6 не дольше поддерживается.   -  person cchantep    schedule 30.12.2015
comment
@cchantep Да, я прочитал вас в выпуске github (github.com/ReactiveMongo/ReactiveMongo/ Issues/), похоже, проблема с версией. Но не удалось заставить его работать с mongo 3.0.7, так как я получаю reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$: MongoError['No primary node is available!']. Кто-то предлагает FailOverStrategy здесь, в группе Google (reactivemongo.org/releases/0.10/ documentation/advanced-topics/) , но я понятия не имею, в чем проблема. Я увижу.   -  person prayagupd    schedule 31.12.2015
comment
Прохладный !!! Исправлена ​​опечатка в номере порта. Спасибо   -  person prayagupd    schedule 31.12.2015


Ответы (1)


Итак, дело в том, что reactivemongo 0.11.4 поддерживает mongodb 3.0+. И тогда мне пришлось обновить хост mongodb.

  val driver = new MongoDriver
  val connection = driver.connection(List("127.0.0.1:27017"))

Читать

java.lang.ArrayIndexOutOfBoundsException при обновлении с mongo 2.4.12 #394

person prayagupd    schedule 31.12.2015