Ik heb in een MS SQL database een tabel waar productiedata op binnenkomt, die data moet verwerkt worden door verschillende procedures.
In eerste instantie was ik van plan om de trigger verschillende stored procedures te laten starten (afhankelijk van het 'type' record) maar het leek mij slim na een gesprekje met ChatGPT om de procedures te laten verwerken via de service broker zodat de trigger niet wacht op de procedures (die mogelijk zwaar zijn/worden).
Dit is echter voor mij nieuw.
Dus ik heb het volgende ingesteld m.b.v. ChatGPT:
Vervolgens heb ik een procedure ActivationProcedure die - bij wijze van test - alleen iets in een tabel moet loggen
De trigger zal het volgende richting de broker sturen (een XML msg die in de ActivationProcedure wordt uitgelezen en vervolgens via de juiste procedure wordt verwerkt
Maar het lukt me niet om de ActivationProcedure aan het werk te krijgen.
Als ik een bericht stuur - normaal gesproken zou de tabeltrigger dit doen - op de volgende manier:
dan zie ik berichten, maar bij transmission_queue zie ik deze error/melding:
transmission_status
en bij conversation_endpoints
Wanneer ik TO SERVICE 'dbo.StoredProcedureService' aanpas naar TO SERVICE 'StoredProcedureService' zie ik niks terug.
Ik zie niet waar het nu mis gaat. Wie kan me hier mee helpen? Zit al een paar uur met ChatGPT aan de lijn, maar het wil niet werken. Denk dat de code die ChatGPT me gegeven heeft ook niet helemaal klopt
Voor de volledigheid: ik stuur dan wel een bericht naar de queue, maar wat ik nu stuur doet er natuurlijk verder niet toe (want de ActivationProcedure moet alleen maar starten en een insert doen)
Het probleem zit dus denk ik vooral in de link tussen het bericht dat binnenkomt en het starten van de A.P.
In eerste instantie was ik van plan om de trigger verschillende stored procedures te laten starten (afhankelijk van het 'type' record) maar het leek mij slim na een gesprekje met ChatGPT om de procedures te laten verwerken via de service broker zodat de trigger niet wacht op de procedures (die mogelijk zwaar zijn/worden).
Dit is echter voor mij nieuw.
Dus ik heb het volgende ingesteld m.b.v. ChatGPT:
code:
1
2
3
4
5
6
7
8
| ALTER DATABASE Dev20032 SET ENABLE_BROKER; CREATE QUEUE [dbo].[StoredProcedureQueue] CREATE SERVICE [StoredProcedureService] ON QUEUE [dbo].[StoredProcedureQueue]; ALTER QUEUE dbo.StoredProcedureQueue WITH ACTIVATION ( PROCEDURE_NAME = dbo.ActivationProcedure, MAX_QUEUE_READERS = 1, EXECUTE AS OWNER) |
Vervolgens heb ik een procedure ActivationProcedure die - bij wijze van test - alleen iets in een tabel moet loggen
code:
1
2
3
4
5
6
| CREATE or ALTER PROCEDURE dbo.ActivationProcedure AS BEGIN print 'test' INSERT INTO tbl_Log (LogType, LogText) values ('test', 'ActivationProcedure') END |
De trigger zal het volgende richting de broker sturen (een XML msg die in de ActivationProcedure wordt uitgelezen en vervolgens via de juiste procedure wordt verwerkt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| -------------------- DECLARE @message_body XML; DECLARE @dlg UNIQUEIDENTIFIER; -- Construct the XML message body SET @message_body = ' <Message> <barcode>PS23060094/9.9</barcode> <palletweight>993</palletweight> <timestamp>' + CONVERT(NVARCHAR(30), GETDATE(), 120) + '</timestamp> <processing_procedure>spProcessStep1</processing_procedure> </Message> '; -- Begin a dialog conversation BEGIN DIALOG CONVERSATION @dlg FROM SERVICE [StoredProcedureService] TO SERVICE 'StoredProcedureService' ON CONTRACT [DEFAULT] WITH ENCRYPTION = OFF; -- Send the XML message to the Service Broker queue using the conversation handle SEND ON CONVERSATION @dlg (@message_body); -- End the dialog conversation END CONVERSATION @dlg; |
Maar het lukt me niet om de ActivationProcedure aan het werk te krijgen.
Als ik een bericht stuur - normaal gesproken zou de tabeltrigger dit doen - op de volgende manier:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| DECLARE @message_body XML; DECLARE @dlg UNIQUEIDENTIFIER; -- Construct the XML message body SET @message_body = ' <Message> <barcode>PS23060094/9.9</barcode> <palletweight>993</palletweight> <timestamp>' + CONVERT(NVARCHAR(30), GETDATE(), 120) + '</timestamp> <processing_procedure>spProcessStep1</processing_procedure> </Message> '; -- Begin a dialog conversation BEGIN DIALOG CONVERSATION @dlg FROM SERVICE [StoredProcedureService] TO SERVICE 'StoredProcedureService' ON CONTRACT [DEFAULT] WITH ENCRYPTION = OFF; -- Send the XML message to the Service Broker queue using the conversation handle SEND ON CONVERSATION @dlg (@message_body); -- End the dialog conversation END CONVERSATION @dlg; --debug SELECT * FROM sys.services WHERE name = 'StoredProcedureService' SELECT * FROM sys.service_queues WHERE name = 'StoredProcedureQueue' SELECT * FROM StoredProcedureQueue SELECT * FROM sys.transmission_queue SELECT * FROM sys.conversation_endpoints SELEcT top 10 * FROM tbl_Log order by logid desc SELECT name, activation_procedure FROM sys.service_queues WHERE name = 'StoredProcedureQueue'; |
dan zie ik berichten, maar bij transmission_queue zie ik deze error/melding:
transmission_status
code:
1
2
| The target service name could not be found. Ensure that the service name is specified correctly and/or the routing information has been supplied. The target service name could not be found. Ensure that the service name is specified correctly and/or the routing information has been supplied. |
en bij conversation_endpoints
code:
1
2
| state_desc DISCONNECTED_OUTBOUND |
Wanneer ik TO SERVICE 'dbo.StoredProcedureService' aanpas naar TO SERVICE 'StoredProcedureService' zie ik niks terug.
Ik zie niet waar het nu mis gaat. Wie kan me hier mee helpen? Zit al een paar uur met ChatGPT aan de lijn, maar het wil niet werken. Denk dat de code die ChatGPT me gegeven heeft ook niet helemaal klopt
Voor de volledigheid: ik stuur dan wel een bericht naar de queue, maar wat ik nu stuur doet er natuurlijk verder niet toe (want de ActivationProcedure moet alleen maar starten en een insert doen)
Het probleem zit dus denk ik vooral in de link tussen het bericht dat binnenkomt en het starten van de A.P.
[ Voor 3% gewijzigd door Stefke op 03-04-2024 12:11 ]