欢迎光临
我们一直在努力

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>引入依赖

<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。相比直接开放端口,这种方式能有效避免被恶意扫描和攻击,安全性更高! 

spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest

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

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|—>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消息处理失败方法                                    

赞(0)
未经允许不得转载:171主机测评 » RabbitMQ入门概述
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址