rabbitmq使用案例
时间: 2025-01-04 08:29:46 浏览: 7
### RabbitMQ 使用案例实际应用示例
#### 发布/订阅模式 (Publish/Subscribe)
在发布/订阅模式下,消息会广播给所有绑定到交换机上的队列。这种模式适用于需要通知多个接收方的情况。
```java
// 生产者代码片段
Channel channel = connection.createChannel();
channel.exchangeDeclare("logs", "fanout");
String message = "Hello World!";
channel.basicPublish("logs", "", null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
```
此模式常用于日志记录系统中,其中不同组件可能对相同类型的日志感兴趣[^3]。
#### 路由模式 (Routing)
路由模式允许基于特定键将消息定向至不同的队列。这使得可以根据业务逻辑精确控制哪些消费者应该收到何种类型的消息。
```java
// 配置路由键并声明队列和交换机之间的绑定关系
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, "direct_logs", "error");
// 消费者监听错误级别的日志
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" +
delivery.getEnvelope().getRoutingKey() +
"':'" + message + "'");
};
channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { });
```
该场景非常适合应用于分布式系统的监控报警机制,当某个服务出现问题时可以向负责维护的服务团队发送告警信息[^2].
#### 主题模式 (Topics)
主题模式是一种更灵活的路由方式,它支持通配符匹配规则。对于复杂的应用程序来说非常有用,因为它能够实现更加精细的消息过滤功能。
```java
// 定义带有通配符的主题名称
String queueName = channel.queueDeclare().getQueue();
// 绑定具有通配符的主题名
channel.queueBind(queueName, "topic_logs", "*.info");
channel.queueBind(queueName, "topic_logs", "#.critical.*");
// 订阅符合上述条件的日志条目
DeliverCallback deliverCallback = ...;
channel.basicConsume(queueName, autoAck, deliverCallback);
```
这类应用场景常见于大型企业级项目中的微服务体系架构里,用来协调各个独立部署单元之间的工作流程.
阅读全文