Bao cao btl f11(1)

22
TRƢỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM KHOA CÔNG NGHỆ THÔNG TIN -----***----- BÁO CÁO BÀI TẬP LỚN HỌC PHẦN “HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU” Đề tài : TÌM HIỂU DỊCH VỤ SERVICE BROKER TRONG MS SQL SERVER 2005 Người hướng dẫn: Sinh viên thực hiện: Lê Thế Anh Đỗ Văn Hà (NT) Hoàng Tiến Dũng Vũ Hồng Phúc Đỗ Xuân Hoàng Nguyễn Tiến Dũng Hải phòng, tháng 4 năm 2012

Transcript of Bao cao btl f11(1)

Page 1: Bao cao btl f11(1)

TRƢỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM

KHOA CÔNG NGHỆ THÔNG TIN

-----***-----

BÁO CÁO BÀI TẬP LỚN

HỌC PHẦN “HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU”

Đề tài :

TÌM HIỂU DỊCH VỤ SERVICE BROKER

TRONG MS SQL SERVER 2005

Người hướng dẫn:

Sinh viên thực hiện:

Lê Thế Anh

Đỗ Văn Hà (NT)

Hoàng Tiến Dũng

Vũ Hồng Phúc

Đỗ Xuân Hoàng

Nguyễn Tiến Dũng

Hải phòng, tháng 4 năm 2012

Page 2: Bao cao btl f11(1)

MỤC LỤC

Giới thiệu Service Broker ........................................................................... 2

Phần 1.

SERVICE BROKER LÀM ĐƢỢC CÁI GÌ? ............................ 2

1.1

1.2

Conversations ....................................................................................... 3

Thứ tự và phối hợp thông điệp. ............................................................ 4

1.2.1

1.2.2

Tích hợp giữa hàng đợi và cơ sở dữ liệu........................................ 4

Quan hệ giữa hàng đợi và thông điệp ............................................ 5

1.3

1.4

1.5

Kỹ thuật không đồng bộ tác vụ ............................................................ 5

Hỗ trợ ứng dụng độc lập ....................................................................... 6

Thành phần của Service Broker ........................................................... 6

1.5.1

1.5.2

1.5.3

Phần 2.

Thành phần đối thoại...................................................................... 6

Phần định nghĩa dịch vụ ................................................................. 6

Phần mạng và bảo mật ................................................................... 7

LỢI ÍCH CỦA SERVICE BROKER ......................................... 7

2.1

2.2

2.3

2.4

2.5

Tương tác cơ sở dữ liệu ........................................................................ 7

Thứ tự và phối hợp của thông điệp....................................................... 8

Tính độc lập và uyển chuyển trong xử lý ............................................. 9

Khóa thông điệp liên quan.................................................................... 9

Tự động kích hoạt................................................................................. 9

Phần 3.

Phần 4.

Phần 5.

SỬ DỤNG SERVICE BROKER TRONG ỨNG DỤNG........ 10

KẾT LUẬN ................................................................................. 21

TÀI LIỆU THAM KHẢO ......................................................... 21

1

Page 3: Bao cao btl f11(1)

Service Broker là dịch vụ mạnh được giới thiệu trong SQL Server

2005, mục đích của nó giúp cho người lập trình cơ sở dữ liệu xây dựng ứng

dụng bảo mật, độ tin cậy cao và có tính uyển chuyển.

Nếu lần đầu tiên bạn nghe thấy nhóm từ này không liên quan gì đến thị

trường chứng khoán( Stock Market), mà Service Broker cung cấp kỹ thuật

hàng đợi và trao đổi thông điệp trong cơ sở dữ liệu SQL Server 2005.

Service Broker được sử dụng cho ứng dụng trong Instance của cơ sở

dữ liệu và cả những ứng dụng phân tán trên nhiều Instance.

Các vấn đề chính sẽ được đề cập:

Service Broker làm được cái gì?

Lợi ích của Service Broker.

Sử dụng Service Broker trong ứng dụng.

Phần 1.

SERVICE BROKER LÀM ĐƢỢC CÁI GÌ?

Như giới thiệu ở trên, Service Broker sẽ cung cấp chức năng trao đổi

thông điệp giữa hai Instance của SQL Server, nó còn giúp cho người lập trình

tạo ứng dụng độc lập và có thể tự quản lý các thành phần của chúng được gọi

là dịch vụ.

Những ứng dụng sử dụng dịch vụ này sẽ sử dụng thông điệp để trao đổi

các Instance của SQL Server với nhau bằng cách dùng nghi thức truyền

thông TCP/IP.

Tóm lại, Service Broker giúp cho người lập trình xây dựng ứng dụng

bất đồng bộ( Asynchronous) và được cài đặt một cách độc lập nhưng cùng

thực thi một các vụ là để trao đổi tin nhắn. Sau đây là các bước mà Service

Broker thực hiện trao đổi thông điệp giữa hai Instance của SQL Server.

2

Page 4: Bao cao btl f11(1)

1.1 Conversations

Server Broker được thiết kế để thực hiện các chức năng cơ bản về việc

gửi và nhận thông điệp. Mỗi định dạng trao đổi thông điệp đều được xác thực

và nhất quán trong kênh giao tiếp. Ngoài ta, mỗi thông điệp và quá trình trao

đổi theo một kiểu chỉ định do Service Broker bắt buộc để giúp cho người lập

trình có thể tạo nên ứng dụng có độ tin cậy cao.

Những phát biểu Transact-SQL được giới thiệu trong phiên bản SQL

2005 cho phép ứng dụng gửi và nhận thông điệp đáng tin cậy. Ứng dụng dùng

để gửi thông điệp đến các dịch vụ được đặt tên ứng với tập các tác vụ liên

quan, trong khi đó ứng dụng dùng để nhận thông điệp từ hàng đợi được trình

bày bởi bảng dữ liệu.

Những thông điệp của cùng một tác vụ thì chúng có cùng một giao tiếp.

Trong một phần giao tiếp, Service Broker bảo đảm ứng dụng nhận thông

điệp chính xác một lần theo thứ tự mà chúng được gửi.

Chú ý: Cách tốt nhất để hiểu rõ về Service Broker là xem như dịch vụ

gửi và nhận thư của bưu điện( Post Office), điều này có nghĩa là khi liên lạc

với đồng nghiệp ở xa, bạn có thể giao tiếp với họ bằng cách gửi thư thông qua

dịch vụ thư tín của bưu điện, thư của bạn sẽ gửi đến người nhần( bằng các

phương tiện vận chuyển khác nhau) theo qui trình và thứ tự phân phát mà

nhân viên bưu điện đã sắp xếp, đồng nghiệp của bạn có thể nhận được thư rồi

đọc chúng và có thể viết thư để phúc đáp cho đến khi tác vụ liên quan được

giải quyết.

Với cơ chế này, thư sẽ được phân phát theo cơ chế không đồng bộ vì sự

gửi hay phúc đáp của đồng nghiệp có thể dừng lại trong thời gian do bạn hay

đồng nghiệp đang làm công việc khác với hình minh họa:

3

Page 5: Bao cao btl f11(1)

Hình 1: Qui trình gửi và nhận thư.

Trong đó, Post Office là bưu điện, Mail truck là xe vận chuyển thư và

biểu tượng Mail ứng với hộp thư( Mail Box)

Với dịch vụ gửi thư bằng bưu điện như trên thì những lá thư được ví

như những thông điệp và dịch vụ Service Broker là địa chỉ để thư được người

đưa thư chuyển đến. Tương tự như vậy, hàng đợi( Queue) chính là hộp thư

nơi nắm giữ lá thư một khi chúng được gửi đến đúng địa chỉ người nhận.

Như vậy, chương trình sử dụng Service Broker nắm giữ cuộc trao đổi

với các chương trình khác thì được xem như phân phát thư.

1.2 Thứ tự và phối hợp thông điệp.

Như cách giải thích ở trên, bạn sẽ không cần biết khi nào thì đồng

nghiệp của bạn sẽ đọc thư hay viết thư để phản hồi; tương tự như vậy, ứng

dụng mà bạn sử dụng trong Service Broker cũng không cần biết dịch vụ nhận

xử lý thông điệp có sẵn sàng hay chưa.

Do đó, Service Broker kiểm soát hàng đợi, kỹ thuật lập trình cơ sở dữ

liệu thông thường với hai đặc điểm như sau:

1.2.1 Tích hợp giữa hàng đợi và cơ sở dữ liệu

Tích hợp hàng đợi nghĩa là việc bảo trì và quản trị cơ sở dữ liệu chuẩn

hóa phải bao gồm dịch vụ Service Broker. Đặc biệt người quản trị cơ sở dữ

liệu không có lộ trình nào ứng vời tác vụ để bảo trì dịch vụ Service Broker, vì

nó đã được bao gồ m trong cơ sở dữ liệu.

4

Page 6: Bao cao btl f11(1)

1.2.2 Quan hệ giữa hàng đợi và thông điệp

Bộ khung của dịch vụ Service Broker cung cấp giao tiếp bằng phát

biểu SQL đơn giản cho phép gửi và nhận cùng với việc kết hợp với quá trình

phân phối và xử lý thông điệp. Service Broker đảm bảo chương trình khi

nhận mỗi thông điệp trong cuộc đối thoại chỉ đúng một lần theo thứ tự chúng

được gửi chứ không phải là thứ tự trong hàng đợi.

Ngoài ra, Service Broker bảo đảm hai bộ đọc ứng với hai hàng đợi

không thể đồng thời xử lý thông điệp trong cùng một cuộc đối thoại hay nhóm

đối thoại.

Khi chương trình khởi tạo một cuộc đối thoại cho mỗi tác vụ để giữ

thông điệp đến dịch vụ nhận. Thông điệp chứa đựng dữ liệu được yêu cầu

thực thi theo từng bước trong một tác vụ như nhận thông điệp, xử lý thông

điệp và phản hồi trở lại cho dịch vụ khởi tạo nó. Cuộc đối thoại thật sự kết

thúc phải tuân thủ quy tắc do người lập trình đưa ra.

1.3 Kỹ thuật không đồng bộ tác vụ

Trong kiến trúc của Service Broker, thông điệp được gửi đi giữa các

ứng dụng được cài đặt tính chuyển tắc và bất đồng bộ. Bởi vì, thông điệp bị

lỗi thì toàn bộ hành động trong Service Broker sẽ phục hồi bao gồm cả hành

động gửi và nhận thông điệp.

Khi thông điệp gửi đi với cơ chế không đồng bộ, Database Engine sẽ

kiểm soát quá trình phân phối trong khi ứng dụng vẫn tiếp tục thực thi các tác

vụ khác.

Kỹ thuật không đồng bộ sẽ giúp cho người lập trình tạo ra các ứng

dụng có sử dụng hàng đợi. Hàng đợi cho phép cơ sở dữ liệu giữ nguyên trách

nhiệm của người sử dụng hiện hành trong khi làm việc với các tài nguyên

khác. Service Broker đưa ra hàng đợi như một phần tổng thể của Database

Engine.

5

Page 7: Bao cao btl f11(1)

Kỹ thuật hàng đợi cho phép ứng dụng thực thi công việc trên nhiều tác

vụ khác nhau, khái niệm này được mở rộng trên nhiều Instance của SQL

Server hay SQL Server trên nhiều Server.

1.4 Hỗ trợ ứng dụng độc lập

Service Broker hỗ trợ ứng dụng độc lập cho phép gửi và nhận thông

điệp độc lập với nhau, mặc dù những ứng dụng này có chung cơ chế trao đổi

thông điệp và sử dụng kiến trúc tương tác giữa các dịch vụ với nhau.

Những ứng dụng này chỉ cần chạy trong cùng một Instance của SQL

Server và không nhất thiết cùng một thời điểm, đồng thời chúng không phụ

thuộc vào vị trí vật lý.

1.5 Thành phần của Service Broker

Service Broker có 3 thành phần: Đối thoại, định nghĩa dịch vụ, bảo mật và

mạng.

1.5.1 Thành phần đối thoại

Bao gồm đối thoại đơn và nhóm, dạng thông điệp. Ứng dụng trao đổi

thông điệp được xem như một phần của đối thoại. Mỗi cuộc đối thoại thuộc

trong nhóm đối thoại; nhóm đối thoại có thể chứa nhiều cuộc đối thoại.

Đối thoại trong Service Broker là cuộc trao đổi thông điệp chính xác

giữa hai người tham gia.

1.5.2 Phần định nghĩa dịch vụ

Phần này là kiến trúc cơ bản của các cuộc đối thoại được sử dụng trong

ứng dụng. Chúng bao gồm loại thông điệp dùng cho đối thoại, cơ sở dữ liệu

dùng cho ứng dụng.

6

Page 8: Bao cao btl f11(1)

1.5.3 Phần mạng và bảo mật

Phần mạng và bảo mật là hai thành phần cấu thành cơ hạ tần cho quá

trình trao đổi thông điệp bên ngoài Instance của SQL Server, để hỗ trợ cho

người quản trị có quyền quản lý sự thay đổi của môi trường, cấu hình thành

phần độc lập của ứng dụng.

Tóm lại, phần định nghĩa dịch vụ, mạng và bảo mật là thành phần siêu

dữ liệu trong Instance của SQL Server, trong khi đó đối thoại đơn hay nhóm

và thông điệp là phần dữ liệu của cơ sở dữ liệu chứa đựng nó.

Phần 2.

LỢI ÍCH CỦA SERVICE BROKER

Service Broker cung cấp nhiều lợi ích cho ứng dụng cơ sở dữ liệu bao

gồm: Tương tác cơ sở dữ liệu, thứ tự và phối hợp của thông điệp, tính độc lập

và xử lý công việc uyển chuyển, khóa thông điệp và kích hoạt tự động.

2.1 Tƣơng tác cơ sở dữ liệu

Tương tác cơ sở dữ liệu nâng cao khả năng thực thi và giúp việc quản

trị trở nên đơn giản.

Tương tác với SQL Server cho phép thực hiện tác vụ của một thông

điệp cần sự phối hợp của các chuyển tác khác từ bên ngoài. Một ứng dụng

nhận một hay nhiều thông điệp rồi xử lý và gửi chúng trong cơ sở dữ liệu.

Nếu tác vụ này thất bại thì tất cả các tác vụ khác trong cùng một

chuyển tác sẽ bị phục hồi trở lại trạng thái ban đầu.

Đối với chức năng quản trị cũng được đơn giản hơn do dữ liệu và thông

điệp chứa trong cơ sở dữ liệu một cách có hệ thống.

Chú ý: Với hệ thống trao đổi thông điệp truyền thống, thông điệp được

lưu trong cơ sở dữ liệu có thể trở nên không đồng nhất. Chẳng hạn, khi một

thành phần được phục hồi từ bản sao( backup) thì các thành phần khác cũng

được phục hồi từ chúng trong cùng một thời điểm; trong trường hợp ngược lại

7

Page 9: Bao cao btl f11(1)

thì thông tin của thông điệp sẽ không trùng khớp với thông tin trong cơ sở dữ

liệu; bởi vì Service Broker nắm giữ thông điệp và dữ liệu trong cùng cơ sở dữ

liệu sẽ không đồng bộ.

Môi trường phát triển thông thường cũng là một lợi ích của tương tác

cơ sở dữ liệu. Phần thông điệp của cơ sở dữ liệu này và phần dữ liệu của ứng

dụng khác có thể sử dụng chung ngôn ngữ và công cụ của SQL Server trong

ứng dụng Service Broker, người phát triển ứng dụng có thể sử dụng kỹ thuật

lập trình cho ứng dụng trao đổi thông điệp bằng thủ tục nội tại.

Ngoài ra, các ứng dụng nằm ngoài cơ sở dữ liệu có thể phát triển bằng

giao tiếp cơ sở dữ liệu như ADO.NET

2.2 Thứ tự và phối hợp của thông điệp

Trong hệ thống thông điệp truyền thống, ứng dụng có trách nhiệm sắp

xếp và phối hợp các thông điệp có thứ tự. Ví dụ, ứng dụng ABC gửi thông

điệp thứ 1, 2 rồi thứ 3; ứng dụng XYZ nhận thông điệp thứ 1 và 3, nhưng lỗi

phát sinh cho thông điệp thứ 2. Do đó, ứng dụng ABC sẽ gửi lại thông điệp

thứ 2, như vậy thì thông điệp thứ 2 sẽ nhận theo thứ tự là sau thông điệp thứ 1

và 3.

Trước đây, người lập trình có thể cho phép chờ cho đến khi nhận thông

điệp thứ 2 sau khi nhạn được thông điệp thứ 1 bằng cách lưu thông điệp thứ 3

vào bộ nhớ cache( tương tự như cách xử lý đồng bộ).,

Tuy nhiên, vấn đề cũng có thể xảy ra nếu ứng dụng XYZ nhận thông

điệp thứ 2 nhưng phản hồi lại cho ứng dụng ABC với lý do thất lạc thông

điệp, ứng dụng ABC tiếp tục gửi lại thông điệp thứ 2 và ứng dụng XYZ sẽ

nhận thông điệp thứ 2 hai lần. Như vậy, chương trình sẽ loại bỏ khi thấy trùng

lặp hay xử lý ghi đè. Đứng trên góc độ lập trình, cả hai giải pháp đều khó cài

đặt.

8

Page 10: Bao cao btl f11(1)

Phối hợp thông điệp cũng khó khăn khi trong kiểm soát, một ứng dụng

có thể đệ trình hàng trăm đến hàng ngàn yêu cầu đến dịch vụ. Việc xử lý yêu

cầu đòi hỏi phải mang tính song song và trả về kết quả với thời gian sớm nhất.

Tất các giới hạn vừa trình bày ở trên đều được giải quyết bởi Serviec

Broker từ việc kiểm soát thứ tự của thông điệp, phân phát duy nhất một lần và

tự động nhận dạng đối thoại. Một khi cuộc đối thoại được thiết lập giữa hai

điểm cuối của dịch vụ, ứng dụng sẽ nhận thông điệp chỉ một lần theo thứ tự

mà chúng được gửi.

2.3 Tính độc lập và uyển chuyển trong xử lý

Service Broker cung cấp cách xử lý độc lập giữa ứng dụng khởi tạo và

ứng dụng đích. Một ứng dụng có thể gửi thông điệp vào hàng đợi và tiếp tục

việc xử lý, phản hồi dựa vào Service Broker để bảo đảm thông điệp sẽ đến

được ứng dụng đích.

Với cơ chế uyển chuyển, ứng dụng dùng để khởi tạo sẽ gửi nhiều thông

điệp và dịch vụ trong ứng dụng nhận sẽ xử lý song song phụ thuộc vào khối

lượng công việc đang nắm giữ.

2.4 Khóa thông điệp liên quan

Khóa thông điệp liên quan cho phép nhiều ứng dụng xử lý thông điệp

từ hàng đợi không cần chỉ định tính đồng bộ.

2.5 Tự động kích hoạt

Tự động kích hoạt cho phép ứng dụng điều chỉnh dung lượng của thông

điệp đến hàng đợi. Service Broker cung cấp tính năng cho phép chương trình

chạy trong và ngoài cơ sở dữ liệu có thể kích hoạt. Tuy nhiên, Service Broker

không yêu cầu ứng dụng sử dụng kích hoạt này.

9

Page 11: Bao cao btl f11(1)

Phần 3.

SỬ DỤNG SERVICE BROKER TRONG ỨNG DỤNG

Service Broker là dịch vụ rất mạnh cho phép bạn cài đặt chúng trong

những ứng dụng có cơ chế xử lý không đồng bộ hay phân tán trên nhiều máy,

chẳng hạn như: Trigger không đồng bộ, xử lý truy vấn có xác thực, đọc dữ

liệu có xác thực, xử lý trên phía trình chủ đối với ứng dụng phân tán, hợp nhất

dữ liệu cho trình khách và xử lý lô với qui mô lớn.

Mặc dù có nhiều ứng dụng có thể sử dụng dịch vụ Service Broker của

SQL Server 2005, chúng ta chỉ tìm hiểu ứng dụng cơ bản dùng để gửi và nhận

thông điệp.

Chú ý: Bạn có thể tìm thấy cách tạo hàng đợi, loại thông điệp, giao ước

đối thoại và dịch vụ nhận và gửi thông điệp trong tập tin ServiceBroker.sql.

Để làm điều này, trước tiên bạn kiểm tra cơ sở dữ liệu AccuntSystem

đã cho phép cài đặt dịch vụ Service Broker hay chưa, nếu chưa thì sử dụng

phát biểu SET với tùy chọn ENABLE_BROKER như ví dụ sau:

Ví dụ 1: Khai báo kích hoạt dịch vụ Service Broker

IF NOT EXISTS

(SELECT *FROM sys.databases

WHERE name = 'AccountSystem'

AND is_broker_enabled = 1)

BEGIN

ALTER DATABASE AccountSystem

SET ENABLE_BROKER;

END;

GO

Để tạo hai dịch vụ Service Broker cho ứng dụng, bạn phải tạo hàng

đợi cho dịch vụ khởi tạo với cú pháp như sau:

10

Page 12: Bao cao btl f11(1)

Ví dụ 2: Khai báo hàng đợi cho dịch vụ khởi tạo

CREATE QUEUE QueueForInitiator;

GO

Chú ý: Để kiểm tra hàng đợi có tên QueueForInitiator đã tồn tại hay

chưa trong cơ sở dữ liệu AccountSystem, bạn có thể sử dụng phát biểu như

sau:

Ví dụ 3: Khai báo kiểm tra hàng đợi QueueForInitiator

IF OBJECT_ID('[dbo].[QueueForInitiator]') IS NOT NULL AND EXISTS(SELECT*

FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].[ QueueForInitiator]') AND type = 'SQ')

BEGIN

DROP QUEUE [dbo].[ QueueForTarget]; END;

GO

Tương tự như vậy, bạn tiếp tục tạo hàng đợi cho dịch vụ đích với cú

pháp sau:

Ví dụ 4: Khai báo hàng đợi cho dịch vụ đích

CREATE QUEUE QueueForTarget;

GO

Tương tự như trên, để kiểm tra hàng đợi có tên QueueForTarget đã có

tồn tại hay chưa trong sơ sở dữ liệu AccountSystem, bạn có thể sử dụng phát

biểu như sau:

11

Page 13: Bao cao btl f11(1)

Ví dụ 5: Khai báo kiểm tra hàng đợi QueueForTarget

IF OBJECT_ID('[dbo].[QueueForTarget]') IS

NOT NULL

AND

EXISTS(SELECT*

FROM sys.objects WHERE object_id =

OBJECT_ID('[dbo].[ QueueForTarget]')

AND type = 'SQ')

BEGIN

DROP QUEUE [dbo].[ QueueForTarget];

END;

GO

Sau khi thực thi phát biểu CREATE QUEUE trong hai ví dụ trên, bạn có

thể tìm thấy hai đối tượng hàng đợi xuất hiện trong ngăn Service Broker |

Queue của cơ sở dữ liệu AccountSystem như hình 2:

Hình 2: Hàng đợi

12

Page 14: Bao cao btl f11(1)

Chú ý: Hai hàng đợi vừa được tạo là nơi lưu trữ thông điệp.

Tiếp theo, bạn khai báo để tạo loại thông điệp dùng cho ứng dụng này

với cú pháp như sau:

Ví dụ 6: Khai báo loại thông điệp

CREATE MESSAGE TYPE HelloWorldMessage

VALIDATION = WELL_FORMED_XML;

GO

Chú ý: Bạn có thể sử dụng phát biểu như ví dụ kế tiếp sau đây để kiểm

tra loại thông điệp có tên HelloWorldMessage đã tồn tại trong cơ sở dữ liệu

hay chưa.

Ví dụ 7: Khai báo kiểm tra loại thông điệp HelloWorldMessage

IF EXISTS (SELECT *

FROM sys.service_message_types

WHERE name= 'HelloWorldMessage')

BEGIN

DROP MESSAGE TYPE HelloWorldMessage;

END;

GO

Sau khi thực thi phát biểu trong ví dụ trên, bạn có thể tìm thấy loại

thông điệp tạo ra nó có tên HelloWorldMessage nằm trong ngăn Message

Types như hình 3:

13

Page 15: Bao cao btl f11(1)

Hình 3: Loại thông điệp

Tương tự như trên, bạn tiếp tục khai báo để tạo ra giao ước có tên

ContractForHelloWorld cho phép bất kỳ ứng dụng nào tham gia vào cuộc

đối thoại có thể gửi được loại thông điệp này.

Ví dụ 8: Khai báo tạo ràng buộc

CREATE CONTRACT ContractForHelloWorld

(HelloWorldMessage SENT BY INITIATOR);

GO

Chú ý: Bạn có thể sử dụng phát biểu như trong ví dụ sau đây để kiểm

tra giao ước này đã tồn tại trong cơ sở dữ liệu AccountSystem hay chưa.

Ví dụ 9: Khai báo kiểm tra giao ước ContractForHelloWorld

IF EXISTS (SELECT *

FROM sys.service_contracts

WHERE name = 'ContractForHelloWorld')

BEGIN

DROP CONTRACT ContractForHelloWorld;

END;

GO

14

Page 16: Bao cao btl f11(1)

Bạn có thể tìm thấy ContractForHelloWorld trong ngăn Contracts như

hình 4:

Hình 4: Giao ước sử dụng cho loại thông điệp.

Kế đến, bạn cài đặt hai dịch vụ Service Broker ứng với dịch vụ khởi

tạo có tên InitiatorService như ví dụ:

Ví dụ 10: Khai báo tạo dịch vụ InitiatorService

CREATE SERVICE InitiatorService

ON QUEUE [dbo].[QueueForInitiator];

GO

Chú ý: Để kiểm tra dịch vụ Service Broker có tên InitiatorService đã tồn tại

hay chưa ta sử dụng phát biểu như ví dụ sau:

Ví dụ 11: Khai báo kiểm tra dịch vụ InitiatorService

IF EXISTS (SELECT *

FROM sys.services

WHERE name = 'InitiatorService')

BEGIN

DROP SERVICE InitiatorService;

END;

GO

15

Page 17: Bao cao btl f11(1)

Do dịch vụ đích dùng cho đối thoại giao ước, nên bạn tạo dịch vụ có

tên TargetService có chỉ định giao ước ContractForHelloWorld bằng cách

khai báo như ví dụ:

Ví dụ 12: Khai báo tạo dịch vụ TargetService

CREATE SERVICE TargetService

ON QUEUE [dbo].[QueueForTarget]

(ContractForHelloWorld);

GO

Chú ý: Để kiểm tra dịch vụ Server Broker có tên TargetService đã tồn

tại hay chưa bạn sử dụng phát biểu ví dụ:

Ví dụ 13: Khai báo kiểm tra dịch vụ TargetService

IF EXISTS (SELECT *

FROM sys.services

WHERE name = 'TargetService')

BEGIN

DROP SERVICE TargetService;

END;

GO

Sau khi tạo dịch vụ khởi tạo và đích thành công, bạn có thể tìm thấy

dịch vụ này xuất hiện trong ngăn Service Broker | Service.

Để gửi thông điệp, bạn cần khai báo đoạn phát biểu SQL để bắt đầu

chuyển tác cho cuộc đối thoại rồi gửi thông điệp đến dịch vụ có tên

TargetService như ví dụ:

16

Page 18: Bao cao btl f11(1)

Hình 5: Dịch vụ khởi tạo và đích.

Ví dụ 14: Khai báo gửi thông điệp

-- Bắt đầu chuyển tác

BEGIN TRANSACTION

-- Khai báo biến XML

DECLARE @message XML;

-- Gán giá trị cho biến XML

SET @message = N'<message>Hello World!</message>';

-- Khai báo biến kiểm soát đối thoại

DECLARE @conversationHandler UNIQUEIDENTIFIER;

-- Khai báo bắt đầu đối thoại

BEGIN DIALOG CONVERSATION @conversationHandler

-- Khai báo chỉ định đối thoại từ InitiatorService

FROM SERVICE InitiatorService

-- Khai báo chỉ định đối thoại đến TargetService

TO SERVICE 'TargetService'

17

Page 19: Bao cao btl f11(1)

--

Khai báo chỉ định giao ước đối thoại

ON CONTRACT ContractForHelloWorld

WITH ENCRYPTION = OFF;

-- Khai báo gửi thông điệp

SEND ON CONVERSATION @conversationHandler

MESSAGE TYPE HelloWorldMessage(@message);

END CONVERSATION @conversationHandler;

COMMIT TRANSACTION;

GO

Để kiểm tra thông điệp đang nằm trong hàng đợi, bạn khai báo phát

biểu SELECT như ví dụ sau:

Ví dụ 15: Khai báo đọc thông điệp trong hàng đợi

SELECT service_name, service_contract_name,

Message_type_name, message_body

FROM [dbo].[QueueForTarget]

GO

Kết quả trình bày( như hình 6) khi thực hiện phát biểu SELECT trong ví dụ

trên.

Hình 6: Thông điệp trong hàng đợi.

Để đọc thông điệp gửi đến TargerService từ InitiatorService, bạn khai

báo phát biểu SQL với cấu trúc như sau:

18

Page 20: Bao cao btl f11(1)

Ví dụ 16: Khai báo nhận thông điệp

WHILE( 1 = 1)

BEGIN

-- Khai báo biến

DECLARE

@conversation_handler UNIQUEIDENTIFIER,

@conversation_group_id UNIQUEIDENTIFIER,

@message_body XML,

@message_type_name NVARCHAR(128);

BEGIN TRANSACTION

-- Sử dụng phát biểu WAITFOR

WAITFOR(

GET CONVERSATION

GROUP @conversation_group_id

FROM [dbo].[QueueForTarget]),

TIMEOUT 500;

IF @conversation_group_id IS NULL

BEGIN

ROLLBACK TRANSACTION;

BREAK;

END;

WHILE 1 = 1

BEGIN

-- Sử dụng phát biểu RECEIVE ðể nhận thông ðiệp

RECEIVE

TOP(1)

@conversation_handler = conversation_handle,

@message_type_name = message_type_name,

19

Page 21: Bao cao btl f11(1)

@message_body =

CASE

WHEN validation = 'X'

THEN CAST(message_body AS XML)

ELSE CAST(N'<none/>' AS XML)

END

FROM [dbo].[QueueForTarget]

WHERE conversation_group_id =

@conversation_group_id;

IF @@ROWCOUNT = 0 OR @@ERROR <> 0

BREAK;

SELECT

'Conversation Group Id' =

@conversation_group_id,

'Conversation Handler' =

@conversation_handler,

'Message Type Name' =

@message_type_name,

'Message Body' =

@message_body;

IF @message_type_name =

'http://schemas.microsoft.com/SQL/SeviceBroker/EndDialog'

OR @message_type_name =

'http://schemas.microsoft.com/SQL/SeviceBroker/Error'

BEGIN

END CONVERSATION @conversation_handler;

END;

END;

COMMIT TRANSACTION;

END;

20

Page 22: Bao cao btl f11(1)

Khi thực thi phát biểu trong ví dụ trên, kết quả nhận được trình bày như

hình 7:

Hình 7: Nhận thông điệp

Như vậy, khi bạn truy vấn dữ liệu trong bảng QueueForTarget, lập tức

thông điệp trong hàng đợi QueueForTarget biến mất, bạn có thể kiểm tra lại

bắng cách thực thi phát biểu như trong Ví dụ 13.

Phần 4.

KẾT LUẬN

Từ bối cảnh lập trình, các thành phần cơ sở hạ tầng được tạo ra. Sau đó, để bắt đầu ứng dụng service một cuộc trò chuyện được bắt đầu, các thông điệp ở định dạng XML được gửi như các loại tin nhắn cụ thể cho một danh sách cụ thể, sau đó các thông điệp được tiếp nhận và xử lí. Tại bất kì thời điểm nào ứng dụng service broker có thể nhận được đọc và viết cùng một hàng đợi cũng như có nhiều ứng dụng service broker cư trú trong cùng một cơ sở dữ liệu.

Phần 5.

TÀI LIỆU THAM KHẢO

Donahoo, Speegle, SQL – Practical Guide for Developers, Morgan Kaufmann

Robin Dewson, Beginning SQL Server 2005 for Developers, Apress

Brian Knight, Professional SQL Server 2005 Administration, Wrox

SQL Server 2005 – Lập trình nâng cao, NXB Lao Động – Xã Hội

21