Giới thiệu về Apache Dubbo
Apache Dubbo là một khung công tác RPC hiệu suất cao và mã nguồn mở, phục vụ việc xây dựng các ứng dụng dựa trên kiến trúc microservices. Nó cung cấp các tính năng quản lý dịch vụ toàn diện như đăng ký dịch vụ, phát hiện dịch vụ, cân bằng tải và giám sát. Để hiểu rõ hơn về cách Dubbo hoạt động, việc biên dịch mã nguồn và thiết lập một môi trường kiểm thử cơ bản là rất hữu ích. Bài viết này sẽ hướng dẫn bạn cách thực hiện điều đó.
1. Chuẩn bị Môi trường và Biên dịch Mã nguồn
Đầu tiên, bạn cần có Git và Maven được cài đặt trên hệ thống của mình. Sau đó, làm theo các bước dưới đây để tải về và biên dịch mã nguồn Dubbo.
1.1. Biên dịch Opensesame (Áp dụng cho các phiên bản Dubbo cũ)
Một số phiên bản Dubbo cũ có thể phụ thuộc vào thư viện opensesame. Nếu phiên bản Dubbo bạn đang làm việc yêu cầu, hãy thực hiện bước này:
$ git clone git@github.com:alibaba/opensesame.git
$ cd opensesame
$ mvn install
1.2. Biên dịch Dubbo
Tiếp theo, tải mã nguồn Dubbo và biên dịch:
$ git clone git@github.com:alibaba/dubbo.git
$ cd dubbo
$ mvn clean install -Dmaven.test.skip
Lệnh trên sẽ biên dịch dự án và cài đặt các artifact vào kho lưu trữ Maven cục bộ của bạn, đồng thời bỏ qua các bài kiểm thử để tiết kiệm thời gian.
1.3. Cấu hình cho Môi trường Phát triển (IDE)
Để dễ dàng nhập dự án vào các IDE như IntelliJ IDEA, bạn có thể tạo các tệp cấu hình cần thiết:
$ mvn idea:idea
Sau đó, bạn có thể nhập dự án Dubbo vào IDE của mình dưới dạng một dự án Maven.
2. Thiết lập Môi trường Kiểm thử
Để kiểm thử Dubbo, chúng ta sẽ thiết lập một môi trường cơ bản bao gồm ba thành phần chính:
- Nhà cung cấp dịch vụ (Service Provider): Ứng dụng cung cấp các dịch vụ.
- Trung tâm đăng ký (Registry Center): Nơi các dịch vụ được đăng ký và phát hiện.
- Người tiêu thụ dịch vụ (Service Consumer): Ứng dụng gọi các dịch vụ từ nhà cung cấp.
Trong ví dụ này, chúng ta sẽ sử dụng Multicast làm trung tâm đăng ký dịch vụ. Multicast là một lựa chọn đơn giản cho môi trường phát triển cục bộ mà không cần cài đặt thêm dịch vụ bên ngoài.
2.1. Cấu hình Nhà cung cấp dịch vụ (dubbo-demo-provider)
Mở tệp Dubbo/dubbo-demo/dubbo-demo-provider/src/test/resources/dubbo.properties và điều chỉnh nội dung như sau:
# Cấu hình cho ứng dụng cung cấp dịch vụ Dubbo
app.name=sample-provider-app
app.owner=devteam
# Địa chỉ trung tâm đăng ký: Sử dụng Multicast cho ví dụ này
# Đảm bảo 'unicast=false' nếu chạy nhiều ứng dụng trên cùng một máy chủ
registry.address=multicast://230.0.0.1:4567?unicast=false
# registry.address=zookeeper://localhost:2181
# registry.address=redis://localhost:6379
# registry.address=dubbo://192.168.1.100:20880
# Cấu hình giao thức dịch vụ
service.protocol.name=dubbo
service.protocol.port=20888
# Các container được sử dụng để khởi động dịch vụ
container.types=spring,log4j
# Chiến lược cân bằng tải cho các dịch vụ được cung cấp
service.load.balance.strategy=random
# log.file=logs/provider-service.log
# log.level=INFO
Lưu ý: Nếu bạn chạy cả nhà cung cấp và người tiêu thụ dịch vụ trên cùng một máy, việc đặt unicast=false trong cấu hình Multicast là rất quan trọng để đảm bảo các yêu cầu không bị chiếm đoạt không đúng cách. Điều này đặc biệt đúng với trung tâm đăng ký Multicast.
2.2. Cấu hình Người tiêu thụ dịch vụ (dubbo-demo-consumer)
Mở tệp Dubbo/dubbo-demo/dubbo-demo-consumer/src/test/resources/dubbo.properties và điều chỉnh nội dung tương tự:
# Cấu hình cho ứng dụng tiêu thụ dịch vụ Dubbo
app.name=sample-consumer-app
app.owner=devteam
# Địa chỉ trung tâm đăng ký: Phải khớp với nhà cung cấp
registry.address=multicast://230.0.0.1:4567?unicast=false
# registry.address=zookeeper://localhost:2181
# registry.address=redis://localhost:6379
# registry.address=dubbo://192.168.1.100:20880
# Giao thức giám sát, nếu cần
monitor.protocol=registry
# log.file=logs/consumer-client.log
# log.level=INFO
2.3. Chạy các Ứng dụng
Sau khi cấu hình, bạn có thể khởi chạy cả nhà cung cấp và người tiêu thụ dịch vụ. Trong IDE của bạn (ví dụ: IntelliJ IDEA):
- Để khởi động nhà cung cấp: Chuột phải vào lớp
Dubbo/dubbo-demo/dubbo-demo-provider/src/test/java/com/alibaba/dubbo/demo/provider/DemoProvider.javavà chọn "Run". - Để khởi động người tiêu thụ: Chuột phải vào lớp
Dubbo/dubbo-demo/dubbo-demo-consumer/src/test/java/com/alibaba/dubbo/demo/consumer/DemoConsumer.javavà chọn "Run".
2.4. Quan sát Kết quả
Khi cả hai ứng dụng đang chạy, bạn sẽ thấy các thông báo nhật ký xuất hiện trong cửa sổ console của IDE.
Trong console của nhà cung cấp dịch vụ (DemoProvider), bạn sẽ thấy các phản hồi yêu cầu:
INFO [10:05:01] Phản hồi yêu cầu #1 từ: /192.168.1.50:51234, dữ liệu: {session_id: "XYZ789"}
INFO [10:05:03] Phản hồi yêu cầu #2 từ: /192.168.1.50:51234, dữ liệu: {session_id: "XYZ789"}
INFO [10:05:05] Phản hồi yêu cầu #3 từ: /192.168.1.50:51234, dữ liệu: {session_id: "XYZ789"}
Trong console của người tiêu thụ dịch vụ (DemoConsumer), bạn sẽ thấy các yêu cầu được gửi và phản hồi nhận được:
INFO [10:04:59] Gửi yêu cầu #1 tới dịch vụ.
INFO [10:05:02] Nhận phản hồi #1 từ nhà cung cấp: 192.168.1.100:20888, thông tin: {reqId: "ABC001", status: "OK", latency: "15ms"}
INFO [10:05:02] Gửi yêu cầu #2 tới dịch vụ.
INFO [10:05:05] Nhận phản hồi #2 từ nhà cung cấp: 192.168.1.100:20888, thông tin: {reqId: "ABC002", status: "OK", latency: "18ms"}
Điều này cho thấy rằng nhà cung cấp dịch vụ đã khởi động, đăng ký với trung tâm đăng ký Multicast, và người tiêu thụ dịch vụ đã phát hiện và gọi thành công dịch vụ.
Bạn có thể thử nghiệm với các loại trung tâm đăng ký khác như Zookeeper, Redis, hoặc Dubbo (nếu bạn có một trung tâm đăng ký Dubbo đang chạy) bằng cách bỏ ghi chú và điều chỉnh các dòng cấu hình tương ứng trong tệp dubbo.properties.