Aracılığıyla paylaş


Hizmet Aracısı

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

SQL Server Hizmet Aracısı, SQL Server Veritabanı Altyapısı ve Azure SQL Yönetilen Örneği içinde mesajlaşma ve kuyruğa alma işlemleri için yerel destek sağlar. Geliştiriciler, farklı veritabanları arasında iletişim kurmak ve dağıtılmış ve güvenilir uygulamalar oluşturmak için Veritabanı Altyapısı bileşenlerini kullanan gelişmiş uygulamaları kolayca oluşturabilir.

Hizmet Aracısı ne zaman kullanılır?

Yerel veritabanı içi zaman uyumsuz ileti işleme işlevlerini uygulamak için Hizmet Aracısı bileşenlerini kullanın. Hizmet Aracısı kullanan uygulama geliştiricileri, karmaşık iletişim ve mesajlaşma iç işlevlerini programlamadan veri iş yüklerini çeşitli veritabanlarına dağıtabilir. Hizmet Aracısı iletişim yollarını konuşma bağlamında işlediğinden Hizmet Aracısı geliştirme ve test çalışmalarını azaltır. Ayrıca performansı artırır. Örneğin, Web sitelerini destekleyen ön uç veritabanları bilgileri kaydedebilir ve yoğun işlem gerektiren görevleri arka uç veritabanlarında kuyruğa gönderebilir. Hizmet Aracısı, güvenilirlik ve teknik tutarlılık sağlamak için tüm görevlerin işlemler bağlamında yönetilmesini sağlar.

Genel bakış

Hizmet Aracısı, yerel veritabanı içi hizmet odaklı uygulamalar oluşturmanıza olanak tanıyan bir ileti teslim çerçevesidir. Tablolardan sürekli olarak veri okuyan ve sorgu yaşam döngüsü sırasında bunları işleyen klasik sorgu işleme işlevlerinin aksine, hizmet odaklı uygulamalarda iletilerin alışverişi yapılan veritabanı hizmetleri vardır. Her hizmet için, mesajların işlenene kadar yerleştirildiği bir kuyruk bulunmaktadır.

Hizmet Aracısı işlem akışının diyagramı.

Kuyruklardaki iletiler Transact-SQL RECEIVE komutu kullanılarak veya ileti kuyruğa her geldiğinde çağrılan etkinleştirme yordamıyla getirilebilir.

Hizmet oluşturma

Uyarı

Hedef hizmet bir veya daha fazla sözleşmeyi kullanıma sunmalıdır. Sözleşmeleri olmayan bir hizmet oluşturursanız, ileti alamaz. Gönderilen iletiler başarılı gibi görünebilir, ancak iletiler başlatıcının sys.transmission_queue kuyruğunda kalacaktır.

/*
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]);

İleti gönderme

İletiler, SEND Transact-SQL deyimi kullanılarak hizmetler arasındaki konuşmada gönderilir. Konuşma, BEGIN DIALOG Transact-SQL deyimi kullanılarak hizmetler arasında kurulan bir iletişim kanalıdır.

-- 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"/>');

İleti adresine ExpensesService gönderilir ve içine dbo.ExpenseQueueyerleştirilir. Bu kuyrukla ilişkilendirilmiş bir etkinleştirme yordamı olmadığından, birisi okuyana kadar ileti kuyrukta kalır.

İletileri işleme

Kuyruğa yerleştirilen iletiler standart bir SELECT sorgusu kullanılarak seçilebilir. SELECT deyimi kuyruğu değiştirmez ve iletileri kaldırmaz. Kuyruktan iletileri almak ve okumak için RECEIVE Transact-SQL deyimini kullanabilirsiniz.

RECEIVE TOP (1)
    conversation_handle,
    message_type_name,
    TRY_CAST (message_body AS NVARCHAR (MAX)) AS message_body_text
FROM dbo.ExpenseQueue;
GO

Kuyruktan tüm iletileri işledikten sonra, END CONVERSATION Transact-SQL deyimini kullanarak konuşmayı kapatmalısınız.

-- 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

Hizmet Aracısı belgeleri

Hizmet Aracısı hakkında daha fazla bilgi için bkz:

Ayrıca, Hizmet Aracısı kavramları ve geliştirme ve yönetim görevleri için daha önce yayımlanmış belgelere de başvurabilirsiniz.

Hizmet Aracısı'ndaki yenilikler

Hizmet Aracısı ve Azure SQL Yönetilen Örneği

Azure SQL Yönetilen Örneği örnekleri arasında örnekler arası Hizmet Aracısı ileti alışverişi ve SQL Server ile Azure SQL Yönetim Örneği arasındaki ileti alışverişi şu anda genel önizleme aşamasındadır:

Aktarım güvenliği desteklenirken diyalog güvenliği desteklenmemektedir.

  • CREATE REMOTE SERVICE BINDING desteklenmez.

Hizmet Aracısı varsayılan olarak etkindir ve devre dışı bırakılamaz. Aşağıdaki ALTER DATABASE seçenekler desteklenmez:

  • ENABLE_BROKER
  • DISABLE_BROKER

SQL Server 2019'da (15.x) önemli bir değişiklik yapılmadı. SQL Server 2012'de (11.x) aşağıdaki değişiklikler kullanıma sunulmuştur.

İletiler birden çok hedef hizmete gönderilebilir (çok noktaya yayın)

SEND deyiminin söz dizimi, birden çok konuşma tutamacını destekleyerek çok noktaya yayını etkinleştirmek için genişletilmiştir.

Kuyruklar, iletinin kuyruğa alındığı zamanı gösterir

Kuyruklarda, message_enqueue_timebir iletinin ne kadar süredir kuyrukta olduğunu gösteren yeni bir sütunu vardır.

Zehirli ileti işleme devre dışı bırakılabilir

CREATE QUEUE ve ALTER QUEUE deyimleri artık yan tümcesini POISON_MESSAGE_HANDLING (STATUS = ON | OFF)ekleyerek zehirli ileti işlemeyi etkinleştirebilir veya devre dışı bırakabilir. Katalog görünümünde sys.service_queues artık zehirli iletinin etkinleştirildiğini veya devre dışı bırakıldığını belirten sütun is_poison_message_handling_enabled bulunur.

Hizmet Aracısı'nda kullanılabilirlik grubu desteği

Daha fazla bilgi için bkz. Hizmet Aracısı ile Always On Kullanılabilirlik Grupları (SQL Server).