首先他的需求实在什么地方。我美哟明显的感受到。
它给我的最大感受就是脱裤子放屁——多此一举,的感觉。
他将信息发送给服务端中间件。在由MQ服务器发送消息。
服务器会监听消息。
但是它不仅仅局限于削峰填谷和稳定发送信息的功能,它还有其他重要的作用。
-
异步通信:MQ 允许发送者将消息发送到队列中,然后接收者可以异步地从队列中获取消息并进行处理。这种异步通信方式可以提高系统的响应性能和并发处理能力。
-
解耦:通过使用 MQ,发送者和接收者之间的耦合度可以降低。发送者只需要将消息发送到队列中,而不需要直接与接收者进行通信。这样,发送者和接收者可以独立演化和扩展,而不会相互影响。
-
可靠性:MQ 通常提供持久化机制,即使在发送者发送消息后,如果接收者当前不可用,消息也不会丢失。接收者在可用时可以从队列中获取消息并进行处理,确保消息的可靠传递。
-
扩展性:通过使用 MQ,可以实现系统的解耦和水平扩展。可以增加多个消费者来处理队列中的消息,从而提高系统的处理能力。
-
缓冲能力:MQ 具有缓冲能力,可以处理瞬时的高峰流量。当发送者发送消息的速度超过接收者的处理速度时,消息可以在队列中暂存,避免系统过载。
那如何部署上手呢
1.首先是导包(这里使用的springboot整合了MQ)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.因为使用了虚拟机的端口,这里需要配置端口信息等
#该测试模块的端口号
server:
port: 8080
#连接MQ的配置信息
spring:
rabbitmq:
password: guest
username: guest
port: 5672
host: 192.168.79.133
# 设置每次只处理一条信息。不浪费时间
listener:
simple:
prefetch: 1
3.配置Bean实例。这里可以定义队列名称
@Configuration
public class RabbitMQConfig {
//声明推送的队列名
private String simplename = "spring.lz.queue";
/**
* 创建一个队列对象,
*
* @return
*/
@Bean
public Queue simpleQueue() {
return new Queue(simplename);
}
}
下面是一对一的消息发送
4.使用整合的模板向MQ发送消息
使用整合的工具类明确发送的对象。
@RestController
public class SendController {
//使用定义的模板类来完成操作
@Resource
private RabbitTemplate rabbitTemplate;
@RequestMapping("/sead")
public String send() {
//使用完成发送消息向消息队列
rabbitTemplate.convertAndSend("spring.lz.queue","new Message()");
return "success";
}
}
5,设置监听器
@Component
public class SimpleListener {
@RabbitListener(queues={"spring.lz.queue"})
public void demo(){
System.out.println("您好");
}
}
前端发送请求后,将消息发送至MQ队列中。监听器在接收消息。
MQ有多种方式分别为:
一对一:一个对应一个监听器
一对多:一个对应两个监听器。两个监听器处理总量相等。(就像等于多了个处理器,分流分走了一半的任务)。一对多相对一对一只多了几个监听器处理消息。一对多默认是轮询的。但是慢的话,就让他慢着不太合适。可以设置配置文件
交换机模式:
广播:添加了交换机的理念,可以将一份消息多个监听器来重复消费。
定向:可以将消息通过校验密钥,传给”匹配的“密钥的用户(一个)。
通配符:算是定向的加强版,通过交换机的密钥,可以传输信息给指定用户(多个)