在Spring Boot项目中集成RabbitMQ并实现消息的生产和消费是一个常见的任务。以下是一个完整的Spring Boot集成RabbitMQ并实现消息生产者和消费者的案例。
步骤 1:添加依赖
在pom.xml
中添加Spring Boot RabbitMQ的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
步骤 2:配置 RabbitMQ
在Spring Boot的application.yml
或application.properties
中配置RabbitMQ连接信息。
使用application.yml
:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
步骤 3:创建配置类
创建RabbitMQ的配置类,定义队列、交换机和绑定。
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
public static final String QUEUE_NAME = "example.queue";
public static final String EXCHANGE_NAME = "example.exchange";
public static final String ROUTING_KEY = "example.routingKey";
// 定义队列
@Bean
public Queue queue() {
return new Queue(QUEUE_NAME, true);
}
// 定义交换机
@Bean
public DirectExchange exchange() {
return new DirectExchange(EXCHANGE_NAME);
}
// 定义绑定
@Bean
public Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
}
}
步骤 4:生产者
创建一个生产者用于发送消息到RabbitMQ。
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RabbitMQProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(String message) {
rabbitTemplate.convertAndSend(
RabbitMQConfig.EXCHANGE_NAME,
RabbitMQConfig.ROUTING_KEY,
message
);
System.out.println("Message sent: " + message);
}
}
步骤 5:消费者
创建一个消费者,用于监听RabbitMQ队列并消费消息。
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class RabbitMQConsumer {
@RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
}
}
步骤 6:启动类
确保主类上有@SpringBootApplication
注解,并运行项目。
步骤 7:测试生产和消费
在任意地方(例如Controller或CommandLineRunner
)调用生产者发送消息。
Controller示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RabbitMQController {
@Autowired
private RabbitMQProducer producer;
@GetMapping("/send")
public String sendMessage(@RequestParam String message) {
producer.sendMessage(message);
return "Message sent: " + message;
}
}
运行测试:
- 启动Spring Boot应用。
- 打开浏览器或Postman,访问
http://localhost:8080/send?message=HelloRabbitMQ
。 - 查看控制台输出,消费者会自动接收到消息并打印出来。
完整代码结构
src/main/java
└── com.example.rabbitmqdemo
├── RabbitMQConfig.java # 配置类
├── RabbitMQProducer.java # 生产者
├── RabbitMQConsumer.java # 消费者
├── RabbitMQController.java # 测试用的Controller
└── RabbitmqDemoApplication.java # Spring Boot主类
运行结果
- 生产者:
Message sent: HelloRabbitMQ
- 消费者:
Received message: HelloRabbitMQ
这样,您已经完成了Spring Boot集成RabbitMQ并实现生产和消费的功能!