TRƢỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM                 KHOA CÔNG NGHỆ THÔNG TIN                              -----***-----      ...
MỤC LỤC   Giới thiệu Service Broker ........................................................................... 2Phần 1.  ...
Service Broker là dịch vụ mạnh được giới thiệu trong SQL Server2005, mục đích của nó giúp cho người lập trình cơ sở dữ liệ...
1.1 Conversations      Server Broker được thiết kế để thực hiện các chức năng cơ bản về việcgửi và nhận thông điệp. Mỗi đị...
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 Ma...
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átbiểu SQL đơ...
Kỹ thuật hàng đợi cho phép ứng dụng thực thi công việc trên nhiều tácvụ khác nhau, khái niệm này được mở rộng trên nhiều I...
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ệ...
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ệ...
Phối hợp thông điệp cũng khó khăn khi trong kiểm soát, một ứng dụngcó thể đệ trình hàng trăm đến hàng ngàn yêu cầu đến dịc...
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 tro...
Ví dụ 2: Khai báo hàng đợi cho dịch vụ khởi tạo             CREATE QUEUE QueueForInitiator;             GO       Chú ý: Để...
Ví dụ 5: Khai báo kiểm tra hàng đợi QueueForTarget            IF OBJECT_ID([dbo].[QueueForTarget]) IS            NOT NULL ...
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 ứ...
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ênContractForHelloWorld cho p...
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...
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 ContractForHello...
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ácBEGIN TRANSACTION     -- Kha...
--          Khai báo chỉ định giao ước đối thoại  ON CONTRACT ContractForHelloWorld  WITH ENCRYPTION = OFF;  --          K...
Ví dụ 16: Khai báo nhận thông điệpWHILE( 1 = 1)BEGIN-- Khai báo biến      DECLARE            @conversation_handler UNIQUEI...
@message_body =                              CASE                                     WHEN validation = X                 ...
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ôn...
Upcoming SlideShare
Loading in …5
×

Bao cao btl f11(1)

1,256 views
1,179 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,256
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
58
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Bao cao btl f11(1)

  1. 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: Lê Thế Anh Sinh viên thực hiện: Đỗ 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
  2. 2. MỤC LỤC Giới thiệu Service Broker ........................................................................... 2Phần 1. SERVICE BROKER LÀM ĐƢỢC CÁI GÌ? ............................ 2 1.1 Conversations ....................................................................................... 3 1.2 Thứ tự và phối hợp thông điệp. ............................................................ 4 1.2.1 Tích hợp giữa hàng đợi và cơ sở dữ liệu........................................ 4 1.2.2 Quan hệ giữa hàng đợi và thông điệp ............................................ 5 1.3 Kỹ thuật không đồng bộ tác vụ ............................................................ 5 1.4 Hỗ trợ ứng dụng độc lập ....................................................................... 6 1.5 Thành phần của Service Broker ........................................................... 6 1.5.1 Thành phần đối thoại...................................................................... 6 1.5.2 Phần định nghĩa dịch vụ ................................................................. 6 1.5.3 Phần mạng và bảo mật ................................................................... 7Phần 2. LỢI ÍCH CỦA SERVICE BROKER ......................................... 7 2.1 Tương tác cơ sở dữ liệu ........................................................................ 7 2.2 Thứ tự và phối hợp của thông điệp....................................................... 8 2.3 Tính độc lập và uyển chuyển trong xử lý ............................................. 9 2.4 Khóa thông điệp liên quan.................................................................... 9 2.5 Tự động kích hoạt................................................................................. 9Phần 3. SỬ DỤNG SERVICE BROKER TRONG ỨNG DỤNG........ 10Phần 4. KẾT LUẬN ................................................................................. 21Phần 5. TÀI LIỆU THAM KHẢO ......................................................... 21 1
  3. 3. Service Broker là dịch vụ mạnh được giới thiệu trong SQL Server2005, mục đích của nó giúp cho người lập trình cơ sở dữ liệu xây dựng ứngdụ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ậthà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 đổithông điệp giữa hai Instance của SQL Server, nó còn giúp cho người lập trìnhtạ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ọilà 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 đổicác Instance của SQL Server với nhau bằng cách dùng nghi thức truyềnthông TCP/IP. Tóm lại, Service Broker giúp cho người lập trình xây dựng ứng dụngbất đồng bộ( Asynchronous) và được cài đặt một cách độc lập nhưng cùngthực thi một các vụ là để trao đổi tin nhắn. Sau đây là các bước mà ServiceBroker thực hiện trao đổi thông điệp giữa hai Instance của SQL Server. 2
  4. 4. 1.1 Conversations Server Broker được thiết kế để thực hiện các chức năng cơ bản về việcgửi và nhận thông điệp. Mỗi định dạng trao đổi thông điệp đều được xác thựcvà 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ậptrì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 SQL2005 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ênquan, trong khi đó ứng dụng dùng để nhận thông điệp từ hàng đợi được trìnhbà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ạcvới đồng nghiệp ở xa, bạn có thể giao tiếp với họ bằng cách gửi thư thông quadị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ácphươ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 đượcgiả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
  5. 5. 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 đổivớ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ì đồngnghiệp của bạn sẽ đọc thư hay viết thư để phản hồi; tương tự như vậy, ứngdụng mà bạn sử dụng trong Service Broker cũng không cần biết dịch vụ nhậnxử 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ẩnhó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
  6. 6. 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átbiể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ìnhphân phối và xử lý thông điệp. Service Broker đảm bảo chương trình khinhậ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 đợikhô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ầuthự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ếtthú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ácvụ khác. Kỹ thuật không đồng bộ sẽ giúp cho người lập trình tạo ra các ứngdụng có sử dụng hàng đợi. Hàng đợi cho phép cơ sở dữ liệu giữ nguyên tráchnhiệ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ênkhác. Service Broker đưa ra hàng đợi như một phần tổng thể của DatabaseEngine. 5
  7. 7. Kỹ thuật hàng đợi cho phép ứng dụng thực thi công việc trên nhiều tácvụ khác nhau, khái niệm này được mở rộng trên nhiều Instance của SQLServer 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 đổithô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 SQLServer 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 BrokerService 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 đổithông điệp được xem như một phần của đối thoại. Mỗi cuộc đối thoại thuộctrong 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ácgiữ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ệudùng cho ứng dụng. 6
  8. 8. 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ợ chongười quản trị có quyền quản lý sự thay đổi của môi trường, cấu hình thànhphầ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êudữ liệu trong Instance của SQL Server, trong khi đó đối thoại đơn hay nhómvà 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 baogồ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ậpvà 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ảntrị 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ụngnhậ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ộtchuyể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 đượclưu trong cơ sở dữ liệu có thể trở nên không đồng nhất. Chẳng hạn, khi mộtthà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
  9. 9. 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áccơ 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 ứngdụ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ậtlậ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ằnggiao tiếp cơ sở dữ liệu như ADO.NET2.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ắpxế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ỗiphát sinh cho thông điệp thứ 2. Do đó, ứng dụng ABC sẽ gửi lại thông điệpthứ 2, như vậy thì thông điệp thứ 2 sẽ nhận theo thứ tự là sau thông điệp thứ 1và 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ứ 3và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ùnglặ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
  10. 10. Phối hợp thông điệp cũng khó khăn khi trong kiểm soát, một ứng dụngcó 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êucầ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 ServiecBroker 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ụcviệ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ốilượ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ệptừ 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ìnhchạy trong và ngoài cơ sở dữ liệu có thể kích hoạt. Tuy nhiên, Service Brokerkhông yêu cầu ứng dụng sử dụng kích hoạt này. 9
  11. 11. 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 trongnhữ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ấtdữ 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ủaSQL Server 2005, chúng ta chỉ tìm hiểu ứng dụng cơ bản dùng để gửi và nhậnthô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ụngphá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
  12. 12. 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 haychư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átbiểu như sau: 11
  13. 13. 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
  14. 14. 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àyvớ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ểmtra loại thông điệp có tên HelloWorldMessage đã tồn tại trong cơ sở dữ liệuhay 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ạithông điệp tạo ra nó có tên HelloWorldMessage nằm trong ngăn MessageTypes như hình 3: 13
  15. 15. 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ênContractForHelloWorld 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ểmtra 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
  16. 16. 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ởitạ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]; GOChú ý: Để kiểm tra dịch vụ Service Broker có tên InitiatorService đã tồn tạihay 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
  17. 17. 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áchkhai 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ồntạ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ấydị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 đầuchuyển tác cho cuộc đối thoại rồi gửi thông điệp đến dịch vụ có tênTargetService như ví dụ: 16
  18. 18. 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ácBEGIN 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
  19. 19. -- 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átbiể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] GOKế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 khaibáo phát biểu SQL với cấu trúc như sau: 18
  20. 20. Ví dụ 16: Khai báo nhận thông điệpWHILE( 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
  21. 21. @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
  22. 22. 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ứcthông điệp trong hàng đợi QueueForTarget biến mất, bạn có thể kiểm tra lạibắ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ạngXML đượ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 brokercư 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

×