以下是目前的代码,不知道是否可以有更好的写法封装优化以下代码,让调用者只关注逻辑实现就好。配置自动订阅所有的实现,当前代码是封装成一个starter
@Data
public class Subscription<T> {
private final String topic;
private final Class<T> messageType;
private final Consumer<T> consumer;
}
@FunctionalInterface
public interface SubscriptionCustomizer<T> {
Subscription<T> customize();
}
@Component
public class SubscriptionInitializer {
@Autowired
private List<SubscriptionCustomizer<?>> customizers;
public <T> void registerSubscriber(SubscriptionCustomizer<T> subscriber) {
Subscription<T> customize = subscriber.customize();
RedisUtil.subscribe(customize.getTopic(), customize.getMessageType(), customize.getConsumer());
}
@PostConstruct
public void registerAllSubscribers() {
customizers.forEach(this::registerSubscriber);
}
}
public class RedisUtil {
public static <T> void publish(String topic, T message, Consumer<T> consumer) {
publish(topic, message);
consumer.accept(message);
}
}
以下是目前的调用方法
@Component
public class MySubscriber1 implements SubscriptionCustomizer<String> {
@Override
public Subscription<String> customize() {
return new Subscription<>("mySubscriber1", String.class, message -> {
System.out.println("message = "+ message + " from mySubscriber1");
});
}
}
@Component
public class MySubscriber2 implements SubscriptionCustomizer<String> {
@Override
public Subscription<String> customize() {
return new Subscription<>("mySubscriber2", String.class, message -> {
System.out.println("message = "+ message + " from mySubscriber2");
});
}
}
@Test
public void test_redisson_subscribe(){
RedissonHelper.publish("mySubscriber1", "Hello Redis!");
RedissonHelper.publish("mySubscriber2", "Hello Redis!");
}
以下是一些建议,可以帮助您在 Spring Boot 中更好地封装 Redisson 的发布订阅功能:
创建一个专门的服务类
定义接口
publishMessage
和subscribeToTopic
等。异常处理
配置管理
消息类型封装
异步处理
日志记录
单元测试
以下是一个简单的示例服务类:
在上述示例中,
publishMessage
方法用于发布消息,subscribeToTopic
方法用于订阅主题并处理接收到的消息。这样的封装可以使 Redisson 的发布订阅功能在 Spring Boot 应用中更易于使用、管理和维护。