2013-02-21 27 views
7

Tôi đã có ứng dụng iOS sử dụng số STOMP Client để nói chuyện với RabbitMQ. Ứng dụng tải rất nhiều trạng thái trong khi khởi động, và sau đó giữ trạng thái đó đồng bộ bằng cách nhận các cập nhật được xuất bản trên STOMP. Tất nhiên, nếu nó mất kết nối của nó, nó không còn có thể chắc chắn nó được đồng bộ, và do đó phải tải lại rằng blob ban đầu lớn. Bất kỳ loại gián đoạn mạng nào cũng kích hoạt hành vi này và khiến khách hàng của tôi buồn.Làm cách nào để phát lại các tin nhắn bị nhỡ khi sử dụng STOMP để kết nối với RabbitMQ?

Có rất nhiều cách hình ảnh lớn để sửa lỗi này (và tôi đang làm việc với chúng) nhưng trong thời gian chờ đợi, tôi đang cố gắng sử dụng hàng đợi liên tục để giải quyết vấn đề này. Ý tưởng là máy chủ sẽ tạo một hàng đợi, liên kết nó với các chủ đề thích hợp và sau đó bắt đầu xây dựng gói khởi động lớn. Khi hoàn thành, nó sẽ đưa mọi thứ cho khách hàng. Khách hàng sẽ thiết lập chính nó với gói khởi động, mở một đăng ký vào hàng đợi, và sau đó xử lý bất kỳ cập nhật nào đã xảy ra trong khi máy chủ đã chuẩn bị mọi thứ. Tương tự, nếu máy khách bị ngắt kết nối, nó có thể chỉ đơn giản là kết nối lại và tiếp tục đọc các thông điệp mà nó tìm thấy trong hàng đợi.

Vấn đề của tôi là khi khách hàng nhận thành công thư được gửi sau khi nó kết nối, nếu có bất kỳ thư nào trong hàng đợi trước khi kết nối, chúng không được đọc. Tương tự như vậy, nếu máy khách bị ngắt kết nối, khi nó kết nối lại, nó sẽ không thấy bất kỳ thông điệp nào đến trong khi nó không còn nữa.

Có ai có thể đề xuất cách tôi có thể khiến khách hàng có thể đọc những tin nhắn bị thiếu đó không?

Trả lời

6

Nó chỉ ra những gì đã xảy ra là bộ điều hợp STOMP đã tiêu thụ các tin nhắn nhưng không cung cấp chúng. Vì vậy, khi khách hàng kết nối lại, nó sẽ không có bất kỳ tin nhắn chờ đợi cho nó.

Để khắc phục sự cố, tôi đã thay đổi cài đặt "ack" trên yêu cầu đăng ký thành "khách hàng", có nghĩa là STOMP không nên xem xét thư được gửi cho đến khi khách hàng gửi lại khung ACK. Bằng cách thay đổi khách hàng của tôi một cách thích hợp, tin nhắn giờ đây được phân phối ngay cả sau khi khách hàng đã đi.

Các vấn đề liên quan