Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Mình đã giới thiệu với các bạn về cách cấu hình cho JMS Endpoint trong bài viết trước. Trong bài viết này, mình sẽ làm một ví dụ về sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB để xem nó hoạt động như thế nào nhé các bạn!

Vậy bài toán của chúng ta là gì?

Giả sử chúng ta có một hệ thống có nhiều ứng dụng trong đó ứng dụng A cần gửi một message sang các ứng dụng khác qua giao thức HTTP.

Trước khi có khái niệm ESB thì để giải quyết bài toán này, chúng ta thường sẽ sử dụng cách là tạo một service trong các ứng dụng khác nhận request truyền message từ ứng dụng A. Và do đó, ứng dụng A có thể truyền message qua cho các ứng dụng khác một cách trực tiếp và dễ dàng.

Nhưng như thế thì, ứng dụng A sẽ phải gọi nhiều lần qua các service của các ứng dụng đó để truyền cùng một message. Thử tưởng tượng, nếu số lượng các ứng dụng ngày càng tăng lên thì sao? Cũng phải sửa lại code của ứng dụng A để đáp ứng nhu cầu của chúng ta.

Hướng tiếp cận của ESB thì giúp chúng ta giải quyết vấn đề khó khăn này. Các ứng dụng khác lúc này sẽ cùng nhau lắng nghe một Queue hoặc một Topic của JMS server được quản lý bởi ESB, và ESB sẽ đóng vai trò nhận message từ ứng dụng A qua giao thức HTTP sau đó sẽ chuyển đổi HTTP message này sang dưới dạng JMS message và gửi tới Queue hay Topic mà các ứng dụng khác đang lắng nghe.

Cách giải quyết này sẽ giúp cho hệ thống của chúng ta có thể chỉnh sửa, mở rộng được dễ dàng mà không cần phải chỉnh sửa lại hệ thống đang chạy.

OK, lý thuyết là như vậy, còn thực tế triển khai ứng dụng Mule ESB này như thế nào, chúng ta hãy cùng đi vào chi tiết nhé các bạn!

– Đầu tiên, mình sẽ tạo một Mule project tên là ESBExample sử dụng Anypoint Studio.

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Bạn nào chưa biết cách tạo Mule ESB project thì có thể thao khảo bài viết này.

– Tiếp theo, chúng ta sẽ hiện thực phần nhận request truyền message từ ứng dụng A cho ứng dụng Mule ESB.

Mule ESB có một ConnectorHTTP để hiện thực một service cho phép ứng dụng Mule ESB có thể nhận được HTTP request từ ứng dụng khác.

Bây giờ, các bạn hãy tìm Connector HTTP ở thanh công cụ Mule Palette,

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

rồi kéo thả nó vào Editor của Anypoint Studio

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Để cấu hình cho HTTP Listener Connector, các bạn hãy tham khảo bài viết này nhé.

Ở đây, mình cấu hình nó như sau:

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Global HTTP Listener Configuration

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

– Sau khi nhận request từ ứng dụng A, chúng ta sẽ dùng một cái Transformer của Mule ESB là “Byte Array to String” để chuyển đổi body request data sang chuỗi String.

Để làm điều này, trong Mule Palette, các bạn hãy tìm TransformerByte Array to String

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

rồi kéo thả nó vào phần Process trong Editor của Anypoint Studio.

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Với Tranformer này, các bạn không cần phải cấu hình gì cả.

– Bây giờ, chúng ta sẽ đi đến phần cuối cùng là thêm một JMS Endpoint để gửi request data ở dạng String tới một Topic của ActiveMQ server.

Các bạn hãy tìm JMS Endpoint trong Mule Palette,

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

rồi kéo thả nó vào trong Process của Editor sau Transformer “Byte Array To String

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Để cấu hình cho JMS Endpoint, các bạn hãy tham khảo bài viết này nhé!

Ở đây mình cấu hình như sau:

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Global JMS Endpoint cho ActiveMQ

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Ở bước này, chúng ta cần phải thêm dependency của ActiveMQ vào ứng dụng Mule ESB của chúng ta.

Các bạn hãy mở tập tin pom.xml trong project của chúng ta để thêm dependency này vào nhé.

– Bước cuối cùng đó là chúng ta cần chạy một ActiveMQ server để ứng dụng Mule ESB của chúng ta có thể kết nối và gửi message.

Nếu bạn nào chưa biết cách cài đặt và thêm mới một Topic trong ActiveMQ server thì có thể tham khảo các bài viết sau:

Cài đặt Apache ActiveMQ

Thêm mới Topic trong ActiveMQ

Ở đây, mình đã thêm mới Topic tên “test“:

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

OK, vậy là mọi thứ đã xong xuôi, giờ các bạn hãy chạy ứng dụng Mule ESB của chúng ta trong Anypoint Studio để test, kiểm tra kết quả nhé!

Để chạy ứng dụng Mule ESB trong Anypoint Studio các bạn click chuột phải vào project chọn Run As…, sau đó chọn Mule Application with Maven.

Kết quả:

vi-du-co-ban-ve-mule-esb-su-dung-anypoint-studio-13

Để kiểm tra, các bạn hãy dùng một REST Client để gửi một HTTP request tới ứng dụng Mule ESB của chúng ta và kiểm tra kết quả ở Topic trong ActiveMQ server.

Ví dụ ở đây mình sẽ send tới ứng dụng ESB với địa chỉ

với nội dung “Hello Mule ESB”

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Và đây là kết quả trong ActiveMQ server

Sử dụng JMS Endpoint cho ActiveMQ trong ứng dụng Mule ESB

Logging message:

Add Comment