sringboot RabbitMQ
时间: 2024-12-31 18:39:10 浏览: 47
### 关于 Spring Boot 和 RabbitMQ 集成
在构建基于消息的应用程序时,Spring Boot 提供了与 RabbitMQ 的无缝集成。通过 `spring-boot-starter-amqp` 依赖项简化了配置过程[^4]。
#### 添加依赖项
为了使应用程序能够连接到 RabbitMQ 并发送/接收消息,在项目的 `pom.xml` 文件中添加如下 Maven 依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
```
此依赖会引入必要的库来支持 AMQP 协议通信,并启用自动配置功能。
#### 配置文件设置
编辑 `application.properties` 或者 `application.yml` 来指定 RabbitMQ 连接参数:
对于 `.properties` 文件:
```properties
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
```
对于 `.yml` 文件:
```yaml
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
```
这些属性定义了如何访问本地运行的默认实例;实际部署时应替换为适当的服务地址和认证信息。
#### 创建生产者组件
下面是一个简单的例子展示怎样创建一个用于发布消息至队列中的服务类:
```java
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MessageProducer {
private final RabbitTemplate rabbitTemplate;
@Autowired
public MessageProducer(ConnectionFactory connectionFactory){
this.rabbitTemplate = new RabbitTemplate(connectionFactory);
}
public void sendMessage(String queueName, String messageContent){
System.out.println("Sending message...");
rabbitTemplate.convertAndSend(queueName,messageContent);
System.out.println("Message sent.");
}
}
```
这段代码展示了如何利用 `RabbitTemplate` 发送字符串形式的消息给指定名称的目标队列。
#### 定义消费者逻辑
同样地,这里有一个消费端的例子说明监听来自某个特定队列的信息并处理它们的方式:
```java
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.stereotype.Component;
@Component
public class MessageConsumer implements ChannelAwareMessageListener {
@Override
public void onMessage(Message message, Channel channel) throws Exception {
try{
byte[] body=message.getBody();
String content=new String(body,"UTF-8");
System.out.println("Received message : " +content);
// 手动确认模式下需要调用basicAck方法完成ACK操作
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
}catch(Exception e){
System.err.println(e.toString());
}
}
}
```
上述实现实现了接口 `ChannelAwareMessageListener` ,允许直接获取底层通道对象以便执行更复杂的任务如事务管理或错误恢复策略。
#### 启用管理插件 (可选)
如果希望监控 RabbitMQ 实例的状态,则可以在安装完成后启动其内置Web UI工具。这可以通过命令行激活相应的插件来达成目的[^5]:
```bash
rabbitmq-plugins enable rabbitmq_management
```
之后就可以通过浏览器访问 http://localhost:15672 查看详细的统计图表和其他诊断数据了。(注意,默认用户名密码均为 'guest')
阅读全文
相关推荐



















