メッセージの配信を保証するサードパーティ システムからメッセージを受信する状況があります。これを行うには、クライアントが受信した各メッセージを確認する必要があります。そのようなシステムの例として、RibbitMQ があります。
さて、Monix の Observables にはバックプレッシャ メカニズムがあることを知ったので、すぐにそれをメッセージの確認に使用したくなりました。言い換えると、 がonNext返されたときAck.Continueに外部システムにそのメッセージを確認できるように、オブザーバブルを作成したいと考えています。以下は私のアイデアの簡単な概要です。
Observable.create[Event](OverflowStrategy.Fail(100)) { downstram =>
externaSystem.subscribe { event =>
downstram.onNext(event).onComplete {
case Success(Ack.Continue) => externaSystem.acknowledge(event)
case _ => externaSystem.reset(event)
}
}
Cancelable { () => externaSystem.stop() }
}
もちろん、全体的な考え方は、メッセージの損失を回避し、オブザーバーが実際に Ack.Continue を返したときにのみメッセージを確認することです。しかし、Monix がオブザーバブルのバックプレッシャーの管理を担当している場合、たとえば Iなどがオブザーバーのmulticast場合など、いくつかのケースに気付きました。shareその場合、元のオブザーバブルはAck.Continue、意図したサブスクライバーの応答を待たずに受信します。
multicast以上のことから、Monix のバックプレッシャー メカニズムを使用してサード パーティ側のシステムでメッセージを実際に確認することが良い考えであるかどうかという疑問が生じました。)
私はどんな助けにも感謝し、事前にどうもありがとう.