Pub/Sub Messaging trong Redis và Tích Hợp với Spring Boot

Khi các hệ thống phức tạp và phân tán trở nên phổ biến, cần có một phương tiện hiệu quả để quản lý và truyền thông giữa các thành phần khác nhau của hệ thống mà không tạo ra sự phụ thuộc giữa chúng. Pub-sub ra đời để giải quyết các vấn đề trên.

Trong kiến trúc phân tán, các thành phần hệ thống thường cần cung cấp thông tin cho các thành phần khác khi có các sự kiện diễn ra trong hệ thống. Việc gửi thông tin trực tiếp và đồng bộ giữa các thành phần sẽ làm tăng tải cho bộ xử lý thông điệp, khi có sự cố ở một bộ phận thì có thể ảnh hưởng tới bộ phận khác, ngoài ra còn hạn chế khả năng mở rộng của dịch vụ tương tác và trao đổi thông tin.

Khi các hệ thống phức tạp và phân tán trở nên phổ biến, cần có một phương tiện hiệu quả để quản lý và truyền thông giữa các thành phần khác nhau của hệ thống mà không tạo ra sự phụ thuộc giữa chúng. Pub-sub ra đời để giải quyết các vấn đề trên.

Mô hình Publisher-Subscriber (gọi tắt là Pub-Sub) đã xuất hiện khá lâu và trở nên phổ biến  trong các hệ thống phân tán vào thập kỷ 70 và những năm sau đó. Các ngôn ngữ lập trình như Smalltalk và các hệ thống như CORBA (Common Object Request Broker Architecture) đã có sự hỗ trợ cho mô hình tương tự từ những năm 1980.

Mô hình Pub-Sub đã tiếp tục phát triển và được tích hợp rộng rãi trong các kiến trúc và framework , như Apache Kafka, RabbitMQ, MQTT, và nhiều công nghệ khác, giúp giải quyết các vấn đề giao tiếp và tương tác trong các hệ thống lớn và phức tạp.Pub/Sub (Publisher/Subscriber) là một mô hình messaging trong đó các tin nhắn từ Publisher không gửi trực tiếp đến các Subscriber, mà thông qua một "kênh" (channel). Subscriber có thể đăng ký vào các kênh để nhận thông báo từ Publisher.

Redis cung cấp cơ chế Pub/Sub bằng cách sử dụng các lệnh như PUBLISHSUBSCRIBE, và UNSUBSCRIBE.

Trong mô hình Queue (AMQP, RabbitMQ), một message chỉ được xử lý bởi một Subscriber. Ngược lại, trong mô hình Pub/Sub của Redis, một message có thể được nhận bởi tất cả các Subscriber đăng ký vào cùng một channel.

Đầu tiên, hãy thêm các dependencies cần thiết vào pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
</dependencies>

Trong application.properties hoặc application.yml, đặt các thông số cho Redis:

spring.redis.host=localhost
spring.redis.port=6379
  1. Message Publisher
@Service
public class MessagePublisherImpl implements MessagePublisher {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    private ChannelTopic topic;

    @Override
    public void publish(String message) {
        redisTemplate.convertAndSend(topic.getTopic(), message);
    }
}
  1. Message Subscriber
@Service
public class MessageSubscriber implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println("Received message: " + message.toString());
    }
}

Cấu hình Spring Data Redis để sử dụng các service trên:

@Configuration
public class RedisConfig {

    @Bean
    ChannelTopic topic() {
        return new ChannelTopic("pubsub:queue");
    }

    @Bean
    public RedisMessageListenerContainer redisContainer(RedisConnectionFactory connectionFactory,
                                                        MessageListenerAdapter messageListener,
                                                        ChannelTopic topic) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(messageListener, topic);
        return container;
    }

    @Bean
    public MessageListenerAdapter messageListener(MessageSubscriber subscriber) {
        return new MessageListenerAdapter(subscriber);
    }
}

Để publish message, bạn chỉ cần gọi method publish() của bean MessagePublisher:

@Autowired
private MessagePublisher messagePublisher;

public void sendMessage() {
    messagePublisher.publish("Hello Pub/Sub!");
}
  1. Mô hình Pub/Sub trong Redis là gì?

    • Mô hình messaging trong đó các tin nhắn từ Publisher không gửi trực tiếp đến các Subscriber, mà thông qua một "kênh" (channel).
  2. Pub/Sub khác gì so với mô hình Queue?

    • Trong Pub/Sub, một message có thể được nhận bởi tất cả các Subscriber đăng ký, trong khi mô hình Queue chỉ có một Subscriber xử lý message.
  3. Làm thế nào để cấu hình Redis trong Spring Boot?

    • Thêm dependency spring-boot-starter-data-redis và đặt các thông số trong application.properties hoặc application.yml.
  4. Service nào trong Spring Boot dùng để publish message?

    • MessagePublisher
  5. Service nào trong Spring Boot dùng để subscribe message?

    • MessageSubscriber

  RATE: 5.0 

  456 VIEW


chưa có bình luận nào ...
BÀI VIẾT LIÊN QUAN
Pub/Sub Messaging trong Redis và Tích Hợp với Spring Boot

Khi các hệ thống phức tạp và phân tán trở nên phổ biến, cần có một phương tiện hiệu quả để quản lý và truyền thông giữa các thành phần khác nhau của hệ thống mà không tạo ra sự phụ thuộc giữa chúng. Pub-sub ra đời để giải quyết các vấn đề trên.

BÀI VIẾT LIÊN QUAN
Checklist 8 Điều Bạn Cần Làm Để Đạt Điểm Cao Trước Khi Nộp Luận Văn / Đồ Án

Ở FPT, Làm đồ án đã khó thì viết báo cáo đồ án lại càng là việc không hề dễ dàng. Chuẩn hoá file word, excel, ppt là một bước quan trọng để đảm bảo nhóm bạn đạt được điểm số cao nhất. Trong bài viết này mình sẽ giới thiệu đến bạn 8 mẹo cần thiết để chuẩn hoá file luận văn/đồ án trước khi nộp cho nhà trường. Tìm hiểu ngay để có thể nộp một bản báo cáo chất lượng cao và ấn tượng với giảng viên của bạn.