MQ基础

65 阅读1分钟

概念 : MQ在Java中是构建分布式系统的关键组件,通过异步、解耦和流量控制优化系统性能

MQ有什么应用场景?

  1. 异步处理
  2. 解耦
  3. 流量削峰

常用的MQ--RabbitMQ

搭建环境 :

父类依赖 :

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

微服务依赖 :

<!--统一配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--加载bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

java版本为11

消息的发送和消费的配置都需要添加 :

spring:
  rabbitmq:
    host: 192.168.101.68 # 你的虚拟机IP
    port: 5672 # 端口
    virtual-host: / # 虚拟主机
    username: itheima # 用户名
    password: 123321 # 密码

工作模式

普通模式 :

image.png

工作队列模式 :

能者多劳

image.png

发布订阅者模式 :

image.png

Direct模式-配置形式声明队列交换机绑定关系

  1. 声明队列

image.png

  1. 声明交换机

image.png

  1. 绑定关系

image.png

Topic模式-注解形式 :

image.png

消息转换器

配置JSON转换器

引入父依赖 :

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

配置消息转换器 :

package com.itheima.consumer.config;
​
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
/**
 * @author Mr.M
 * @version 1.0
 * @description mq配置类
 * @date 2024/8/13 19:28
 */
@Configuration
public class MesaageConfig {
​
    @Bean
    public MessageConverter messageConverter() {
        // 定义消息转换器
        Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
        //设置消息id,自动生成一个id,可用于消息幂等性处理
        jackson2JsonMessageConverter.setCreateMessageIds(true);
        return jackson2JsonMessageConverter;
    }
}