RabbitMQ

RabbitMQ

1. 简介

RabbitMQ是一个开源的消息代理和队列服务器,用来通过共同的协议传递消息,支持多种消息协议。它是用Erlang语言编写的,因此具有高并发和高可靠性的特点。RabbitMQ允许软件应用程序之间的松散耦合,这意味着系统的不同部分可以独立地接收、处理和转发消息,从而提高了系统的灵活性和可扩展性。

RabbitMQ与OpenFeign的区别:

  • 通信方式:OpenFeign 实现了同步的服务间调用,而 RabbitMQ 提供了异步的消息传递能力。
  • 使用场景:OpenFeign 适用于对实时性要求高(实现同步牺牲性能)的直接服务调用,RabbitMQ 适合于需要异步处理、消息可靠传递或者实现系统间解耦的场景。(不追求同步提升性能)
  • 技术栈:OpenFeign 主要在 Spring Cloud 环境中使用,用于简化微服务之间的HTTP调用;RabbitMQ 作为一个独立的消息队列服务,可以被任何能够与其通信的应用程序所使用,不限于 Java 或 Spring 应用。

2. 管控台操作

访问默认的15672端口来使用RadditMQ的管控台

2.1 消息队列配置

2.2 交换机配置

3.SpringAMQP

3.1 导入SpringAMQP依赖

RabbitMQ官方提供的Java客户端编码相对复杂,一般生产环境下我们更多会结合Spring来使用。而Spring的官方刚好基于RabbitMQ提供了这样一套消息收发的模板工具:SpringAMQP。并且还基于SpringBoot对其实现了自动装配,使用起来非常方便。

使用SpringAMQP需要加入相应的依赖 生产者和消费者都需要

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

3.2 配置application.yml文件

生产者和消费者都需要

1
2
3
4
5
6
7
spring:
rabbitmq:
host: 192.168.0.1 # 你的虚拟机IP
port: 5672 # 端口
virtual-host: myhost # 虚拟主机
username: admin # 用户名
password: 123 # 密码

3.3 “Hello World!” 简单的模式

3.3.1 创建消息队列

作为容器注入由Spring管理

1
2
3
4
5
6
7
8
9

@Configuration
public class RabbitMQConfig {

@Bean
public Queue simpleQueue() {
//表示创建一个消息队列名称为 simple.queue
return new Queue("simple.queue");
}

3.3.2 配置消费者接收

1
2
3
4
5
6
7
8
9
@Component
@Slf4j
public class SpringRabbitListener {

@RabbitListener(queues = "simple.queue") //接受这个队列的消息
public void handleSimpleQueue(String message){
log.info("消费者收到的消息:{}", message);
}

3.3.3 配置生产者发送

使用测试类发送,实际场景中可以直接注入RabbitTemplate直接使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@SpringBootTest
public class PublisherApplicationTest {

@Autowired
private RabbitTemplate rabbitTemplate;

/**
* 简单模式
* @throws Exception
*/
@Test
public void simpleQueueTest() throws Exception {
//参数一:RoutingKey,路由Key,简单模式,写的就是队列名称
//参数二:消息内容

rabbitTemplate.convertAndSend("simple.queue", "你好啊!!");
}

3.4 WorkQueues模型

当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。

此时就可以使用work 模型,多个消费者共同处理消息处理,消息处理的速度就能大大提高了。


RabbitMQ
http://example.com/2024/03/24/RabbitMQ/
作者
kangkang
发布于
2024年3月24日
许可协议