Domanda

Ho molte operazioni nel database che hanno bisogno di innescare codice dell'applicazione. Attualmente sto usando il polling del database, ma ho sentito che SQL Server Service Broker può darmi la funzionalità MSMQ-like.

  1. Posso ascoltare SQL Server Service Broker code dalle applicazioni .NET in esecuzione su una macchina diversa?
  2. Se è così, dovrei farlo?
  3. Se no, cosa mi consiglia?
È stato utile?

Soluzione

Per rispondere alle vostre domande:

  

E 'possibile ascoltare SQL Server Service   code Broker da applicazioni .NET   in esecuzione su una macchina diversa?

Sì.

  

Se è così, dovrei farlo?

     

Se no, cosa mi consiglia?

Si potrebbe considerare l'utilizzo di SqlDependency. Esso utilizza Service Broker dietro le quinte, ma non in modo esplicito.

È possibile registrare un oggetto SqlDependency con una query SELECT o di una stored procedure. Se un altro comando modifica i dati che è stato restituito dalla query, quindi un evento verrà generato. È possibile registrare un gestore di eventi, ed eseguire qualsiasi codice che ti piace in quel momento. In alternativa, è possibile utilizzare SqlCacheDependency, che sarà solo rimuovere l'oggetto associato dalla cache quando l'evento.

È inoltre possibile utilizzare direttamente Service Broker. Tuttavia, in questo caso sarà necessario per inviare e ricevere i propri messaggi, come con MSMQ.

In ambienti con bilanciamento del carico, SqlDependency è un bene per i casi in cui il codice deve essere eseguito su tutti i server web (come ad esempio il lavaggio del cache). messaggi di Service Broker sono migliori per il codice di dovrebbe essere eseguito solo una volta - come ad esempio l'invio di una e-mail

.

In caso aiuta, mi copro entrambi i sistemi in dettaglio con esempi nel mio libro ( Ultra -Fast ASP.NET ).

Altri suggerimenti

SSB (SQL Service Broker) ha una funzionalità denominata Attivazione che ha permesso una stored procedure per essere collegato a una coda. SQL Server verrà eseguito questa procedura internamente quando ci sono messaggi da consumare in una coda. La procedura di coda di allegato può essere una procedura CLR, consentendo per moduli logici codice attività gestite da eseguire (C #, VB.Net ecc).

Un'alternativa a una stored procedure attivata interna è quello di avere un client esterno 'ascolto' in una coda con un comunicato WAITFOR(RECEIVE ... ). Questa sintassi è speciale per SSB e fa un blocco non-pooling finché non ci sono messaggi per ricevere. Le domande poi consumano i messaggi ricevuti come un set di risultati T-SQL ordinaria (come una SELECT). V'è anche un campione di un href="http://blogs.msdn.com/sql_service_broker/archive/2008/11/21/announcing-service-broker-external-activator.aspx" rel="noreferrer"> che sfrutta il meccanismo di notifica degli eventi per sapere quando iniziare una domanda di consumo di messaggi da una coda.

Se volete vedere un esempio di codice T-SQL che sfrutta SSB attivazione interno check-out Asynchronous esecuzione procedura .

Un facile da usare biblioteca coda per SQL Service Broker sulla base di rino-code

http://github.com/CoreyKaylor/servicebroker-queues

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