Tinkoff / invest-openapi-java-sdk

Apache License 2.0
167 stars 46 forks source link

Некорректное поведение паблишера #106

Closed a14e closed 3 years ago

a14e commented 4 years ago

Добрый день! простая подписка на паблишер приводит к некорректному поведению

Код для воспроизведения

  val token = ???
  val client: OpenApi = {
    val factory = new OkHttpOpenApiFactory(token, Logger.getLogger(this.getClass.getName))
    val api = factory.createSandboxOpenApiClient(Executors.newSingleThreadExecutor)
    api.asInstanceOf[SandboxOpenApi].getSandboxContext.performRegistration(null).join()
    api
  }

  client.getStreamingContext.getEventPublisher.subscribe(new Subscriber[StreamingEvent] {
    override def onSubscribe(s: Subscription): Unit = {
      println("onSubscribe")
      s.request(1)
    }

    override def onNext(t: StreamingEvent): Unit =  {
      println("onNext")
    }

    override def onError(t: Throwable): Unit = {
      println("onError")
    }

    override def onComplete(): Unit = {
      println("onError")
    }
  })

в результате получаем бесконечный вовод в консоль строки "onSubscribe"

но по правилам стримов https://github.com/reactive-streams/reactive-streams-jvm нельзя делать больше 1 раза onSubscribe

12. Subscriber.onSubscribe MUST be called at most once for a given Subscriber (based on object equality).

Это очень мешает использовать библиотеку в интеграции с fs2, так как она ломается от такого =(

NikitaMelnikov commented 4 years ago

@zlumyo

a14e commented 4 years ago

я проверял на версии 0.4.1 (последняя в мавене) Вижу, что коммит с фиксом уже есть в репозитории. Если собрать последнего мастера, то все работает

Но 0.5 версия клиента еще не запаблишена

zlumyo commented 3 years ago

Новую версию опубликуем в феврале.