-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Problem
MessageListenerAdapter relies on reflection (methodName, Object arguments) and lacks compile-time type safety. For modern Java (records, generics), this design seems to be outdated and error-prone. 😬
Proposed API
Introduce a type-safe, generic alternative for message handling:
public interface MessageHandler<T> {
void onMessage(T message, String channel);
}
Example Usage:
public record NewsEvent(String title, String content) {
}
var listener = JsonMessageListener.of(
NewsEvent.class,
(event, channel) -> log.info("Received {} from {}", event, channel)
);
messageListenerContainer.addMessageListener(listener, ChannelTopic.of("news-channel"));
The existing MessageListener and MessageListenerAdapter APIs are low-level and reflection-based. They expose raw byte payloads and rely on method name resolution for dispatching, which feels outdated in modern Java applications.
Most Redis Pub/Sub use cases today exchange structured JSON data, yet developers must manually deserialize messages or use untyped adapters. A type-safe alternative such as MessageHandler<T> would provide a clearer, compile-time-safe contract for message consumption while remaining fully compatible with RedisMessageListenerContainer.