RabbitMQ入门概述

一**.MQ介绍**

**1.MQ概念:**MQ是对不同类型的消息队列的统称

不同类型的消息队列常见的有:

①:RabbitMQ

②:RocketMQ

③:Kafka ...等

**2.用途:**MQ常用于系统通信(数据传输),可分两类

①:同步通信: 系统A---接口调用--->系统B

②:异步通信: 系统A---消息传递--->|消息队列|---消息传递--->系统B

3.MQ作用:MQ 基础作用是接收、存储、转发消息,并借此实现异步、解耦、削峰等核心作用.

可借MQ实现以下操作:

①:异步解耦

②:流量削峰

③:消息分发

④:延迟通知

⑤:异步通信

4.AMQP:

是什么:AMQP是一种高级消息队列协议

5.RabbitMQ快速入门(以下代码均采用 SpringBoot + RabbitMQ)

<1>引入依赖

java 复制代码
<dependencies>
    <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.20.0</version>
    </dependency>
</dependencies>

<2>配置(根据自己设置的账号密码,以及交换机进行配置)

建议:不直接将服务器上的 5672、15672 等端口暴露在公网,可通过设置 SSH 隧道,在本地使用自定义端口访问服务器上的 RabbitMQ。相比直接开放端口,这种方式能有效避免被恶意扫描和攻击,安全性更高!

java 复制代码
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

<3>生产者代码编写,例如:

java 复制代码
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/mq") // 类上统一前缀
@RestController
public class ProducerController {

    // RabbitTemplate 是 Spring 提供的发消息工具
    @Autowired
    private RabbitTemplate rabbitTemplate;

    // 浏览器访问这个接口就发消息
    @GetMapping("/send")
    public String sendMsg() {
        String message = "这是一条测试消息";
        // 发送到队列 test_queue
        rabbitTemplate.convertAndSend("test_queue", message);
        return "消息发送成功:" + message;
    }
}

<4>消费者代码编写:

java 复制代码
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class ConsumerListener {

    // 和生产者发的队列名一致:test_queue
    @RabbitListener(queues = "test_queue")
    public void receive(String message) {
        System.out.println("消费者收到消息:" + message);
    }
}

二.RabbitMQ的应用:

1.工作模式的介绍:

<1>简单模式:

producer--->|Queue|--->consumer

<2>工作队列模式:

producer--->|Queue| --->consumer1

--->consumer2

<3>发布订阅模式(交换机类型为Fanout广播模式):

producer--->|Exchange| --->|Queue1|--->consumer1

--->|Queue2|--->consumer2

Exchange交换机介绍:

RabbitMQ支持的交换机类型有4种:

**①:Fanout:**广播交换机,将消息交给所有与交换机绑定的队列

②:Direct: 定向交换机,把消息交给符合指定routingKey的队列**(精确匹配)**

③:Topic: 通配符交换机,把消息交给符合routing pattern的队列**(模糊匹配)**

**④:Headers:**头部交换机,生产环境中不常用,这里仅了解

介绍一下RoutingKey和BindingKey:

tips:本质上,它们就是同一个东西,在代码里全都叫 routingKey!

二者为同一个字符串,只是场景不同,名字不一样!为了好区分

<4>路由模式(交换机类型为Direct定向模式):

producer--->|Exchange| ①:--a-->|Queue1|--->consumer1

②:--a-->|Queue2|--->consumer2

--b-->|Queue2|--->consumer2

--c-->|Queue2|--->consumer2

<5>通配符模式:

producer--->|Exchange| ---> ①:--*.a.*-->|Queue1|--->consumer1

②:--*.*.b-->|Queue2|--->consumer2

--c.#-->|Queue2|--->consumer2

扩展:

*与#的区别:①*:一个段,如: a.* ---> a.b/a.c

②#:0~多个段,如a.#--->a/a.b/a.b.c

<6>RPC模式(RPC通信,了解为主)

Client---request--->|RPC|--->|Service|--->Reply---reply--->Client

<7>发布确认模式:(等价于发送方确认特性)是RabbitMQ消息可靠性保证的机制之一

producer--->|Queue|--->consumer---ACK--->producer

三种实现方式(效率有高到低):

①:异步确认

②:批量确认

③:单独确认

共7中工作模式.

2.介绍@RabbitListener

1.是什么:@RabbitListener是Spring框架中消费者用于监听RabbitMQ队列的注解,用它可自定义一个方法,消费者可以用它从RabbitMQ队列中接收消息 .

2.常用参数类型:

①:String:返回消息的内容

②:Message:返回原始的消息体及属性

③:Channel:RabbitMQ通道对象,可用于进行跟高级的操作,如手动确认消息.

注:默认为自动确认,若要改成手动确认,步骤如下:

1`配置(yml,properties)改成manual

2`@RabbitListener方法参数加Channel channel

3`配套写basicAck手动确认方法和basicNack消息处理失败方法

及时复盘,继续努力,加油!

相关推荐
fengxin_rou1 小时前
【滑动窗口与前缀和算法实战】:LeetCode560.438 高频题深度解析
java·算法·leetcode
dusk_star1 小时前
go语言--笔记--接口
java·笔记·golang
The Sheep 20231 小时前
EFcore 查询数据
java·javascript
han_hanker1 小时前
java8 stream 常用转换方法
java
星轨zb1 小时前
从通用到专属:文迹(WenJi)引入 RAG 向量库的技术复盘
java·spring·langchain4j
我是一颗柠檬1 小时前
【Java后端技术亮点】Feed流三级缓存设计,从10秒到100毫秒的优化实战
java·开发语言·后端·缓存
超梦dasgg1 小时前
Java 正则表达式 完整详解(语法 + 核心类 + 常用方法 + 实战案例)
java·开发语言·正则表达式
码语智行1 小时前
操作日志注解模块
java·前端·python
方也_arkling1 小时前
【Java-Day17】API篇-BigInteger和BigDecimal
java·开发语言