MQ基础(RabbitMQ)

通信

同步通信:就相当于打电话,双方交互是实时的。同一时刻,只能与一人交互。

异步通信:就相当于发短信,双方交互不是实时的。不需要立刻回应对方,可以多线程操作,跟不同人同时聊天。

RabbitMQ

过程

几个基础概念

publisher:生产者,发送消息的一方

consumer:消费者消费消息的一方

queue:队列,存储消息。生产者投递的消息会暂时存储在消息队列中,等待消费者消费。

exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。

virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的交换机,队列。

RabbitMQ框架

某个虚拟主机,生产者发送消息到交换机,再由交换机发送消息到队列,队列把消息推送给消费者。

SpringAMQP

依赖

<!--AMQP依赖,包含RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>

配置说明

spring:
  rabbitmq:
    host: 192.168.32.130 # 你的虚拟机IP
    port: 5672 # 端口
    virtual-host: /hm # 虚拟主机
    username: lxs # 用户名
    password: 123456 # 密码
    listener:
      simple:
        prefetch: 1 # 每次只能获取一条消息,处理完成才能获取下一个消息

交换机说明

Fanout

Fanout交换机(广播)会将消息路由到每个绑定队列中。

Direct

Direct交换机不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息

Topic

Topic类型的ExchangeDirect相比,都是可以根据RoutingKey把消息路由到不同的队列。

只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符!

通配符规则
  • #:匹配一个或多个词

  • *:匹配不多不少恰好1个

举例:

  • item.#:能够匹配item.spu.insert 或者 item.spu

  • item.*:只能匹配item.spu

消息转换器

默认情况下Spring采用的序列化方式是JDK序列化。

配置JSON转换器

依赖<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.10</version> </dependency>

  配置类

@Bean
public MessageConverter messageConverter(){
    // 1.定义消息转换器
    Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
    // 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息
    jackson2JsonMessageConverter.setCreateMessageIds(true);
    return jackson2JsonMessageConverter;
}

例子

@RabbitListener(
        bindings = @QueueBinding(
                value = @Queue(name = "topic.queue2"),
                exchange = @Exchange(name = "hm.topic", type = ExchangeTypes.TOPIC),
                key = "ch.*"
        )
)
public void TopicQueueC(String a) {
    System.out.println("topic.queue2 ch.*" + a);
}

相关推荐

  1. MQ基础RabbitMQ

    2024-06-06 14:52:07       31 阅读
  2. 中间件MQ面试题之Rabbitmq

    2024-06-06 14:52:07       32 阅读
  3. MQ组件之RabbitMQ学习

    2024-06-06 14:52:07       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 14:52:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 14:52:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 14:52:07       82 阅读
  4. Python语言-面向对象

    2024-06-06 14:52:07       91 阅读

热门阅读

  1. Linux系统编程之进程间通信(IPC)

    2024-06-06 14:52:07       28 阅读
  2. websocket链接携带参数

    2024-06-06 14:52:07       31 阅读
  3. EVO轨迹评估工具基本使用教程(学习记录)

    2024-06-06 14:52:07       29 阅读
  4. Selenium自动化测试入门:cookie 处理

    2024-06-06 14:52:07       32 阅读
  5. Python库之pandas的高级用法深度解析

    2024-06-06 14:52:07       31 阅读
  6. ubuntu上zsh与bash切换

    2024-06-06 14:52:07       29 阅读
  7. Mac上搭建Python环境:深入探索与高效实践

    2024-06-06 14:52:07       29 阅读
  8. C++函数模版和C#的泛型函数的区别

    2024-06-06 14:52:07       28 阅读
  9. vue 权限分组

    2024-06-06 14:52:07       22 阅读
  10. gin-vue-admin整合 ElasticSearch

    2024-06-06 14:52:07       29 阅读
  11. 如何评价GPT-4o?

    2024-06-06 14:52:07       30 阅读