Responsabilità di un ESB

1

Quando si utilizza un bus di servizio aziendale, è responsabile per;

a. the successful delivery of a message to a consuming application

b. to successfully deliver a message until the application's logic completes successfully (up to a retry threshold) ?

c. something else

Con le chiamate RESTful, una richiesta avrà sempre una risposta e spetta al client in che modo dovrebbe gestirla. Con un ESB è leggermente diverso in quanto tale il client non si cura di come altri servizi stanno consumando i suoi messaggi pubblicati.

Quindi, se il cliente non si preoccupa se un'applicazione consumante genera un'eccezione, l'ESB dovrebbe preoccuparsi delle applicazioni a cui sta consegnando il messaggio?

    
posta MrDeveloper 22.06.2015 - 13:37
fonte

2 risposte

1

ESB: La consegna affidabile di un messaggio è responsabilità del trasporto. Consegna riuscita può significare cose molto diverse a seconda del contesto, vedere Quality of Service (QoS) 1, 2, 3. Un ESB in un'architettura orientata ai servizi è normalmente responsabile per l'instradamento e la trasformazione, nonché le opzioni di aggiunta del valore come monitoraggio, auditing ecc. .

Chiamate RESTful: Una chiamata REST dovrebbe essere un'azione su un oggetto. Non dovrebbe richiedere molto tempo per completare e normalmente sarebbe in grado di fare l'elaborazione e restituire una risposta HTTP prima che fosse un problema.

Chiamate asincrone Se hai davvero bisogno di inviare un messaggio asincrono quando arriva una richiesta HTTP perché l'azione richiede molto tempo, allora non sarai in grado di aspettare la risposta. In questo caso non è propriamente responsabilità del tuo ESB fare qualcosa al riguardo. Dovrai davvero decidere come gestire il tuo programma. Il tuo ESB potrebbe essere in grado di aiutarti con questo, ad esempio coordinando una transazione globale per te. Se hai già risposto al tuo richiedente HTTP che l'azione è stata presa in mano, proprio come un client MQTT è responsabile del messaggio una volta che ha riconosciuto lo stato del messaggio con il server al livello specificato di QoS, devi trattare questo processo fallito come una transazione in errore e annullare tutto ciò che è successo o compensare le cose che non possono essere ripristinati. Il mittente deve quindi essere codificato con l'assunzione dello stesso comportamento e sapere che è necessario verificare ciò che è realmente accaduto o informare il cliente.

    
risposta data 22.06.2015 - 15:05
fonte
1

Dipende.

Il punto di un messaggio che passa architettura è che il mittente non si cura di chi riceve il messaggio, e mentre questo significa che un approccio fire-and-forget funziona molto bene, non è adatto per alcune situazioni in cui sia la consegna garantita è richiesto, oppure viene ricevuta una conferma.

Fortunatamente quest'ultimo approccio è molto semplice - il ricevitore semplicemente rimanda un messaggio a chiunque lo abbia inviato, se necessario. Nota che in questi casi, essendo le applicazioni a cui importa, l'ESB non dovrebbe aver bisogno di sapere se una risposta è richiesta dal mittente o meno, tutto ciò che deve fare è fornire un modo per questi servizi di inviarsi reciprocamente messaggi.

La consegna garantita, questa è una responsabilità dell'architettura. Alcuni hanno 2 tipi di messaggi, uno garantito e uno meno impegnativo in termini di risorse da monitorare.

    
risposta data 22.06.2015 - 14:05
fonte