Domanda

Sono nuovo di utilizzare il servizio Service Broker SQL 2005. Ho creato code e con successo ottenuto conversazioni in corso, ecc, tuttavia, voglio sorta di messaggi "a farfalla", e non sono sicuro di come fare per questo.

I messaggi vengono inviati da una stored procedure che viene chiamato da un'applicazione multi-utente. Diciamo 20 utenti causano questo proc essere chiamato una volta entro un secondo periodo di tempo 30, ha solo bisogno di essere inviato una volta. Quindi penso che ho bisogno di qualche modo dal mio proc per vedere se un messaggio è stato inviato entro negli ultimi 30 secondi? C'è un modo per farlo?

Un'idea che avevo era quella di inviare un messaggio a una coda di "risposta" che indica se il proc di attivazione coda di richieste è stato chiamato. Poi nel mio proc memorizzato (chiamato da app utente) vedere se quel particolare messaggio è stato chiamato di recente. Il problema è che non voglio questo per rovinare la coda di risposta. Può uno sguardo a una coda (non ricevere) per vedere se un messaggio esiste in esso?

O c'è un modo più semplice per realizzare quello che sto cercando?

È stato utile?

Soluzione

Sì, è possibile sbirciare una coda per vedere se un messaggio è in esso prima mano. Basta interrogare la coda utilizzando SELECT anziché ricevere e si può guardare i dati.

Una scommessa migliore sarebbe quella di inviare i messaggi e hanno la stored procedure che riceve i messaggi di decidere se il messaggio deve essere gettato fuori o no.

mando centinaia di migliaia di messaggi ai broker di servizio alla volta senza alcun tipo di problema di prestazioni.

Se state vedendo i problemi di prestazioni quindi provare l'invio di più di un messaggio alla conversazione come questo è il modo più semplice e veloce per migliorare le prestazioni di Service Broker.

Altri suggerimenti

Non è sicuro se si poteva farlo in SB in qualche modo, ma si potrebbe semplicemente avere una tabella con un campo timestamp in esso che è stato aggiornato quando viene inviato un messaggio. Il proc sarebbe verificare la presenza di un diff tempo> 30sec e inviare.

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