Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
Quarkus REST Client proxy: cấu hình proxy theo từng client

Quarkus REST Client proxy: cấu hình proxy theo từng client

Chuyên viên Kỹ thuật ProxyVN 08-23-2026 Đang tính... phút đọc

Quarkus REST Client proxy là cách khai báo proxy cho các REST client viết bằng interface trong Quarkus, mỗi client có thể dùng một proxy riêng. ProxyVN đã dựng project Quarkus 3.40.1 với hai client để kiểm từng thiết lập. Bài ghi lại kết quả chạy thật, gồm cả các lỗi thường gặp.

Quarkus REST Client proxy dùng trong tình huống nào

Quarkus REST Client cho phép anh em khai báo một interface Java có chú thích, rồi framework tạo client gọi API từ interface đó. Một ứng dụng thật hay có nhiều client như vậy: một cái gọi dịch vụ nội bộ, một cái gọi API bên thứ ba, một cái gọi hệ thống thanh toán. Mỗi cái có thể cần đi qua một đường mạng khác nhau.

Đó là lý do chuyện proxy trong Quarkus không chỉ là bật hay tắt. Anh em muốn client gọi API bên ngoài đi qua một proxy có tài khoản, trong khi client gọi dịch vụ nội bộ đi thẳng. Tình huống khác là kiểm thử: chạy cùng một client qua hai proxy ở hai khu vực để so sánh phản hồi.

Bài này tập trung vào đúng điểm đó: cấu hình proxy theo từng REST client, và kiểm tra rằng cấu hình áp dụng đúng client được chỉ định. Mình đã chạy một project Quarkus thật để kiểm, nên phần lớn kết quả trong bài là kết quả đo được.

Bài này khác bài Java proxy ở đâu

ProxyVN đã có bài Java proxy, nói về biến JVM và HttpClient thuần. Bài này đi vào lớp cấu hình của Quarkus nằm phía trên: khai báo bằng tệp application.properties, tên cấu hình dùng lại cho nhiều client, và cách nó tương tác với biến JVM. Anh em không cần đọc lại phần HttpClient để theo bài này.

Nếu build của anh em dùng Maven hoặc Gradle qua proxy, đó là việc khác và nằm ở bài Maven và Gradle proxy. Bài này chỉ nói về proxy khi ứng dụng đang chạy và gọi API.

Điều đã kiểm và chưa kiểm

Mình đã chạy thật trên Windows, JDK 21 và Maven 3.9.9 với Quarkus 3.40.1. Project có hai REST client, một trang đích lab và một proxy HTTP lab có mật khẩu. Chín kịch bản cấu hình đều có kết quả ghi lại ở phần kiểm chứng.

Chưa kiểm: kết nối https qua proxy, proxy SOCKS5, Credentials Provider, chế độ dev có enable-local-proxy, thuộc tính cũ proxy-address, và phần mở rộng RESTEasy Client cũ. Mình sẽ nói rõ từng điểm khi gặp.

Quarkus REST Client proxy theo Proxy Registry và tên cấu hình

Proxy Registry và hai client

Proxy Registry và hai client

Hướng dẫn chính thức về REST Client có một mục riêng cho proxy. Mục này nói REST Client có thể gửi yêu cầu qua proxy. Anh em vẫn dựa được vào cài đặt proxy của JVM. REST Client còn cho định nghĩa một proxy mặc định và nhiều cấu hình proxy có tên để các client tham chiếu.

Toàn bộ cấu hình proxy nằm trong một nơi gọi là Proxy Registry, dưới tiền tố quarkus.proxy. Mỗi cấu hình gồm host, port, username, password và non-proxy-hosts. Client nào muốn dùng cấu hình nào thì trỏ tới tên của nó.

Cấu hình mặc định

Nếu anh em đặt các thuộc tính quarkus.proxy.host, quarkus.proxy.port và các thuộc tính liên quan mà không có tên, đó là cấu hình mặc định. Theo tài liệu, mọi REST Client không tham chiếu một cấu hình có tên sẽ dùng cấu hình mặc định này.

Cấu hình có tên

Cấu hình có tên đặt dưới quarkus.proxy.tên.host và tương tự. Một client dùng nó bằng thuộc tính proxy-configuration-name của riêng client đó. Tài liệu mô tả ví dụ hai client: client1 trỏ tới cấu hình có tên, client2 không khai báo nên không dùng proxy nào, trừ khi có cấu hình mặc định.

Giá trị none

Phần tham chiếu cấu hình của hướng dẫn ghi một giá trị đặc biệt cho proxy-configuration-name: none. Nó tắt việc dùng cấu hình mặc định quarkus.proxy cho client đó. Mình sẽ kiểm xem giá trị này tắt được những gì ở phần kiểm chứng.

Hai ký hiệu cần phân biệt

Có hai tầng tên khác nhau và rất dễ nhầm. Tên của client, như client1, là configKey khai báo trong chú thích @RegisterRestClient. Tên của cấu hình proxy, như my-proxy, là phần sau quarkus.proxy. Thuộc tính quarkus.rest-client.client1.proxy-configuration-name nối hai tên với nhau.

Chuẩn bị phiên bản, JDK và môi trường cho Quarkus REST Client proxy

Trước hết, anh em kiểm phiên bản Quarkus. Tài liệu chính thức mình đọc ghi bản mới nhất là 3.40, kèm các nhánh 3.33, 3.27, 3.20 và 3.15. Cơ chế Proxy Registry với tiền tố quarkus.proxy có trong hướng dẫn của bản mới nhất. Mình không kiểm nhánh cũ, nên nếu anh em dùng bản cũ hơn, hãy mở đúng hướng dẫn của nhánh đó.

JDK và công cụ build

Quarkus 3 cần JDK từ 17 trở lên. Máy mình chỉ có Java 8, nên mình tải JDK 21 Temurin từ API của Adoptium và Maven 3.9.9 từ kho lưu trữ của Apache Maven, giải nén vào một thư mục tạm, rồi xóa sau khi xong. Mình không đối chiếu checksum các tệp này vì chúng chỉ chạy một lần trên máy lab, và anh em nên làm bước đối chiếu trong môi trường thật.

Lần build đầu mất khoảng hai phút vì Maven tải toàn bộ phụ thuộc. Các lần sau nhanh hơn nhiều. Project dùng một phụ thuộc duy nhất là quarkus-rest-client, cùng với BOM của Quarkus.

Phân biệt hai loại REST client trong Quarkus

Tài liệu cấu hình ghi chú ở nhiều chỗ rằng một số thuộc tính không áp dụng cho RESTEasy Client, loại client cũ cung cấp bởi quarkus-resteasy-client. Thuộc tính proxy-configuration-name nằm trong số đó. Bài này dùng extension quarkus-rest-client, tức loại client mới, nên cấu hình trong bài chỉ áp dụng cho loại này.

Anh em kiểm nhanh bằng cách xem tên phụ thuộc trong pom.xml. Nếu thấy resteasy-client, anh em đang dùng loại cũ, và tài liệu cấu hình của loại đó khác.

Thông tin proxy

Anh em cần địa chỉ, cổng, và cách xác thực. Quarkus REST Client nhận username và password trong cấu hình, nên proxy có tài khoản dùng được. Proxy xác thực bằng whitelist IP cũng dùng được, và đơn giản hơn vì không có bí mật nào trong tệp cấu hình. Bài xác thực proxy bằng IP whitelist hay user password so sánh hai hướng.

Bài định dạng proxy giúp anh em tách chuỗi ip:port:user:pass của nhà cung cấp thành bốn thuộc tính riêng. Với Quarkus, không cần ghép thành URL, nên ít lo chuyện mã hóa ký tự đặc biệt hơn các công cụ khác.

Cấu hình tối thiểu cho Quarkus REST Client proxy với hai client

Cấu hình application.properties

Cấu hình application.properties

Project lab có hai interface giống hệt nhau về cấu trúc, khác ở configKey. Mỗi interface có một phương thức gọi đường dẫn /ip của trang đích lab.

@RegisterRestClient(configKey = "client1")
public interface Client1 {
    @GET @Path("/ip") @Produces("application/json") String ip();
}

Interface thứ hai tên Client2 và có configKey là client2. Một lớp chính nhận hai client bằng @Inject @RestClient, gọi lần lượt từng client rồi in kết quả hoặc lỗi. Phần phụ thuộc trong pom.xml chỉ có quarkus-rest-client.

Tệp application.properties

Cấu hình lab gồm địa chỉ trang đích cho cả hai client, một cấu hình proxy có tên và dòng gán nó cho client1.

quarkus.rest-client.client1.url=http://site.lab.test:19341
quarkus.rest-client.client2.url=http://site.lab.test:19341
 
quarkus.proxy.my-proxy.host=127.0.0.1
quarkus.proxy.my-proxy.port=19342
quarkus.proxy.my-proxy.username=user1
quarkus.proxy.my-proxy.password=matkhau-thu
quarkus.rest-client.client1.proxy-configuration-name=my-proxy

Hai client cùng trỏ vào một địa chỉ đích. Trang đích dùng tên miền đuôi .test mà chỉ proxy lab phân giải được. Nhờ đó, nếu một client đi thẳng thì nó lỗi phân giải tên, còn nếu đi qua proxy thì nhận kết quả. Đây là cách phân biệt rõ ràng hai đường đi mà không cần đọc nhật ký.

Mật khẩu có ký tự đặc biệt

Mật khẩu thật của proxy lab trong các lần chạy là một chuỗi có ký tự @ và #. Cấu hình ghi nguyên chuỗi đó, không mã hóa gì, và client1 vẫn xác thực thành công. Với tệp .properties, ký tự # giữa dòng giá trị không phải bắt đầu chú thích, nên giá trị được đọc đủ.

Điều này khác các công cụ nhận proxy dạng URL, nơi ký tự @ phá cấu trúc địa chỉ. Vì Quarkus tách host, port, username và password thành các thuộc tính riêng, anh em không phải mã hóa phần trăm. Ngoại lệ là khi truyền qua dòng lệnh hay biến môi trường, nơi shell có thể xử lý ký tự lạ theo cách riêng.

Cách chạy

Sau khi build bằng Maven, ứng dụng chạy bằng lệnh java -jar trỏ vào quarkus-run.jar trong thư mục target/quarkus-app. Ghi đè cấu hình khi chạy bằng tùy chọn -D đặt trước -jar. Một lỗi mình mắc lần đầu là đặt -D sau -jar: khi đó chúng trở thành tham số của ứng dụng, không phải thuộc tính hệ thống, và mọi kịch bản cho cùng một kết quả.

Kiểm chứng Quarkus REST Client proxy bằng chín kịch bản đã chạy thật

Chín kịch bản đã chạy

Chín kịch bản đã chạy

Mỗi kịch bản chạy cùng ứng dụng với một thay đổi cấu hình qua tùy chọn -D, rồi ghi kết quả của hai client. Nhật ký phía proxy lab xác nhận yêu cầu nào đã qua proxy và tài khoản có đúng không.

Bảng: Kiểm chứng Quarkus REST Client proxy bằng chín kịch bản đã chạy thật

#

Thay đổi cấu hình

client1

client2

1

Giữ nguyên: client1 dùng my-proxy

Qua proxy, nhận kết quả

Lỗi phân giải tên, đi thẳng

2

Thêm cấu hình mặc định quarkus.proxy

Qua proxy

Qua proxy

3

Mặc định, client2 đặt none

Qua proxy

Lỗi phân giải tên

4

Sai mật khẩu của my-proxy

Lỗi 407

Lỗi phân giải tên

5

Tên cấu hình không tồn tại

Lỗi IllegalStateException

Lỗi phân giải tên

6

non-proxy-hosts chứa host đích

Đi thẳng, lỗi phân giải tên

Lỗi phân giải tên

7

client2 dùng cấu hình trỏ cổng không có proxy

Qua proxy

Lỗi từ chối kết nối

8

Chỉ bật biến JVM http.proxyHost, client1 đặt none

Đi thẳng

Qua proxy

9

Biến JVM bật, cả hai client đặt none

Đi thẳng

Đi thẳng

Kịch bản 1 là kết quả chính. Chỉ client1 có tên cấu hình nên chỉ client1 đi qua proxy, đúng như tài liệu mô tả. Client2 không có cấu hình nào nên đi thẳng và lỗi phân giải tên.

Kịch bản 2 và 3: cấu hình mặc định

Khi thêm cấu hình mặc định quarkus.proxy, client2 cũng đi qua proxy, vì nó không tham chiếu cấu hình có tên nào. Đặt proxy-configuration-name là none cho client2 đưa nó về đi thẳng, đúng như mô tả của tài liệu cho giá trị này.

Client1 ở kịch bản 3 vẫn qua proxy vì nó có tên cấu hình riêng. Cấu hình mặc định và cấu hình có tên trong lab trỏ về cùng một proxy, nên kịch bản này chưa cho biết cái nào thắng khi chúng khác nhau. Tài liệu chỉ nói cấu hình mặc định dành cho client không tham chiếu tên nào.

Kịch bản 4 và 5: lỗi xác thực và lỗi tên

Sai mật khẩu cho ra ngoại lệ ClientWebApplicationException với thông báo Proxy Authentication Required và mã 407. Nhật ký phía proxy ghi nhận có tiêu đề xác thực, tên đăng nhập đúng, nhưng xác thực thất bại. Đây là mẫu lỗi cần nhận ra: tài khoản sai nằm ở cấu hình, không ở mạng.

Tên cấu hình không tồn tại cho ra IllegalStateException với thông báo rằng cấu hình proxy được yêu cầu nhưng thuộc tính host của nó chưa được định nghĩa. Tài liệu có nói trước điều này: nếu đặt tên mà không tìm thấy cấu hình, một lỗi sẽ được ném lúc chạy. Lỗi xuất hiện lúc gọi, không phải lúc khởi động, nên một lỗi chính tả trong tên chỉ lộ ra khi client được dùng lần đầu.

Gõ sai tên cấu hình proxy không làm ứng dụng sập lúc khởi động. Nó chỉ làm client đó lỗi ở lần gọi đầu tiên.

Kịch bản 6: non-proxy-hosts

Khi thuộc tính non-proxy-hosts của cấu hình my-proxy chứa host đích, client1 đi thẳng và lỗi phân giải tên. Điều này xác nhận danh sách ngoại lệ hoạt động theo host đích. Tài liệu ví dụ đặt thuộc tính này ở cấu hình mặc định, và kịch bản của mình đặt ở cấu hình có tên.

Mình chỉ kiểm khớp trùng tên host đầy đủ. Các kiểu mẫu như ký tự đại diện, hay tên miền con, mình chưa kiểm. Tài liệu cấu hình nói thuộc tính này giống http.nonProxyHosts của JVM, nên anh em có thể đọc quy tắc mẫu ở tài liệu của JVM, nhưng mình không dùng đó làm kết luận.

Kịch bản 7: proxy chết

Cấu hình trỏ tới cổng không có proxy cho ra ConnectException với thông báo từ chối kết nối. Lỗi này khác hẳn lỗi 407 và lỗi phân giải tên. Ba loại lỗi, từ chối kết nối, 407 và lỗi phân giải tên, nói với anh em ba điều khác nhau: proxy không chạy, proxy từ chối tài khoản, và yêu cầu không đi qua proxy.

Quarkus REST Client proxy và biến JVM: ai thắng ai

Tài liệu nói anh em vẫn có thể dựa vào cài đặt proxy của JVM. Hai kịch bản cuối của mình kiểm điều đó và cho thấy một chi tiết thú vị.

Ở kịch bản 8, mình bật biến JVM http.proxyHost và http.proxyPort, và đặt client1 là none. Client2, vốn không có cấu hình nào, đi qua proxy theo biến JVM. Nhật ký proxy ghi nhận yêu cầu không kèm tiêu đề xác thực, vì biến JVM trong kịch bản chỉ có host và cổng, không có tài khoản.

Ở kịch bản 9, mình bật biến JVM và đặt cả hai client là none. Cả hai đi thẳng. Trong thử nghiệm này, none thắng biến JVM: giá trị none không chỉ tắt cấu hình quarkus.proxy mà còn tắt luôn proxy do JVM chỉ định.

Hệ quả khi triển khai

Nếu môi trường chạy, như một container hay máy chủ ứng dụng, đã đặt biến JVM về proxy, các client không có cấu hình riêng sẽ đi theo biến đó. Anh em có thể không để ý điều này. Muốn một client đi thẳng, đặt none cho nó. Muốn một client dùng đúng một proxy cụ thể, gán tên cấu hình cho nó.

Mình chỉ kiểm biến http.proxyHost cho yêu cầu http. Biến dành cho https chưa kiểm, và chưa kiểm xem JVM có tôn trọng http.nonProxyHosts trong tình huống này không.

Thuộc tính cũ proxy-address

Tài liệu cấu hình liệt kê các thuộc tính cũ: proxy-address, proxy-user, proxy-password và non-proxy-hosts nằm trực tiếp dưới quarkus.rest-client. Tất cả được ghi là đã lỗi thời, và nên dùng proxy-configuration-name thay thế. Tài liệu còn nói proxy-configuration-name bị bỏ qua nếu proxy-address được đặt.

Hệ quả: một ứng dụng cũ còn proxy-address trong cấu hình sẽ lờ đi tên cấu hình mới. Khi chuyển sang Proxy Registry, anh em xóa các thuộc tính cũ, không để chúng nằm song song. Mình chưa chạy thuộc tính cũ, nên chỉ dựa vào mô tả của tài liệu.

Lỗi thường gặp khi chạy Quarkus REST Client proxy

Ba nhóm lỗi khi gọi qua proxy

Ba nhóm lỗi khi gọi qua proxy

Bảng dưới gom các lỗi mình đã gặp trong lab và vài lỗi suy ra từ tài liệu. Cột cuối nêu cách kiểm đầu tiên.

Bảng: Lỗi thường gặp khi chạy Quarkus REST Client proxy

Triệu chứng

Nguyên nhân

Cách kiểm

Ngoại lệ 407 Proxy Authentication Required

Sai username hoặc password

Xem nhật ký proxy, kiểm cặp thuộc tính

IllegalStateException về host chưa định nghĩa

Tên cấu hình sai hoặc thiếu

So tên với quarkus.proxy.tên

Một client qua proxy, client khác đi thẳng

Chỉ client đó có tên cấu hình

Xem proxy-configuration-name của từng client

Mọi client đều qua proxy ngoài ý muốn

Có cấu hình mặc định hoặc biến JVM

Đặt none cho client cần đi thẳng

Cấu hình không có tác dụng

Dùng RESTEasy Client cũ hoặc đặt sai configKey

Kiểm tên extension và configKey

Đổi cấu hình mà kết quả không đổi

Tùy chọn -D đặt sau -jar

Đặt -D trước -jar

Từ chối kết nối

Proxy không chạy hoặc sai cổng

Kiểm cổng proxy bằng công cụ khác

Lỗi phân giải tên

Yêu cầu không đi qua proxy

Kiểm tên cấu hình và non-proxy-hosts

Dùng nhật ký phía proxy

Cách nhanh nhất để biết một client có đi qua proxy hay không là xem nhật ký của proxy. Trong lab, proxy ghi từng yêu cầu, có hay không tiêu đề xác thực và tên đăng nhập. Nếu proxy dịch vụ của anh em không có nhật ký dễ đọc, hãy dựng proxy thử trên máy mình trước khi chuyển sang proxy thật. Bài công cụ kiểm tra proxy giới thiệu các cách kiểm độc lập.

Phân biệt lỗi proxy với lỗi API

Khi gọi qua proxy thất bại, đọc kỹ ngoại lệ gốc. Lỗi 407 và lỗi kết nối nằm ở proxy. Lỗi 4xx hoặc 5xx do API đích trả nằm ở API. Một proxy dịch vụ cũng có thể trả lỗi của riêng nó, nên đừng mặc định mọi lỗi đều do API.

Quarkus REST Client proxy trong dev mode, kiểm thử và triển khai

Tài liệu chính thức mô tả hai tính năng bổ sung mà mình chưa chạy nhưng đáng biết. Tính năng thứ nhất là Credentials Provider cho phép lấy tên đăng nhập và mật khẩu proxy từ cơ chế quản lý bí mật của Quarkus, thay vì ghi vào application.properties. Khi cấu hình có tên chỉ khai báo host và port, các khóa username-key và password-key chỉ định nơi lấy tài khoản.

Tài liệu nói rõ Credentials Provider không được dùng khi password của cấu hình đã được đặt trực tiếp. Điều này nghĩa là nếu anh em để lại một mật khẩu thử trong tệp, nó sẽ thắng nguồn bí mật. Khi chuyển sang Credentials Provider, xóa hẳn dòng password khỏi tệp cấu hình.

Proxy cục bộ trong dev mode

Tính năng thứ hai là enable-local-proxy. Đặt nó cho một client, Quarkus dựng một proxy chuyển tiếp cục bộ trong dev mode. Anh em có thể trỏ Wireshark hay công cụ tương tự vào đó để bắt lưu lượng của client, và cổng được in trong nhật ký khởi động. Tài liệu nói tính năng này hợp nhất khi client gọi dịch vụ https.

Đây là công cụ quan sát, không phải proxy ra internet. Đừng nhầm nó với proxy dịch vụ mà bài này cấu hình. Hai thứ dùng cho hai mục đích khác nhau và có thể đặt cùng lúc nếu muốn xem lưu lượng.

Tên biến môi trường

Mỗi thuộc tính Quarkus có tên biến môi trường tương ứng theo quy tắc chung: chữ hoa và các dấu chấm, gạch ngang đổi thành gạch dưới. Tài liệu ghi ví dụ cho thuộc tính cũ, như QUARKUS_REST_CLIENT_PROXY_ADDRESS. Theo quy tắc đó, tên biến cho cấu hình có tên sẽ có dạng QUARKUS_PROXY_MY_PROXY_HOST, nhưng mình chưa kiểm ví dụ này, nên anh em thử trước khi triển khai.

Trong container, đặt mật khẩu proxy bằng biến môi trường từ cơ chế bí mật của nền tảng, không ghi cứng vào image. Bài proxy cho Docker nói về cách truyền biến vào container.

Test tự động

Hướng dẫn REST Client có ví dụ kiểm thử bằng WireMock. Với proxy, một cách đơn giản là chạy proxy thử như lab của mình trong bước chuẩn bị của bộ test, rồi kiểm client nhận kết quả hoặc lỗi mong đợi. Nhật ký proxy cho biết có yêu cầu nào đi qua.

Mình không thêm test tự động vào project lab, vì mục tiêu là quan sát hành vi. Khi viết test thật, anh em nên kiểm ít nhất ba trường hợp: client có proxy nhận kết quả, client không proxy đi thẳng, và tên cấu hình sai báo lỗi rõ.

Gỡ cấu hình thử và quản lý bí mật khi dùng Quarkus REST Client proxy

Sau khi thử, xóa các thuộc tính proxy thử khỏi application.properties và các tùy chọn -D khỏi lệnh khởi động. Nếu mật khẩu thử đã lọt vào kho mã, đổi mật khẩu đó, vì xóa dòng trong commit mới không xóa lịch sử.

Mật khẩu proxy là bí mật. Đừng để nó trong application.properties dùng chung cho mọi môi trường. Dùng tệp cấu hình theo môi trường, biến môi trường hoặc Credentials Provider, và đặt quyền đọc chặt cho tệp chứa bí mật.

Cần proxy HTTP có tài khoản hoặc whitelist IP để thử với Quarkus, anh em có thể mua proxy giá rẻ tại ProxyVN: proxy dân cư tĩnh Viettel, VNPT, FPT, datacenter Việt Nam và Mỹ, 4G và proxy xoay. Nhà cung cấp hỗ trợ HTTP và SOCKS5, cấp tài khoản hoặc whitelist IP.

Checklist trước khi dùng thật

  • Xác nhận đang dùng quarkus-rest-client, không phải RESTEasy Client cũ.
  • Phân biệt configKey của client và tên cấu hình proxy.
  • Đặt proxy-configuration-name cho client cần proxy, none cho client cần đi thẳng.
  • Xóa các thuộc tính cũ như proxy-address khi chuyển sang Proxy Registry.
  • Kiểm cả ba nhóm lỗi: 407, từ chối kết nối và lỗi phân giải tên.
  • Xem nhật ký phía proxy để chắc yêu cầu thật sự đi qua.
  • Giữ mật khẩu ngoài tệp cấu hình dùng chung.
  • Kiểm biến JVM của môi trường chạy để tránh proxy ngầm.

Mô hình nhiều môi trường: dev, staging, production

Ứng dụng thật thường chạy ở nhiều môi trường với yêu cầu proxy khác nhau. Máy dev đi thẳng, staging đi qua một proxy thử, production đi qua proxy dịch vụ có tài khoản. Quarkus cho phép đặt tiền tố hồ sơ trước tên thuộc tính, ví dụ %prod, để mỗi môi trường có cấu hình riêng trong cùng một tệp.

Với bài toán proxy, cách gọn là để cấu hình proxy chỉ có trong hồ sơ cần dùng, và để client mặc định đi thẳng ở các hồ sơ còn lại. Như vậy máy dev không lỡ gọi API thật qua proxy của production. Mình chưa chạy cách này trong lab, nhưng nó dùng cơ chế hồ sơ chuẩn của Quarkus nên anh em kiểm bằng cách khởi động với từng hồ sơ và xem nhật ký proxy.

Giám sát proxy khi ứng dụng chạy lâu

Một proxy chạy ổn hôm nay có thể chậm hoặc hết hạn sau vài tuần. Với ứng dụng chạy lâu, anh em nên đo tỷ lệ lỗi 407 và lỗi kết nối của từng client, vì hai loại lỗi này là dấu hiệu sớm của proxy hết hạn hoặc đổi tài khoản. Bài giám sát proxy bằng Prometheus và Grafana trình bày cách đo.

Khi nào dùng biến JVM thay vì Proxy Registry

Biến JVM đơn giản khi mọi client trong ứng dụng cùng đi một đường và proxy không cần tài khoản. Proxy Registry hợp hơn khi có nhiều client với các đường khác nhau, hoặc khi proxy cần tài khoản. Nếu anh em chỉ cần một proxy cho cả ứng dụng, cấu hình mặc định quarkus.proxy là cách gọn nhất mà vẫn có tài khoản.

Quarkus REST Client proxy: câu hỏi thường gặp

Quarkus REST Client proxy cấu hình ở đâu. Trong application.properties, dưới tiền tố quarkus.proxy cho Proxy Registry, và thuộc tính quarkus.rest-client.tên.proxy-configuration-name để gán cho từng client.

Làm sao cho một client đi proxy, một client đi thẳng. Tạo cấu hình proxy có tên, gán cho client cần proxy, và không đặt cấu hình mặc định. Client không có tên cấu hình sẽ đi thẳng.

Giá trị none làm gì. Nó tắt việc dùng cấu hình mặc định cho client đó. Trong thử nghiệm của mình, nó còn khiến client đi thẳng dù JVM có biến proxy.

Có dùng được SOCKS5 không. Các thuộc tính trong Proxy Registry chỉ có host, port, username, password và non-proxy-hosts, không có thuộc tính chọn giao thức. Mình chưa thử SOCKS5, nên không khẳng định.

Mật khẩu có ký tự đặc biệt có sao không. Trong thử nghiệm, mật khẩu có @ và # trong application.properties hoạt động mà không cần mã hóa. Qua dòng lệnh, shell có thể xử lý riêng ký tự đó.

Gõ sai tên cấu hình proxy thì sao. Ứng dụng vẫn khởi động. Client đó ném IllegalStateException ở lần gọi đầu tiên.

Thuộc tính cũ proxy-address còn dùng được không. Tài liệu ghi nó đã lỗi thời và sẽ làm proxy-configuration-name bị bỏ qua. Nên chuyển sang Proxy Registry.

Quarkus REST Client proxy và những điều cần nhớ

Quarkus REST Client proxy cấu hình qua Proxy Registry, mỗi client gán một tên cấu hình, còn none đưa client về đi thẳng. Gõ sai tên chỉ lộ lỗi ở lần gọi đầu, và biến JVM vẫn có thể áp dụng ngầm. Cần proxy HTTP ổn định, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam cho Quarkus REST Client proxy.

TIN TỨC LIÊN QUAN