Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Felügyelt Azure SQL-példány
Az SQL Server Service Broker natív támogatást nyújt az üzenetkezeléshez és a sorba állításhoz az SQL Server adatbázismotorban, és Felügyelt Azure SQL-példány. A fejlesztők egyszerűen hozhatnak létre kifinomult alkalmazásokat, amelyek az adatbázismotor összetevőit használják a különálló adatbázisok közötti kommunikációhoz, valamint elosztott és megbízható alkalmazások létrehozásához.
Mikor érdemes használni a Service Brokert?
A Service Broker összetevőivel natív, adatbázison belüli aszinkron üzenetfeldolgozási funkciókat valósíthat meg. A Service Brokert használó alkalmazásfejlesztők összetett kommunikáció és üzenetkezelés belső programozása nélkül terjeszthetik az adatterheléseket több adatbázis között. A Service Broker csökkenti a fejlesztési és tesztelési munkát, mivel a Service Broker kezeli a beszélgetés kontextusában lévő kommunikációs útvonalakat. Emellett javítja a teljesítményt. A webhelyeket támogató előtér-adatbázisok például rögzíthetik az információkat, és folyamatigényes feladatokat küldhetnek a háttéradatbázisok üzenetsorába. A Service Broker biztosítja, hogy az összes feladat a tranzakciók kontextusában legyen kezelve, így biztosítva a megbízhatóságot és a műszaki konzisztenciát.
Áttekintés
A Service Broker egy üzenetkézbesítési keretrendszer, amellyel natív, adatbázison belüli szolgáltatásorientált alkalmazásokat hozhat létre. Ellentétben a klasszikus lekérdezésfeldolgozó funkciókkal, amelyek folyamatosan olvasnak adatokat a táblákból, és feldolgozzák őket a lekérdezési életciklus során, a szolgáltatásorientált alkalmazások adatbázis-szolgáltatásokkal rendelkeznek, amelyek az üzeneteket cserélik. Minden szolgáltatásnak van egy üzenetsora, ahol az üzenetek a feldolgozásukig lesznek elhelyezve.
Az üzenetsorokban lévő üzenetek lekérhetők a Transact-SQL RECEIVE paranccsal, vagy az üzenetsorba érkezésekor meghívott aktiválási eljárással.
Szolgáltatások létrehozása
Megjegyzés:
A célszolgáltatásnak egy vagy több szerződést kell elérhetővé tennie. Ha szerződés nélküli szolgáltatást hoz létre, az nem fog tudni üzeneteket fogadni. Az elküldött üzenetek sikeresnek tűnnek, de az üzenetek a kezdeményező sys.transmission_queue maradnak.
/*
In this example, the initiator must then use ON CONTRACT [DEFAULT] and a MESSAGE TYPE [DEFAULT]. [DEFAULT] is a delimited identifier for the built‑in contract and isn't a T‑SQL keyword, so it must be bracketed or quoted.
*/
CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
ON QUEUE dbo.ExpenseQueue ([DEFAULT]);
Üzenetek küldése
A szolgáltatások közötti beszélgetés során az SEND Transact-SQL utasítással üzeneteket küld. A beszélgetés egy kommunikációs csatorna, amely a BEGIN DIALOG Transact-SQL utasítás használatával jön létre a szolgáltatások között.
-- Begin a dialog
DECLARE @dialog_handle AS UNIQUEIDENTIFIER;
BEGIN DIALOG @dialog_handle
FROM SERVICE ExpensesClient
TO SERVICE N'ExpensesService'
ON CONTRACT [DEFAULT];
-- Send a message
SEND ON CONVERSATION (@dialog_handle)
MESSAGE TYPE [DEFAULT] (N'<Expense ExpenseId="1" Amount="123.45" Currency="USD"/>');
Az üzenet el van küldve ide ExpensesService és el van helyezve ide dbo.ExpenseQueue. Mivel ehhez az üzenetsorhoz nincs aktiválási eljárás társítva, az üzenet addig marad az üzenetsorban, amíg valaki be nem olvassa.
Üzenetek feldolgozása
Az üzenetsorba helyezett üzenetek egy szabványos SELECT lekérdezéssel választhatók ki. Az SELECT utasítás nem módosítja az üzenetsort, és nem távolítja el az üzeneteket. Az üzenetek üzenetsorból való olvasásához és lekéréséhez használhatja a RECEIVE Transact-SQL utasítást.
RECEIVE TOP (1)
conversation_handle,
message_type_name,
TRY_CAST (message_body AS NVARCHAR (MAX)) AS message_body_text
FROM dbo.ExpenseQueue;
GO
Miután feldolgozta az üzenetsor összes üzenetét, a END CONVERSATION Transact-SQL utasítással zárja be a beszélgetést.
-- Drain any remaining target conversations for the from the queue
DECLARE @conversation_hdl AS UNIQUEIDENTIFIER;
WHILE EXISTS (SELECT 1 FROM dbo.ExpenseQueue)
BEGIN
RECEIVE TOP (1) @conversation_hdl = conversation_handle FROM dbo.ExpenseQueue;
END CONVERSATION @conversation_hdl;
END
GO
A Service Broker dokumentációja
A Service Broker szolgáltatással kapcsolatos további információkért lásd:
-
Adatdefiníciós nyelvi utasítások ,
CREATEésALTERutasítások eseténDROP - Transact-SQL utasítások
- Service Broker katalógus nézetek (Transact-SQL)
- Szolgáltatásközvetítővel kapcsolatos dinamikus felügyeleti nézetek (Transact-SQL)
- ssbdiagnose segédprogram (Service Broker)
A Service Broker fogalmainak, valamint a fejlesztési és felügyeleti feladatoknak a korábban közzétett dokumentációjában is olvashat.
A Service Broker újdonságai
Service Broker és Felügyelt Azure SQL-példány
A szolgáltatásközvetítő példányok közötti üzenetváltás a felügyelt Azure SQL-példány példányai között, valamint az SQL Server és az Azure SQL Manage Instance közötti üzenetváltás jelenleg nyilvános előzetes verzióban érhető el:
-
CREATE ROUTE: A megadott portnak 4022-nek kell lennie. Lásd: CREATE ROUTE (Transact-SQL). -
ALTER ROUTE: A megadott portnak 4022-nek kell lennie. Lásd: ALTER ROUTE (Transact-SQL).
Az átviteli biztonság támogatott, míg a párbeszédes biztonság nem.
-
CREATE REMOTE SERVICE BINDINGnem támogatott.
A Service Broker alapértelmezés szerint engedélyezve van, és nem tiltható le. A következő ALTER DATABASE beállítások nem támogatottak:
ENABLE_BROKERDISABLE_BROKER
Az SQL Server 2019-ben (15.x) nem történt jelentős változás. Az SQL Server 2012-ben (11.x) a következő módosítások jelentek meg.
Az üzenetek több célszolgáltatásnak is elküldhetők (csoportos küldés)
A SEND utasítás szintaxisa ki lett terjesztve a csoportos küldés engedélyezéséhez több beszélgetési fogópont támogatásával.
Az üzenetsorok az üzenet lekérdezett idejét teszik elérhetővé
Az üzenetsorok új oszlopot tartalmaznak, amely azt mutatja, message_enqueue_timehogy egy üzenet mennyi ideig volt az üzenetsorban.
A méregüzenetek kezelése letiltható lehet
A CREATE QUEUE és az ALTER QUEUE utasítások mostantól engedélyezhetik vagy letilthatják a méregüzenetek kezelését a záradék hozzáadásával. POISON_MESSAGE_HANDLING (STATUS = ON | OFF) A katalógusnézetben sys.service_queues most már látható az oszlop is_poison_message_handling_enabled , amely jelzi, hogy a mérgező üzenet engedélyezve van-e vagy le van-e tiltva.
Rendelkezésre állási csoport támogatása a Service Brokerben
További információért lásd a Szolgáltatásközvetítőt az Always On rendelkezésre állási csoportokkal (SQL Server).