Dans mon application, j'ai besoin d'appeler un processus stocké de manière asynchrone. Pour cela, j'utilise Sql Service Broker. Voici les étapes impliquées dans la création de l'appel asynchrone.Appel asynchrone d'un processus stocké utilisant le service Broker
1) J'ai créé Message, Contrat, File d'attente, Service. Et l'envoi de messages. Je peux voir mes messages dans 'ReceiveQueue1'.
2) J'ai créé un processus enregistré et une file d'attente Lorsque j'exécute le processus stocké (proc_AddRecord), il ne s'exécute qu'une seule fois. Sa lecture tous les enregistrements dans les files d'attente et l'ajout de ces enregistrements à la table. Jusqu'à ce point, il fonctionne très bien. Mais lorsque j'ajoute de nouveaux messages à 'ReceiveQueue1', ma proc mémorisée n'ajoute pas automatiquement ces enregistrements à la table. Je dois ré exécuter le processus stocké (proc_AddRecord) en ordre pour ajouter les nouveaux messages. Pourquoi le processus stocké n'est pas exécuté. Ce que je suis supposé faire pour appeler le processus stocké de manière asynchrone. Le but de l'utilisation de Service Broker est d'appeler de manière asynchrone les procs stockés. Je suis totalement nouveau à SQL Server Service Broker. Appréciez toute aide. Voici mon code pour le proc stocké
#--exec proc_AddRecord
ALTER PROCEDURE proc_AddRecord
AS
Declare
@Conversation UniqueIdentifier,
@msgTypeName nvarchar(200),
@msg varbinary(max)
While (1=1)
Begin
Begin Transaction;
WAITFOR
(
Receive Top (1)
@Conversation = conversation_handle,
@msgTypeName = message_type_name,
@msg = message_body
from dbo.ReceiveQueue1
), TIMEOUT 5000
IF @@Rowcount = 0
Begin
Rollback Transaction
Break
End
PRINT @msg
If @msg = 'Sales'
BEGIN
insert into TableCity(deptNo,Manager,Group,EmpCount) VALUES(101,'Reeves',51, 29)
COMMIT Transaction
Continue
End
If @msg = 'HR'
BEGIN
insert into TableCity(deptNo,Manager,Group,EmpCount) VALUES(102,'Cussac',55, 14)
COMMIT Transaction
Continue
End
Begin
Print 'Process end of dialog messages here.'
End Conversation @Conversation
Commit Transaction
Continue
End
Rollback Transaction
END
ALTER QUEUE AddRecorQueue
WITH ACTIVATION (
PROCEDURE_NAME=proc_AddRecord,
MAX_QUEUE_READERS = 1,
STATUS = ON,
EXECUTE AS 'dbo');
Excellent, j'ai ajouté l'activation à '' ReceiveQueue1 '' et cela a fonctionné parfaitement. J'ai supprimé la restauration à la fin. Merci de votre aide. – Henry