Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Marcel Gnoth, NTeam GmbH www.gnoth.net SQL Server Service Broker Skalierbare Business-Logik für den SQL Server Messaging in der Datenbank SQL Server 2005.

Ähnliche Präsentationen


Präsentation zum Thema: "Marcel Gnoth, NTeam GmbH www.gnoth.net SQL Server Service Broker Skalierbare Business-Logik für den SQL Server Messaging in der Datenbank SQL Server 2005."—  Präsentation transkript:

1 Marcel Gnoth, NTeam GmbH SQL Server Service Broker Skalierbare Business-Logik für den SQL Server Messaging in der Datenbank SQL Server 2005

2 Marcel Gnoth, NTeam GmbH Zur Person Dipl. Inf. Marcel Gnoth, MCSD –www.gnoth.netwww.gnoth.net NTeam GmbH, Berlin –www.nteam.dewww.nteam.de –Leiter Softwareentwicklung –MS Gold Partner Busines Intelligence, Information Worker, Advanced Infrastructur Autor dotnetpro und dotnet-magazin Trainer (u.a. SPC Berlin, )www.spc.de Themen –VB6, COM –Datenbanken, Yukon –Verteilte Informationssysteme mit.Net –Office System 2003 Integration –Reisen in ferne Länder: BASTA Session Neues in MSMQ 3.0 Heute 17:15 Tempelhof

3 Marcel Gnoth, NTeam GmbH Agenda Einleitung Hallo BASTA Wie funktioniert Service Broker Anwendungsszenarios Fazit –Und noch ein Queuing System – SSB / MSMQ ?

4 Marcel Gnoth, NTeam GmbH Service Broker Asynchrone Nachrichten in der Datenbank ?

5 Marcel Gnoth, NTeam GmbH Service Broker in Yukon Neu in Yukon Ermöglicht asynchrones Messaging innerhalb des SQL-Servers Warteschlangen sind normale DB Objekte –Können mit SQL verwendet werden CREATE QUEUE MittwochMessages Select message_body FROM MittwochMessages CREATE QUEUE MittwochMessages Select message_body FROM MittwochMessages

6 Marcel Gnoth, NTeam GmbH Warum asynchrone Operationen in der DB? Entkoppelung von langwierigen Operationen Lastverteilung Batch-Verarbeitung Skalierung Sehr hohe Performance durch Integration in DB Transaktionen Zuverlässige remote Nachrichten

7 Marcel Gnoth, NTeam GmbH Transaktionen Nachrichtenversand und Datenmanipulation innerhalb einer Transaktion SQL Broker State -B Msg-2 State -B Msg-2 State -A Msg-1 X1 Y1 Z1 Service Instance Msg-2 Send! State -A Msg-1 State -A Msg-1 State -A Msg-1 State -B X2 DB write Y2 DB write Z2 DB write One Atomic Transaction

8 Marcel Gnoth, NTeam GmbH Hallo BASTA Ein kleines Beispiel Ping / Pong zwischen zwei Queues

9 Marcel Gnoth, NTeam GmbH Objekte für den Datenaustausch Nachrichtentypen –HelloWorldRequest –HelloWorldResponse Vertrag –HelloWorldContract –Vereinbart die Antwort HelloWorldResponse auf HelloWorldRequest Nachrichtenwarteschlangen –HelloWorldTargetQueue –HelloWorldInitiatorQueue Dienste –HelloWorldRequestService –HelloWorldResponseService –Verbindet Vertrag mit Queue (Conversation Endpoint)

10 Marcel Gnoth, NTeam GmbH Das Senden Über einen Dialog wird die Nachricht versendet --Dialog starten BEGIN FROM SERVICE [HelloWorldResponseService] TO SERVICE 'HelloWorldRequestService' ON CONTRACT [HelloWorldContract] WITH ENCRYPTION = OFF, LIFETIME = 600; -- Send message SEND ON MESSAGE TYPE [HelloWorldRequest] (N'Hello World - Feierabend') --Dialog starten BEGIN FROM SERVICE [HelloWorldResponseService] TO SERVICE 'HelloWorldRequestService' ON CONTRACT [HelloWorldContract] WITH ENCRYPTION = OFF, LIFETIME = 600; -- Send message SEND ON MESSAGE TYPE [HelloWorldRequest] (N'Hello World - Feierabend')

11 Marcel Gnoth, NTeam GmbH Das Empfangen Receive entnimmt eine Nachricht aus der Queue Select liest nur @message_body=message_body FROM [HelloWorldTargetQueue] @message_body=message_body FROM [HelloWorldTargetQueue]

12 Marcel Gnoth, NTeam GmbH Das Anworten Über Conversation-Handle antworten Danach der Dialog beendet werden –Er besteht nur aus Request / Response Anwort lesen, MessageBody ist Binary SEND ON MESSAGE TYPE [HelloWorldResponse] (N'Hello From ) END SEND ON MESSAGE TYPE [HelloWorldResponse] (N'Hello From ) END RECEIVE cast(message_body as nvarchar(MAX)) FROM [HelloWorldInitiatorQueue]

13 Marcel Gnoth, NTeam GmbH Demo Hallo BASTA in TSQL

14 Marcel Gnoth, NTeam GmbH Wie funktioniert SSB Details

15 Marcel Gnoth, NTeam GmbH Transport der Nachrichten Initiator Application Target Application Message Type Message Type Service Dialog Conversation Queue Transport Activation Contract Queue Application Layer Metadata Layer Physical Layer TCP/IP

16 Marcel Gnoth, NTeam GmbH Queue Asynchrones verschicken einer Nachricht (Send) SSB übernimmt den Transport zwischen verschiedenen SQL Server Instanzen –auch über Netzwerkgrenzen hinweg Empfänger verarbeitet Nachrichten nach Bedarf Mit Select in die Queue schauen Mit Receive Nachricht entnehmen –Ist Select ähnlich, liefert Rowset Sichern und Wiederherstellen

17 Marcel Gnoth, NTeam GmbH Dialog Kommunikation zwischen zwei Endpunkten –log. Services, phys. Queues werden dann Services zugeordnet Nachrichten haben eine bestimmte Reihenfolge Empfangen in der Sendereihenfolge –Auch über Transaktionsgrenzen hinweg –Extrem robust Dialog ist Spezialform einer Conversations –In Zukunft wird es Monologe geben Publish / Subscribe Jede Nachricht hat ein ConversationHandle –Leichte Zuordnung eingehender Nachrichten zu offenen Dialogen Dialoge brauchen einen Contract

18 Marcel Gnoth, NTeam GmbH Conversation Groups Zusammengehörige Dialoge / Monologe Nur ein Service – Programm kann auf die Nachrichten exklusiv zugreifen

19 Marcel Gnoth, NTeam GmbH Message Type Alle Nachrichten müssen einen definierten Typ haben Typ ist ein Label für den Empfänger Kann mit XML Schema verknüpft werden –Nachrichten, die nicht dem Schema entsprechen werden beim Empfang abgewiesen CREATE MESSAGE TYPE [HelloWorldRequest] VALIDATION = NONE CREATE MESSAGE TYPE [HelloWorldResponse] VALIDATION = NONE CREATE MESSAGE TYPE [HelloWorldRequest] VALIDATION = NONE CREATE MESSAGE TYPE [HelloWorldResponse] VALIDATION = NONE

20 Marcel Gnoth, NTeam GmbH Contract Menge von Message Types Definieren wer welche Nachrichten senden darf Werden dann in einem Dialog konkreten Queues zugeordnet CREATE CONTRACT [HelloWorldContract]( [HelloWorldRequest] SENT BY INITIATOR, [HelloWorldResponse] SENT BY TARGET ) CREATE CONTRACT [HelloWorldContract]( [HelloWorldRequest] SENT BY INITIATOR, [HelloWorldResponse] SENT BY TARGET ) BEGIN FROM SERVICE [HelloWorldResponseService] TO SERVICE 'HelloWorldRequestService ON CONTRACT [HelloWorldContract] WITH ENCRYPTION = OFF, LIFETIME = 600;

21 Marcel Gnoth, NTeam GmbH Services Ordnet mehrere Contracts einer Queue zu. Dialoge verwenden Serivces als Endpunkte Beim Deployment können den Services physische Queues zugeordnet werden CREATE SERVICE [HelloWorldRequestService] ON QUEUE [HelloWorldTargetQueue] ( [HelloWorldContract] )

22 Marcel Gnoth, NTeam GmbH Routes Route zu einem Service Transport zwischen unterschiedlichen Service Brokern CREATE ROUTE HelloWorldRoute WITH SERVICE_NAME = N'HelloWorldRequestService', BROKER_INSTANCE = N'ea453b05-c b873-b21ed3af4865', ADDRESS = N'TCP:// :4022' CREATE ROUTE HelloWorldRoute WITH SERVICE_NAME = N'HelloWorldRequestService', BROKER_INSTANCE = N'ea453b05-c b873-b21ed3af4865', ADDRESS = N'TCP:// :4022'

23 Marcel Gnoth, NTeam GmbH Queue Aktivierung Beim Eintreffen einer Nachricht kann eine Aktion ausgelöst werden –Stored Proc (Internal Activation) CREATE QUEUE [HelloWorldTargetQueue] WITH STATUS = ON, ACTIVATION ( PROCEDURE_NAME = SSB_HW_Action, MAX_QUEUE_READERS = 1, EXECUTE AS SELF) CREATE PROCEDURE [dbo].[SSB_HW_Action] WITH EXECUTE AS CALLER AS uniqueidentifier varbinary(max) -- retrieve the message from the queue WAITFOR( RECEIVE = = message_body FROM [HelloWorldTargetQueue]), TIMEOUT INSERT INTO SSB_HW_Texte (Text) VALUES as nvarchar(MAX))) CREATE PROCEDURE [dbo].[SSB_HW_Action] WITH EXECUTE AS CALLER AS uniqueidentifier varbinary(max) -- retrieve the message from the queue WAITFOR( RECEIVE = = message_body FROM [HelloWorldTargetQueue]), TIMEOUT INSERT INTO SSB_HW_Texte (Text) VALUES as nvarchar(MAX)))

24 Marcel Gnoth, NTeam GmbH Demo Queue Aktivierung

25 Marcel Gnoth, NTeam GmbH Tools Broker muß in der DB aktiviert sein System Queues ALTER DATABASE AdventureWorks SET ENABLE_BROKER select last_transmission_error from sys.transmission_queue select * from sys.endpoints select * from sys.routes ALTER DATABASE AdventureWorks SET ENABLE_BROKER select last_transmission_error from sys.transmission_queue select * from sys.endpoints select * from sys.routes

26 Marcel Gnoth, NTeam GmbH Anwendungsszenarien

27 Marcel Gnoth, NTeam GmbH Anwendungsszenarien Entkoppeln von Datenbankoperationen Parallele SP Ausführung Order / Entry Langsame Trigger sind schlecht für DML Operationen –Trigger gibt Arbeit nur in Auftrag und ist fertig –Arbeit wird später in einer anderen Transaktion u./o. auf einem anderen Server durchgeführt –Verwendet für: Query Notifications Event Notifications

28 Marcel Gnoth, NTeam GmbH Szenario Order Entry

29 Marcel Gnoth, NTeam GmbH Query Notifications Ergebnismenge einer SELECT-Abfrage wird überwacht –Yukon verwaltet Notification Subscription –Ändern sich die Daten, dann werden alle Subscriber informiert –Mechanismus für Indexierte Views –Änderungen werden über Service Broker publiziert

30 Marcel Gnoth, NTeam GmbH ADO 2.0: SQLDependency und SQLNotificationRequest Verknüpft SQLCommand mit Notification Subscription SQLDependency –Call Back der DB-Engine in die Applikation –High Level Class –Sehr komfortabel für Entwickler SQLNotificationRequest –Low Level, kein Call Back der DB

31 Marcel Gnoth, NTeam GmbH Query Notifications Anlegen der SSB Objekte + ADO.Net USE dbMittwoch ; CREATE QUEUE MittwochMessages ; CREATE SERVICE MittwochNotifications ON QUEUE MittwochMessages ([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]) ; CREATE ROUTE MittwochMessagesRoute WITH SERVICE_NAME = 'MittwochNotifications', ADDRESS = 'LOCAL' ; USE dbMittwoch ; CREATE QUEUE MittwochMessages ; CREATE SERVICE MittwochNotifications ON QUEUE MittwochMessages ([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]) ; CREATE ROUTE MittwochMessagesRoute WITH SERVICE_NAME = 'MittwochNotifications', ADDRESS = 'LOCAL' ; RECEIVE cast(message_body as nvarchar(MAX)) As TheMessage, * FROM MittwochMessages Dim m_SQLDep As SqlDependency sqlcmdQuery.CommandText = txtSelCommand.Text m_SQLDep = New SqlDependency(sqlcmdQuery) AddHandler m_SQLDep.OnChanged, _ New OnChangedEventHandler(AddressOf SqlDependency_OnChanged) Dim m_SQLDep As SqlDependency sqlcmdQuery.CommandText = txtSelCommand.Text m_SQLDep = New SqlDependency(sqlcmdQuery) AddHandler m_SQLDep.OnChanged, _ New OnChangedEventHandler(AddressOf SqlDependency_OnChanged)

32 Marcel Gnoth, NTeam GmbH Event Notification Nachricht versenden, wenn bestimmte Ereignisse auftreten Ähnlich den Triggern Es wird kein Code ausgeführt –Nachricht wird an Service Broker übergeben –Und an eine Queue geschickt DDL, DML und einige Trace Ereignisse CREATE QUEUE evtDdlNotif WITH STATUS = ON --then we can create the service CREATE SERVICE evtDdlService ON QUEUE evtDdlNotif --this is a MS supplied contract ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]) CREATE EVENT NOTIFICATION ddlEvents ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS TO SERVICE evtDdlService select cast(message_body as nvarchar(MAX)),* from evtDdlNotif CREATE QUEUE evtDdlNotif WITH STATUS = ON --then we can create the service CREATE SERVICE evtDdlService ON QUEUE evtDdlNotif --this is a MS supplied contract ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]) CREATE EVENT NOTIFICATION ddlEvents ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS TO SERVICE evtDdlService select cast(message_body as nvarchar(MAX)),* from evtDdlNotif

33 Marcel Gnoth, NTeam GmbH Demo Event Notification

34 Marcel Gnoth, NTeam GmbH Typische SSB Applikation Nicht nur TSQL Komplexe Prozeduren in Yukon Clientzugriffe über ADO.Net Kombinieren mit Query Notifications

35 Marcel Gnoth, NTeam GmbH Und noch ein Queuing System SSB / MSMQ

36 Marcel Gnoth, NTeam GmbH MSMQ / SSB SSB für hohe Performance designed Integriert in die DB Solange nur lokal, kein DTC -> schnelle Tx MSMQ für komponentenbasierte Systeme –COM+, Enterprise Services –Kann mit SQL Tx kombiniert werden Overhead DTC Messageing zwischen DBs -> SSB –Auch SW Komponenten könnten SSB verwenden Messaging zwischen Komponenten -> MSMQ –Hat auch spezielle Features

37 Marcel Gnoth, NTeam GmbH Fazit Zielgruppe –Große DBs –Komplexe, langwierige Transaktionen Entkoppelung von Systemen und Transaktionen Für asynchrone Kommunikation zwischen DBs –Kein DTC solange nur mit einer DB Instanz gearbeitet wird Ersetzt nicht MSMQ –MSMQ für asynchrone Kommunikation von Softwarekomponenten Es gibt Überschneidungen

38 Marcel Gnoth, NTeam GmbH Ressourcen Developer Spot Newsgroup Event Notifications A First Look at SQL Server 2005 Service Broker us/dnsql90/html/sqlsvcbroker.asp Blog

39 Marcel Gnoth, NTeam GmbH Alles wird gut Uff...


Herunterladen ppt "Marcel Gnoth, NTeam GmbH www.gnoth.net SQL Server Service Broker Skalierbare Business-Logik für den SQL Server Messaging in der Datenbank SQL Server 2005."

Ähnliche Präsentationen


Google-Anzeigen