Service Broker - più code vs singole code durante la comunicazione con applicazioni esterne

StackOverflow https://stackoverflow.com/questions/2198475

  •  25-09-2019
  •  | 
  •  

Domanda

Al momento dispone di un'applicazione che utilizzi il servizio broker per i messaggi in coda da inviare ad un sistema esterno, che comunichiamo con tramite un'interfaccia web service.

Al momento integriamo solo con una singola azienda, in modo da una coda è sufficiente - tuttavia abbiamo bisogno di iniziare passando messaggi a più aziende che utilizzano la stessa interfaccia del servizio web

.

Mi chiedo se un unico sistema di coda è sufficiente per questo o dovrebbe abbiamo una coda per azienda. Con una coda per azienda Sono preoccupato per il ridimensionamento questo fuori come abbiamo potuto avere un sacco di code e poi un sacco di connessioni per controllare le code.

Con una singola coda però possiamo solo aggiungere più lettori come richiesto. Tuttavia, se non siamo in grado di comunicare con uno dei sistemi esterni (ad es problema di connettività), allora non è un problema con il messaggio, e noi ci si vuole riprovare, ma non vogliamo per i messaggi di ritardo per le imprese la cui sistemi sono in su. Mi chiedevo come persone sono attualmente a che fare con scenari simili?

Si potrebbe reinserire il messaggio, ma la preoccupazione che ho di questo è che non lo facciamo ordine garanzia di consegna.

È stato utile?

Soluzione

Sto assumendo che per "reinserire" un messaggio che intendo solo il rollback della transazione che le ha ricevute. L'effetto sarà che il messaggio sarà disponibile per ricevere di nuovo, come un primo messaggio dalla data conversazione (in modo da non è necessario preoccuparsi di preservare l'ordine di consegna). Detto questo, c'è un problema con questo approccio, vale a dire la veleno gestione dei messaggi . Se 5 consecutivi riceve da un dato di coda di rollback, la coda sarà disattivata.

Un approccio alternativo, descritto in dettaglio nel libro di Klaus Aschenbrenner, è di avere una tabella di richieste in sospeso. Non appena la procedura attivata riceve un messaggio di richiesta dalla coda di Service Broker, si cerca di fare la chiamata di servizio web. Se non funziona per qualche ragione, la richiesta viene messo nella tabella richieste in sospeso e ritentato ogni volta un po '(è possibile utilizzare timer di conversazione per tentativi di pianificazione). In questo modo, se un servizio web non è disponibile, non sarà mantenere il blocco del lettore di Service Broker da manutenzione altre società (assumendo il timeout per la prima richiesta è abbastanza piccolo). E dal momento che la ricezione sarà impegnato, non importa se la chiamata di servizio Web ha successo, non si incorrere in problemi di messaggi non elaborabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top