• 「中间件」rabbitmq 消息队列基础知识


    基本概念

    RabbitMQ是一个消息队列软件,用于在应用程序之间转发消息。以下是RabbitMQ的基本概念:

    1. 消息:RabbitMQ中的消息是传递的基本单位,它由消息头和消息体组成。

    2. 队列(Queue):队列是消息的缓冲区,用于存储待处理的消息。

    3. 交换器(Exchange):交换器是接收生产者发送的消息并将其路由到一个或多个队列的组件。

    4. 路由键(Routing Key):用于确定消息将被路由到哪个队列。

    5. 绑定(Binding):绑定用于将队列与交换器关联起来。

    6. 生产者(Producer):生产者是指向RabbitMQ发送消息的应用程序。

    7. 消费者(Consumer):消费者是从RabbitMQ接收并处理消息的应用程序。

    8. 消费组(Consumer Group):相同的队列可以有多个消费组,每个消费组可以同时消费该队列中的消息。

    9. ACK:当消费者成功处理一条消息时,它会发送一个ACK给RabbitMQ,通知RabbitMQ该消息已被处理。如果消费者无法处理消息,则可以拒绝消息,或者将消息重新放入队列。

    纸上得来终觉浅,绝知此事要躬行

    那么怎么用springboot 和RabbitMQ向指定用户发送通知,后端又是如何生产消息和如何消费消息呢。

    1. 首先需要在Spring Boot中引入RabbitMQ的依赖:

    
        org.springframework.boot
        spring-boot-starter-amqp
    
    
    • 1
    • 2
    • 3
    • 4

    RabbitMQ的配置:

    @Configuration
    public class RabbitMQConfig {
        @Bean
        public Queue queue() {
            return new Queue("queueName");
        }
    
        @Bean
        public TopicExchange topicExchange() {
            return new TopicExchange("exchangeName");
        }
    
        @Bean
        public Binding binding(Queue queue, TopicExchange topicExchange) {
            return BindingBuilder.bind(queue).to(topicExchange).with("routingKey");
        }
    
        @Bean
        public ConnectionFactory connectionFactory() {
            CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
            connectionFactory.setUsername("guest");
            connectionFactory.setPassword("guest");
            return connectionFactory;
        }
    
        @Bean
        public RabbitTemplate rabbitTemplate() {
            return new RabbitTemplate(connectionFactory());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    2. 生产消息的代码:

    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void sendMessage(String message, String userId) {
        rabbitTemplate.convertAndSend("exchangeName", "routingKey." + userId, message);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. 消费消息的代码:

    @RabbitListener(queues = "queueName")
    public void receiveMessage(String message) {
        // 处理消息
    }
    
    • 1
    • 2
    • 3
    • 4

    在消费消息时可以根据消息中的userId来判断是否是当前用户需要处理的消息,如果是再进行处理。

    小结

    总之,RabbitMQ提供了一个灵活和可靠的消息传递机制,使得应用程序能够快速响应和处理来自其他应用程序的消息。

  • 相关阅读:
    STM32的通用定时器与中断
    【CT】LeetCode手撕—415. 字符串相加
    hashmap 的重新散列和装载因子
    Ansible与Ansible部署
    性能测试01
    SpringCloud Alibaba微服务第6章之Gateway
    Linux命令
    数学分析—极限
    基于megengine实现YoloX【附部分源码】
    C语言扫雷游戏完整实现(上)
  • 原文地址:https://blog.csdn.net/2301_79528833/article/details/132636891