2016-02-23 6 views
6

Sto cercando di capire la differenza tra HystrixCommand e HystrixObservableCommand. La ragione per cui sono confuso è che HysterixCommand ha anche un metodo observ() o toObservable() che emette rispettivamente osservatori caldi e freddi. Quindi, qual è stata la necessità di creare HystrixObservableCommand. Se lavorerò completamente su chiamate non bloccanti quale dovrei usare? perché?Differenza tra HystrixCommand e HystrixObservableCommand

risposta

9

Dalle Javadocs:

HystrixCommand

Questo comando è essenzialmente un comando di blocco ma fornisce una facciata osservabile se utilizzato con osservare()

HystrixObservableCommand

Questo comando dovrebbe essere usato per un purel y modello di chiamata non bloccante. Il chiamante di questo comando sarà abbonato all'Osservable restituito dal metodo run().

La differenza è che HystrixCommand di default supporta un paradigma di blocco, ma fornisce anche un comportamento non-blocking in via di osservabili tramite una facciata, mentre HystrixObservableCommand è stata implementata specificamente per una configurazione non-blocking. Non sono del tutto sicuro del motivo per cui è diviso in due implementazioni, ma suppongo che il motivo sia dovuto al fatto che in origine HystrixCommand non supportava il blocco. E 'stato aggiunto circa a year or so after the original implementation. Potrebbe essere stato semplicemente più pulito scrivere una classe hystrix puramente non bloccante.

Se si utilizzano solo chiamate non bloccanti, è probabile che si utilizzi HystrixObservableCommand. Ben Christensen, uno degli sviluppatori Hystrix, riassume bene in this post:

Tuttavia, se si sta avvolgendo le chiamate di blocco, si dovrebbe solo bastone con l'utilizzo di HystrixCommand come questo è ciò che è costruito e IT default in esecuzione tutto in un thread separato. Usando HystrixCommand.observe() ti darà la composizione simultanea, asincrona che stai cercando.

HystrixObservableCommand è progettato per il wrapping async, Observable non bloccanti che non richiedono thread aggiuntivi.

4

In aggiunta alla risposta di Nick Defazio, un'implementazione di HystrixObservableCommand osservabili avvolgere in grado di emettere più elementi, mentre HystrixCommand, non potrà mai emettere più di una voce, anche quando si richiama observe() o .toObservable()che sono solo avvolgendo il singolo valore riaccordato con il metodo run().