当前位置: 首页 > article >正文

RABBIT_MQ消息队列

RabbitMq学习

工作原理

组成部分说明:

  • Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
  • Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
  • Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
  • Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
  • Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。

请添加图片描述

消息确认机制(ACK)

RabbitMQ有一个ACK机制。当消费者获取消息后,会向RabbitMQ发送回执ACK,告知消息已经被接收。不过这种回执ACK分两种情况:

  • 自动ACK:消息一旦被接收,消费者自动发送ACK
  • 手动ACK:消息接收后,不会发送ACK,需要手动调用

Springboot整合MQ

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>2.6.13</version>
</dependency>
server:
  port: 10200
spring:
  rabbitmq:
    host: 10.0.0.177
    port: 5672
    username: xxx
    password: xxx
    virtual-host: learn

配置类,配一个队列出来

@Configuration
public class RabbitConfig {

    @Bean
    Queue simpleQueue(){
        return new Queue("Learn_MyQueue_test",true);
    }
}

springboot启动后不断监听mq的消息

@Component
public class HelloConsume {

    @RabbitListener(queues = "Learn_MyQueue_test")
    public void receive(String msg){
        System.out.println("hello receive:"+msg);
    }
}

使用test单元,模拟发送一条消息

@SpringBootTest
class LearnMqApplicationTests {


    @Autowired
    RabbitTemplate rabbitTemplate;
    @Test
    public void testSend() {
        rabbitTemplate.convertAndSend( "Learn_MyQueue_test","生产者发送的消息!");
    }
}

运行boot后,发送一条消息后,会在boot中监听到这条消息。

上面代码中可以省去配置类,直接声明队列

@RabbitListener(queuesToDeclare = @Queue(name = "Learn_MyQueue_test1"))
public void receive(String msg){
    System.out.println("hello receive:"+msg);
}

四种交换机

  1. 直接交换机(Direct Exchange)

    • 适用于需要基于路由键精确匹配的场景。
    • 如果接收方不想接收某些消息,可以通过不绑定相应的路由键到队列来实现。
  2. 主题交换机(Topic Exchange)

    • 适用于需要基于模式匹配路由键的场景。
    • 接收方可以通过绑定不同的模式到队列来选择性接收消息,例如使用*#通配符。
  3. 头交换机(Headers Exchange)

    • 适用于需要根据消息的头部属性进行匹配的场景。
    • 接收方可以通过设置不同的头部属性和值来选择性接收消息。
  4. 扇出交换机(Fanout Exchange)

    • 适用于广播消息到所有绑定的队列,不考虑路由键。
    • 接收方可以选择绑定到交换机的队列来接收所有消息,或者不绑定来避免接收。、

交换机例子

配置类,四个交换机,一个主题,四种绑定的方式

import org.springframework.amqp.core.*;

http://www.kler.cn/a/400033.html

相关文章:

  • IDEA旗舰版编辑器器快速⼊门(笔记)
  • AI agent智能体的逻辑思维--工作流
  • 【Java】SpringBoot模拟流式输出,前端使用流式接收数据并打印
  • 【数据结构与算法】排序
  • electron客户端预览doc、docx、excel、pdf、ppt、csv、txt等文件类型
  • ASUS/华硕灵耀X双屏Pro UX8402Z 原厂Win11-22H2系统 工厂文件 带ASUS Recovery恢复
  • 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法
  • CSS复合选择器详解与应用指南
  • ArcMap 操作矢量要素的旋转、复制等功能
  • 网关在能源物联网中扮演了什么角色?
  • django从入门到实战(四)——模型与数据库
  • 基于微信小程序的河池旅游设计与实现
  • 微服务day11-微服务面试
  • 6.k8s:devops
  • 【Linux】Linux入门实操——定时任务调度
  • 坚果云·无法连接服务器(无法同步)
  • 16.100ASK_T113-PRO 配置QT运行环境(二)
  • 【GeekBand】C++设计模式笔记12_Singleton_单件模式
  • ESP-IDF VScode 项目构建/增加组件 新手友好!!!
  • css uniapp背景图宽度固定高度自适应可以重复