简介
RabbitMQ是一个流行的开源消息代理软件,用于在应用程序之间进行消息传递。它是一个高度可靠的、可扩展的、多协议的消息代理,支持多种消息传递模式,如点对点、发布/订阅、工作队列等,可以帮助解决分布式应用程序中的通信问题。
RabbitMQ的核心概念是消息、生产者、消费者和代理。消息是一个由生产者发送给代理的数据包,代理将其存储在队列中,并等待消费者来消费它。生产者是一个发送消息到代理的应用程序,消费者则是一个接收并处理消息的应用程序。代理是RabbitMQ的核心组件,它管理消息的传递、存储和路由
RabbitMQ支持多种消息传递协议,包括AMQP(高级消息队列协议)、STOMP(简单文本协议)、MQTT(消息队列遥测传输)等。它还提供了一些高级特性,如消息确认、事务、持久化、消息优先级等,可以满足各种复杂的消息传递需求。
RabbitMQ可以在多种平台上运行,并有各种语言的客户端库可供使用,如Java、Python、Ruby、C#等。它广泛用于企业应用程序中,如电子商务、金融交易、实时数据分析等场景
正文
1.添加依赖
首先,在你的 Spring Boot 项目中,需要添加以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.配置 RabbitMQ
在 application.properties 文件中添加 RabbitMQ 的配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
3.创建消息接收者
创建一个消息接收者,用于处理从 RabbitMQ 中接收到的消息
这里使用了 @Component
注解将 MessageReceiver 类声明为 Spring Bean,同时使用 @RabbitListener
注解标注了 receiveMessage
方法,表示它可以接收名为 myQueue
的 RabbitMQ 队列中的消息.
@Component
public class MessageReceiver {
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
}
}
4.创建消息发送者
这里同样使用了 @Component
注解将 MessageSender 类声明为 Spring Bean,并注入了 RabbitTemplate 对象,用于发送消息。sendMessage
方法会将消息发送到名为 myQueue
的 RabbitMQ 队列中.
@Component
public class MessageSender {
private final RabbitTemplate rabbitTemplate;
public MessageSender(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendMessage(String message) {
rabbitTemplate.convertAndSend("myQueue", message);
}
}
5.启动应用程序
在 Spring Boot 应用程序的入口类中添加 @EnableRabbit
注解,并运行应用程序
@SpringBootApplication
@EnableRabbit
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6.测试
现在就可以发送消息到 RabbitMQ 队列中,并通过 MessageReceiver 接收处理.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class MyApplicationTests {
@Autowired
private MessageSender messageSender;
@Test
void test() {
messageSender.sendMessage("Hello, RabbitMQ!");
}
}
这将向名为 myQueue
的 RabbitMQ 队列发送一条消息,MessageReceiver 会接收并输出消息到控制台。