Tôi đang tìm kiếm trợ giúp về vấn đề lạ khi người tiêu dùng chậm trên hàng đợi khiến tất cả những người tiêu dùng khác trên cùng một hàng đợi bắt đầu sử dụng tin nhắn ở khoảng thời gian 30 giây. Đó là tất cả người tiêu dùng nhưng người chậm không tin nhắn của người tiêu dùng nhanh như họ có thể, thay vào đó họ chờ đợi một số rào cản kỳ diệu 30s trước khi tiêu thụ.Một người tiêu dùng ActiveMQ chậm khiến người tiêu dùng chậm chậm
Dòng chảy cơ bản của ứng dụng của tôi đi như thế này:
- một số thông báo các nhà sản xuất diễn ra vào một hàng đợi duy nhất. Tin nhắn có thể có JMSXGroupIDs khác nhau
- một số người tiêu dùng nghe tin nhắn trong đó hàng đợi đơn
- như thực hành tiêu chuẩn JMSXGroupIDs được phân phối trên người tiêu dùng
- tại một số điểm một trong những người tiêu dùng trở nên chậm chạp và không thể xử lý thông điệp rất nhanh chóng
- người tiêu dùng chậm sẽ điền bộ đệm tìm nạp trước vào nhà môi giới và AMQ nhận ra rằng nó chậm (hành vi mặc định)
- tại thời điểm đó - hoặc một số 'ngẫu nhiên' nhưng thời gian sau đó - tất cả người tiêu dùng ngoại trừ chậm một người bắt đầu chỉ tiêu thụ tin nhắn trong cùng khoảng thời gian 30 giây
- nếu người tiêu dùng chậm trở nên nhanh chóng trở lại sau đó mọi thứ rất nhanh chóng trở lại hoạt động bình thường và các rào cản độ tuổi 30 sẽ biến mất
Tôi đang ở một mất mát cho những gì có thể gây ra vấn đề này, hoặc làm thế nào để sửa chữa nó, xin vui lòng Cứu giúp.
More nền và phát hiện
- tôi đã quản lý để chắc chắn tạo lại vấn đề này trên AMQ 5.8.0, 5.9.0 (nơi vấn đề này ban đầu được chú ý) và 5.9.1, vào cài đặt tươi và các cài đặt hiện có được quản lý bởi ops và trên các máy khác nhau một số vm và một số thì không. Tất cả các cài đặt Linux, các hệ điều hành và phiên bản java khác nhau.
- Nó dường như không bị ảnh hưởng bởi bất kỳ tìm nạp trước nào có liên quan, đó là: thay đổi giá trị tìm nạp trước từ 1 đến 10 đến 1000 đã không dừng sự cố xảy ra
- [red herring?] Bật nhật ký gỡ lỗi trên ví dụ amq hiển thị nhật ký liên quan đến việc kiểm tra định kỳ các thư có thể hết hạn. Hàng đợi không có một chính sách hết hạn vì vậy tôi chỉ có thể nghĩ rằng thời gian theo lịch trình
expireMessagesPeriod
chỉ là đánh thức amq lên theo cách mà sau đó nó sẽ gửi tin nhắn đến người tiêu dùng không chậm. - Nếu chế độ 30 giây được nhập rồi sang trái rồi nhập lại, thời gian giây phút qua luôn giống nhau, ví dụ: 14 và 44 đã qua phút. Điều này là đúng trên tất cả người tiêu dùng và tất cả các máy lưu trữ những người tiêu dùng. Những rào cản này thay đổi sau khi khởi động lại amq.
Tạo một thử nghiệm đơn vị và mở một Jira cho các vấn đề với ActiveMQ –
OK sẽ làm. Tôi cho rằng đây không phải là hành vi mong đợi? – Matt
https://issues.apache.org/jira/browse/AMQ-5200 - tạo vé này để bao gồm trường hợp chính xác này (ví dụ: sử dụng nhóm không chọn) trong trường hợp nó được coi là quan trọng hơn là sửa trường hợp thay thế – Matt