Bagikan melalui


Pelajaran 4: Memulai Percakapan dan Mengirimkan Pesan

Berlaku untuk: SQL Server Azure SQL Managed Instance

Dalam pelajaran ini, Anda akan belajar memulai percakapan yang mencakup dua database dalam instans Mesin Database yang sama. Anda juga akan mempelajari cara menyelesaikan siklus pesan balasan permintaan sederhana, lalu mengakhiri percakapan.

Prosedur

Beralih ke database InitiatorDB

  • Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk mengalihkan konteks ke database InisiatorDB tempat Anda memulai percakapan.

        USE InitiatorDB;
        GO
    

Memulai percakapan dan mengirim pesan permintaan

  • Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk memulai percakapan dan kirim pesan permintaan ke TgtDB/2DBSample/TargetService di TargetDB. Kode harus dijalankan dalam satu blok karena variabel digunakan untuk meneruskan handel dialog dari BEGIN DIALOG ke pernyataan KIRIM. Batch menjalankan pernyataan BEGIN DIALOG untuk memulai percakapan dan membangun pesan permintaan. Kemudian, menggunakan handel dialog dalam pernyataan SEND untuk mengirim pesan permintaan pada percakapan tersebut. Pernyataan SELECT terakhir menampilkan teks pesan yang dikirim.

        DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
        DECLARE @RequestMsg NVARCHAR(100);
    
        BEGIN TRANSACTION;
    
        BEGIN DIALOG @InitDlgHandle
             FROM SERVICE [//InitDB/2DBSample/InitiatorService]
             TO SERVICE N'//TgtDB/2DBSample/TargetService'
             ON CONTRACT [//BothDB/2DBSample/SimpleContract]
             WITH
                 ENCRYPTION = OFF;
    
        SELECT @RequestMsg =
           N'<RequestMsg>Message for Target service.</RequestMsg>';
    
        SEND ON CONVERSATION @InitDlgHandle
             MESSAGE TYPE [//BothDB/2DBSample/RequestMessage]
              (@RequestMsg);
    
        SELECT @RequestMsg AS SentRequestMsg;
    
        COMMIT TRANSACTION;
        GO
    

Beralih ke database TargetDB

  • Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk mengalihkan konteks ke database TargetDB tempat Anda akan menerima pesan permintaan dan mengirim pesan balasan kembali ke InitiatorDB.

        USE TargetDB;
        GO
    

Menerima permintaan dan mengirim balasan

  • Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk menerima pesan balasan dari TargetQueue2DB dan kirim pesan balasan kembali ke inisiator. Pernyataan RECEIVE mengambil pesan permintaan. Kemudian, pernyataan SELECT berikut menampilkan teks sehingga Anda dapat memverifikasi bahwa itu adalah pesan yang sama yang dikirim di langkah sebelumnya. Pernyataan IF menguji apakah pesan yang diterima adalah jenis pesan permintaan, dan jika pernyataan SEND digunakan untuk mengirim pesan balasan kembali ke inisiator. Ini juga menguji apakah pernyataan END CONVERSATION digunakan untuk mengakhiri sisi target percakapan. Pernyataan SELECT akhir menampilkan teks pesan balasan.

        DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
        DECLARE @RecvReqMsg NVARCHAR(100);
        DECLARE @RecvReqMsgName sysname;
    
        BEGIN TRANSACTION;
    
        WAITFOR
        ( RECEIVE TOP(1)
            @RecvReqDlgHandle = conversation_handle,
            @RecvReqMsg = message_body,
            @RecvReqMsgName = message_type_name
          FROM TargetQueue2DB
        ), TIMEOUT 1000;
    
        SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
        IF @RecvReqMsgName =
           N'//BothDB/2DBSample/RequestMessage'
        BEGIN
             DECLARE @ReplyMsg NVARCHAR(100);
             SELECT @ReplyMsg =
                N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
             SEND ON CONVERSATION @RecvReqDlgHandle
                  MESSAGE TYPE
                    [//BothDB/2DBSample/ReplyMessage] (@ReplyMsg);
    
             END CONVERSATION @RecvReqDlgHandle;
        END
    
        SELECT @ReplyMsg AS SentReplyMsg;
    
        COMMIT TRANSACTION;
        GO
    

Beralih ke database InitiatorDB

  • Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk mengalihkan konteks kembali ke database InitiatorDB tempat Anda akan menerima pesan balasan dan mengakhiri percakapan.

        USE InitiatorDB;
        GO
    

Menerima balasan dan mengakhiri percakapan

  • Salin dan tempel kode berikut ke dalam jendela Editor Kueri. Kemudian, jalankan untuk menerima pesan balasan dan akhiri percakapan. Pernyataan RECEIVE mengambil pesan balasan dari InitiatorQueue2DB. Pernyataan END CONVERSATION mengakhiri sisi inisiator percakapan. Pernyataan SELECT terakhir menampilkan teks pesan balasan sehingga Anda dapat mengonfirmasinya sama dengan apa yang dikirim pada langkah sebelumnya.

        DECLARE @RecvReplyMsg NVARCHAR(100);
        DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER;
    
        BEGIN TRANSACTION;
    
        WAITFOR
        ( RECEIVE TOP(1)
            @RecvReplyDlgHandle = conversation_handle,
            @RecvReplyMsg = message_body
          FROM InitiatorQueue2DB
        ), TIMEOUT 1000;
    
        END CONVERSATION @RecvReplyDlgHandle;
    
        -- Display received request.
        SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
        COMMIT TRANSACTION;
        GO
    

Langkah berikutnya

Ini menyimpulkan tutorial. Tutorial hanya pengantar singkat. Mereka tidak menjelaskan semua opsi yang tersedia. Tutorial menggunakan logika yang disederhanakan dan penanganan kesalahan, dan tidak boleh digunakan di lingkungan produksi. Untuk membuat percakapan yang efisien, andal, dan kuat, Anda memerlukan kode yang lebih kompleks daripada contoh dalam tutorial ini.

Lihat juga