spring 整合 rabbitMq 生产者和消费者 xml配置 完整
时间: 2025-07-19 11:33:05 AIGC 浏览: 30
<think>我们正在讨论Spring整合RabbitMQ的XML配置,用户要求一个完整的生产者和消费者配置示例。根据之前的对话,我们已经给出了一个XML配置的框架,现在需要更详细地展开,特别是生产者和消费者的配置。
注意:用户提供了几个引用,但主要是关于Spring Boot的properties配置和RabbitMQ环境变量设置,以及Spring Boot配置文件的介绍。但用户明确要求XML配置,所以我们将忽略Spring Boot的注解配置方式,专注于传统的Spring XML配置。
我们将提供以下内容:
1. RabbitMQ连接工厂的配置
2. 声明队列、交换器、绑定
3. RabbitTemplate(生产者)的配置
4. 消息监听容器和消息监听器(消费者)的配置
同时,我们将展示一个简单的生产者和消费者实现。
注意:在XML配置中,我们需要使用rabbit命名空间。因此,在配置文件的顶部需要声明相应的命名空间。
完整的XML配置文件示例:</think>以下是一个完整的 Spring 整合 RabbitMQ 的 XML 配置示例,包含生产者和消费者的完整实现:
### 完整 XML 配置 (`applicationContext-rabbit.xml`)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
<!-- 1. RabbitMQ 连接工厂配置 -->
<rabbit:connection-factory id="connectionFactory"
host="localhost"
port="5672"
username="guest"
password="guest"
virtual-host="/"/>
<!-- 2. RabbitTemplate (生产者) 配置 -->
<rabbit:template id="rabbitTemplate"
connection-factory="connectionFactory"
exchange="my.exchange"
routing-key="my.key"/>
<!-- 3. RabbitAdmin 自动声明队列和交换器 -->
<rabbit:admin connection-factory="connectionFactory"/>
<!-- 4. 队列声明 -->
<rabbit:queue id="myQueue" name="my.queue" durable="true" auto-delete="false">
<!-- 可选:死信队列配置 -->
<rabbit:queue-arguments>
<entry key="x-dead-letter-exchange" value="dlx.exchange"/>
<entry key="x-dead-letter-routing-key" value="dlx.key"/>
</rabbit:queue-arguments>
</rabbit:queue>
<!-- 5. 直连交换器声明 -->
<rabbit:direct-exchange name="my.exchange" durable="true">
<rabbit:bindings>
<rabbit:binding queue="myQueue" key="my.key"/>
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 6. 消息监听容器 (消费者) -->
<rabbit:listener-container connection-factory="connectionFactory"
acknowledge="auto"
concurrency="5" max-concurrency="10">
<rabbit:listener ref="messageListener" queues="myQueue"/>
</rabbit:listener-container>
<!-- 7. 消息监听器实现 -->
<bean id="messageListener" class="com.example.MyMessageListener"/>
<!-- 8. 生产者Bean -->
<bean id="messageProducer" class="com.example.MessageProducer">
<property name="rabbitTemplate" ref="rabbitTemplate"/>
</bean>
</beans>
```
### 生产者实现 (`MessageProducer.java`)
```java
public class MessageProducer {
private RabbitTemplate rabbitTemplate;
public void setRabbitTemplate(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendMessage(String message) {
rabbitTemplate.convertAndSend(message);
System.out.println("Sent message: " + message);
}
}
```
### 消费者实现 (`MyMessageListener.java`)
```java
public class MyMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
String msg = new String(message.getBody(), StandardCharsets.UTF_8);
System.out.println("Received message: " + msg);
// 业务处理逻辑...
}
}
```
### 主应用配置 (`applicationContext.xml`)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 导入RabbitMQ配置 -->
<import resource="applicationContext-rabbit.xml"/>
<!-- 其他Bean配置 -->
</beans>
```
### 关键配置说明
1. **连接工厂**:
- 配置 RabbitMQ 服务器连接参数
- 支持自动重连机制(可添加 `automatic-recovery-enabled="true"`)
2. **RabbitTemplate**:
- 生产者核心组件
- 默认使用 `direct exchange`
- 支持消息转换器(可添加 `message-converter` 属性)
3. **队列声明**:
- `durable="true"` 确保队列持久化
- `auto-delete="false"` 连接断开时保留队列
- 支持死信队列配置(DLX)
4. **监听容器**:
- `acknowledge="auto"` 自动确认消息
- `concurrency` 设置最小/最大消费者线程数
- 支持手动ACK模式(`acknowledge="manual"`)
5. **消息监听器**:
- 实现 `MessageListener` 接口
- 处理消息消费逻辑
- 支持消息转换(如 JSON 到对象)
### 依赖配置 (`pom.xml`)
```xml
<dependencies>
<!-- Spring RabbitMQ -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.4.5</version>
</dependency>
<!-- Spring 核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.18</version>
</dependency>
</dependencies>
```
### 使用示例
```java
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取生产者
MessageProducer producer = context.getBean("messageProducer", MessageProducer.class);
// 发送消息
producer.sendMessage("Hello RabbitMQ!");
}
}
```
### 注意事项
1. 确保 RabbitMQ 服务已启动(默认 `localhost:5672`)
2. 持久化队列需配合 `delivery_mode=2` 的消息属性
3. 生产环境建议配置连接池和超时参数
4. 消息确认模式根据业务可靠性要求选择(auto/manual)
此配置实现了完整的 RabbitMQ 生产消费流程,包含队列声明、消息路由、持久化支持和消费者并发控制[^1]。
---
###
阅读全文
相关推荐


















