Ich versuche den Unterschied zwischen HystrixCommand und HystrixObservableCommand zu verstehen. Der Grund dafür, dass ich verwirrt bin, ist, dass der HysterixCommand auch eine observe() - oder toObservable() -Methode hat, die heiß bzw. kalt beobachtbar ist. Was war also nötig, um HystrixObservableCommand zu erstellen? Wenn ich vollständig auf nicht blockierenden Anrufen arbeite, welche sollte ich verwenden? Warum?Unterschied zwischen HystrixCommand und HystrixObservableCommand
Antwort
Von dem Javadocs:
Dieser Befehl ist im Wesentlichen ein Sperrbefehl, sondern bietet eine beobachtbare Fassade verwendet, wenn mit beobachten()
Dieser Befehl sollte für ein reines verwendet werden y nicht blockierendes Anrufmuster. Der Aufrufer dieses Befehls wird für das Observable-Objekt abonniert, das von der run() -Methode zurückgegeben wird.
Der Unterschied besteht darin, dass HystrixCommand standardmäßig eine blockierende Paradigma unterstützt, sondern bietet auch nicht-blockierende Verhalten durch von Observablen über eine Fassade, während HystrixObservableCommand speziell für eine nicht-blockierende Einrichtung umgesetzt wurde. Ich bin nicht ganz sicher, warum es in zwei Implementierungen aufgeteilt ist, aber ich würde vermuten, dass der Grund dafür ist, dass ursprünglich HystrixCommand nicht blockierend nicht unterstützt hat. Es wurde etwa a year or so after the original implementation hinzugefügt. Hätte einfach sauberer sein können, um eine rein nicht blockierende Hystrix-Klasse zu schreiben.
Wenn Sie nur mit nicht blockierenden Aufrufen arbeiten, sollten Sie wahrscheinlich HystrixObservableCommand verwenden. Ben Christensen, einer der Hystrix Devs, fasst es schön in this post:
Wenn Sie jedoch blockiert Anrufe wickeln, sollten Sie nur bleiben bei der Verwendung von HystrixCommand wie das ist, was es gebaut ist für und es standardmäßig Lauf alles in einem separaten Thread. Wenn Sie verwenden, gibt Ihnen HystrixCommand.observe() die gleichzeitige, asynchrone Komposition, nach der Sie suchen.
Der HystrixObservableCommand ist für das Umschließen asynchroner, nicht-blockierender Observables vorgesehen, die keine zusätzlichen Threads benötigen.
Zusätzlich zu der Antwort von Nick Defazio, eine Implementierung von HystrixObservableCommand
Wrap Observable, die mehrere Elemente, während HystrixCommand
, wird nie mehr als ein Element emittieren, auch beim Aufruf von observe()
oder .toObservable()
emittieren kann , die nur die einzelne wickeln Wert, der durch die run()
Methode zurückgestimmt wird.
- 1. Unterschied zwischen Vorzeichen & und *?
- 2. VBA: Unterschied zwischen & und +
- 3. Unterschied zwischen "**/* /" und "** /"?
- 4. Unterschied zwischen $ # und $ {# @}
- 5. Unterschied zwischen = und: =
- 6. Unterschied zwischen '#', '%' und '$'
- 7. MySQL: Unterschied zwischen ', `,' und '
- 8. C++ Unterschied zwischen '//' und '///'
- 9. Unterschied zwischen String.Empty und ""
- 10. Unterschied zwischen `% in%` und `==`
- 11. Unterschied zwischen numpy.logical_and und &
- 12. Unterschied zwischen. und #
- 13. Unterschied zwischen // und http: //
- 14. Unterschied zwischen -Wconversion zwischen gcc und g ++
- 15. Unterschied zwischen Wörterbuch und Hashtable
- 16. Unterschied zwischen FetchMode und FetchType
- 17. Unterschied zwischen Application_Start und Application_OnStart
- 18. Unterschied zwischen Uint8Array und Uint8ClampedArray
- 19. Unterschied zwischen BOOST_CHECK_CLOSE und BOOST_CHECK_CLOSE_FRACTION?
- 20. Unterschied zwischen Suche und Index
- 21. Unterschied zwischen AJAX und Senden
- 22. Unterschied zwischen Spekulation und Vorhersage
- 23. Unterschied zwischen inproc und outproc
- 24. Unterschied zwischen Clojure und Clojurescript?
- 25. Unterschied zwischen NSArray und NSMutableArray
- 26. Unterschied zwischen libcurl und libsoup
- 27. Unterschied zwischen DirectoryCatalog und AssemblyCatalog
- 28. Unterschied zwischen * y ++ und ++ * y?
- 29. Unterschied zwischen SwingWorker und SwingUtilities.invokeLater
- 30. Unterschied zwischen String.scan und String.split