Tôi khá mới trong WSO2 ESB và tôi có thực hiện một bộ xử lý tin nhắn tùy chỉnh với hành vi cụ thể này : thực hiện một thao tác sau đó một phần tử được truy xuất từ kho lưu trữ thư và trước khi chuỗi liên quan đến bộ xử lý tin nhắn này được thực hiện.Làm thế nào để thực hiện một SamplingService tùy chỉnh cho một bộ xử lý tin nhắn tùy chỉnh? Log sau đó một phần tử được lấy ra và trước khi trình tự được thực hiện
Tôi cố gắng giải thích chi tiết.
Đây là ESB định nghĩa xử lý thông điệp của tôi:
<?xml version="1.0" encoding="UTF-8"?>
<!---<messageProcessor class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">-->
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="concurrency">1</parameter>
</messageProcessor>
Nó lấy một số yếu tố (tài liệu XML) hình thành transferFromMessageStore (một hàng đợi) và vượt qua đối tượng này đến transferProcessorSequence.xml chuỗi sử dụng nó. Như bạn có thể thấy tại thời điểm này, tôi đã triển khai bộ xử lý tin nhắn tùy chỉnh SamplingProcessorHeaderRateLimit chỉ cần mở rộng lớp org.apache.synapse.message.processor.impl.sampler.SamplingProcessor WSO2. Tại thời điểm này, nó chỉ hiển thị nhật ký khi phương thức init() được thực hiện. Tôi triển khai nó trên máy chủ Carbon của tôi và nó hoạt động.
Here bạn có thể tìm thấy toàn bộ mã dự án.
Ok nhưng từ những gì tôi đã hiểu để có được những hành vi mong muốn tôi không phải chỉ đơn giản là mở rộng lớp SamplingProcessor vì để làm được thực hiện tùy chỉnh giữa mỗi tiêu thụ thông điệp và công văn đến trình tự, cần phải mở rộng các lớp SamplingService lớp học, số này one.
Tôi nghĩ rằng mình cần ghi đè thực hiện() hoặc tìm nạp (MessageConsumer msgConsumer).
Tại thời điểm này, bạn cũng nên chèn nhật ký, thứ gì đó ghi vào tệp nhật ký mỗi khi phần tử được truy xuất từ cửa hàng thư và trước khi chuỗi liên quan đến bộ xử lý thư được thực hiện.
Có thể không?
Vì vậy, chính Doubs chính của tôi là:
1) Có tôi để tạo ra một lớp mở rộng lớp SamplingService vào cùng một dự án mà tôi đang thực hiện xử lý thông báo tùy chỉnh của tôi (hành vi này đã được sử dụng chỉ dành cho bộ xử lý tin nhắn cụ thể này trong dự án ESO2 WSO2 của tôi, tất cả bộ xử lý tin nhắn khác được sử dụng trong dự án này phải sử dụng triển khai SamplingService chuẩn).
2) Một nghi ngờ khác liên quan đến cách tùy chỉnh Thực hiện lấy mẫu thực hiện này được chuyển đến bộ xử lý tin nhắn tùy chỉnh của tôi. Vào lớp WSSP của SamplingProcessor (cách liên kết việc triển khai bộ xử lý thông điệp tùy chỉnh cụ thể với việc triển khai SamplingService tùy chỉnh xử lý vòng đời của nó).
2 câu hỏi tại sao bạn không ghi đè phương thức getTask (nó đã bảo vệ modifer) trong com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation và trả về lớp của riêng bạn mở rộng SamplingService? – simar
@simar Bạn có ý nghĩa gì? Tại thời điểm này tôi đã ghi đè lên phương thức getTask() chỉ cần đưa vào nó một số thông điệp tường trình \ println (chỉ để kiểm tra puropose). Vấn đề là tôi không bao giờ có được kết quả đầu ra này vào các tệp nhật ký của mình (ngược lại tôi có được bản ghi phương thức init()). Vì vậy, có vẻ như với tôi rằng phương thức getTask() này không bao giờ được thực hiện vì một lý do nào đó. bạn có một số ý tưởng về nó? Có lẽ là công cụ sửa đổi được bảo vệ? – AndreaNobili
Call log.info() chỉ hiển thị khi bạn đăng nhập đúng cấu hình để hiển thị trong tập tin. Call System.out.println chỉ hiển thị trong bảng điều khiển.Bạn đã thử chạy trong chế độ giao diện điều khiển và tìm thông báo println trong phương thức getTask chưa? Bạn có tryiend để chạy wsoesb trong chế độ gỡ lỗi và thử gỡ lỗi để xem những gì đang xảy ra sai? – simar