一.MQ介绍1.MQ概念:MQ是对不同类型的消息队列的统称不同类型的消息队列常见的有:①:RabbitMQ②:RocketMQ③:Kafka ...等2.用途:MQ常用于系统通信(数据传输),可分两类①:同步通信: 系统A---接口调用---系统B②:异步通信: 系统A---消息传递---|消息队列|---消息传递---系统B3.MQ作用:MQ 基础作用是接收、存储、转发消息并借此实现异步、解耦、削峰等核心作用.可借MQ实现以下操作:①:异步解耦②:流量削峰③:消息分发④:延迟通知⑤:异步通信4.AMQP:是什么:AMQP是一种高级消息队列协议5.RabbitMQ快速入门(以下代码均采用SpringBoot RabbitMQ)1引入依赖(这是原生RabbitMQ的,推荐使用Spring集成好的)dependencies !-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -- dependency groupIdcom.rabbitmq/groupId artifactIdamqp-client/artifactId version5.20.0/version /dependency /dependencies2配置(根据自己设置的账号密码,以及交换机进行配置)建议不直接将服务器上的 5672、15672 等端口暴露在公网可通过设置 SSH 隧道在本地使用自定义端口访问服务器上的 RabbitMQ。相比直接开放端口这种方式能有效避免被恶意扫描和攻击安全性更高!spring: rabbitmq: host: localhost port: 5672 username: guest password: guest3生产者代码编写,例如: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消费者代码编写: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|---consumer2工作队列模式:producer---|Queue| ---consumer1---consumer23发布订阅模式(交换机类型为Fanout广播模式):producer---|Exchange| ---|Queue1|---consumer1---|Queue2|---consumer2Exchange交换机介绍: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|---consumer25通配符模式:producer---|Exchange| --- ①:--*.a.*--|Queue1|---consumer1②:--*.*.b--|Queue2|---consumer2--c.#--|Queue2|---consumer2扩展:*与#的区别:①*:一个段,如: a.* --- a.b/a.c②#:0~多个段,如a.#---a/a.b/a.b.c6RPC模式(RPC通信,了解为主)Client---request---|RPC|---|Service|---Reply---reply---Client7发布确认模式:(等价于发送方确认特性是RabbitMQ消息可靠性保证的机制之一producer---|Queue|---consumer---ACK---producer三种实现方式(效率有高到低):①:异步确认②:批量确认③:单独确认共7中工作模式.2.介绍RabbitListener1.是什么:RabbitListener是Spring框架中消费者用于监听RabbitMQ队列的注解用它可自定义一个方法消费者可以用它从RabbitMQ队列中接收消息 .2.常用参数类型①String返回消息的内容②Message返回原始的消息体及属性③ChannelRabbitMQ通道对象可用于进行跟高级的操作如手动确认消息.注:默认为自动确认,若要改成手动确认,步骤如下:1配置(yml,properties)改成manual2RabbitListener方法参数加Channel channel3配套写basicAck手动确认方法和basicNack消息处理失败方法及时复盘,继续努力,加油!