Tôi đã quan sát thấy vấn đề tương tự, cụ thể là chuỗi đăng ký chặn khi bạn đăng ký. Để giải quyết vấn đề này, tôi đã triển khai một pub / sub client được tối ưu hóa bằng cách sử dụng Netty và kết hợp nó vào một nhánh Jedis tại đây. Đây không phải là một giải pháp toàn diện và tôi chưa có thời gian để thực sự hoàn thiện nó, nhưng nó phù hợp với các đăng ký kênh và mô hình cơ bản.
Nhận một phiên bản pubsub bằng cách sử dụng:
public static OptimizedPubSub getInstance(String host, int port, String auth, long timeout)
Sự cố / Hủy đăng ký mẫu bằng cách sử dụng:
public ChannelFuture psubscribe(String... patterns)
public ChannelFuture punsubscribe(String... patterns)
bạn có thể bỏ qua ChannelFuture được trả lại trừ khi bạn muốn chắc chắn 100% yêu cầu của mình được thông qua (nó không đồng bộ).
Sự cố / Hủy đăng ký kênh bằng cách sử dụng:
public ChannelFuture subscribe(String... channels)
public ChannelFuture unsubscribe(String... channels)
Sau đó, triển khai các phiên bản SubListener:
public interface SubListener {
/**
* Callback when a message is published on a subscribed channel
* @param channel The channel the message was received on
* @param message The received message
*/
public void onChannelMessage(String channel, String message);
/**
* Callback when a message is published on a subscribed channel matching a subscribed pattern
* @param pattern The pattern that the channel matched
* @param channel The channel the message was received on
* @param message The received message
*/
public void onPatternMessage(String pattern, String channel, String message);
}
và đăng ký / hủy đăng ký người nghe bằng:
public void registerListener(SubListener listener)
public void unregisterListener(SubListener listener)
OptimizedPubSub không bao giờ các khối và sự kiện được phân phối không đồng bộ đến Người nghe phụ đã đăng ký.
Hiện tại fork đã hơi cũ, vì vậy nó có thể không hữu ích cho bạn ở dạng hiện tại, nhưng bạn có thể dễ dàng lấy nguồn trong gói đó và xây dựng nó độc lập. Các thành phần phụ thuộc là Jedis và Netty.
Xin lỗi, tôi không có giải pháp toàn diện hơn.