RabbitMQ 第一个程序

本文深入探讨了RabbitMQ消息服务器如何通过Exchange机制解决应用程序间异步消息传输问题,详细解析了Direct、Fanout、Topic和Headers四种交换机类型的工作原理及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ消息服务器主要解决应用程序之间异步消息传输问题,传统的MQ分为点对点和主题与订阅,RabbitMQ使用Exchange(交换机)实现更加灵活的消息传递。
在这里插入图片描述
前面介绍过几个概念,RoutingKey,Binding,Queue,Exchange,
Binding将Exchange和Queue绑定在一起,Exchange是交换机,Queue是消息队列,Exchange的四种类型决定如何将生产者的消息分发到Queue上。
RoutingKey是路由关键字,生产者根据RoutingKey决定将消息发送到哪个Exchange上,进而由Exchange决定将消息发送到哪个Queue上,消费者就可以从Queue获得消息。

交换机类型Direct
将符合Routing Key匹配到指定的Exchange,进而到指定的Queue上,类似点对点
在这里插入图片描述
交换机类型Fanout
忽略Routing Key,将消息发送到所有与Exchange绑定的Queue上,类似广播
在这里插入图片描述
交换机类型Topic
是根据统配符投递消息
*匹配一个单词,#匹配一个或多个单词
在这里插入图片描述
交换机类型Headers
类似Direct,只是不再使用RoutingKey匹配投递,而是使用headers中消息属性匹配Queue

下面的例程是使用Direct类型的交换机

编写消息生产者,需要在生产者中定义或使用Exchange和Queue

Java使用RabbitMQ必须下载RabbitMQ客户端类库,这里使用的是amqp-client-3.2.2.jar版本,为了方便使用类库,还需要下载API amqp-client-3.2.2-javadoc.jar
API截图
在这里插入图片描述

这里两个文件,可以通过云盘下载:
https://pan.baidu.com/s/1miBtbRi

程序代码下载
https://pan.baidu.com/s/1dF4fGOh

第一个Rabbitmq Java程序
在这里插入图片描述
在这里插入图片描述

运行后,通过RabbitMQ控制台可以看到
在这里插入图片描述

我们看到消息队列TestQueue中有一条消息。

编写消息消费者,使用在生产者中定义的Exchange和Queue
在这里插入图片描述
运行消费者程序后,查看RabbitMQ管理台,发现消息消失了。
在这里插入图片描述

### 如何在 RabbitMQ 中配置和添加新的虚拟主机 (vhost) 在 RabbitMQ 中,虚拟主机(vhost)是一个逻辑上的隔离单元,用于划分不同应用之间的消息队列资源。通过创建 vhost 可以实现更细粒度的权限管理和资源分配。 #### 使用命令行工具 `rabbitmqctl` 添加虚拟主机 可以通过 RabbitMQ 提供的命令行工具 `rabbitmqctl` 来添加一个新的虚拟主机: ```bash rabbitmqctl add_vhost [name] ``` 其中 `[name]` 是要创建的虚拟主机名称。例如,如果想创建名为 `my_vhost` 的虚拟主机,则执行以下命令[^3]: ```bash rabbitmqctl add_vhost my_vhost ``` 此操作完成后,可以使用以下命令查看当前所有的虚拟主机列表: ```bash rabbitmqctl list_vhosts ``` 这将返回所有已存在的虚拟主机及其相关信息。 #### 为新虚拟主机分配用户权限 创建好虚拟主机之后,还需要为其设置访问权限。假设有一个用户名为 `test_user` 的用户,需要赋予其对 `my_vhost` 虚拟主机的完全控制权,可运行如下命令: ```bash rabbitmqctl set_permissions -p my_vhost test_user ".*" ".*" ".*" ``` 上述命令中的三个正则表达式分别表示该用户对于交换器、队列以及绑定的操作范围。这里的 `"."*"` 表示允许对该虚拟主机下的任何资源进行读写操作[^2]。 #### Spring Boot 配置多 vhost 场景支持 当项目中有需求连接到多个 RabbitMQ 实例或者同一实例的不同 vhost 上时,在 Spring Boot 应用程序中可通过自定义配置来满足这一场景。以下是基于 YAML 文件的一个简单例子[^5]: ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest virtual-host: /first-vhost # 默认使用的第一个虚拟主机 # 定义第二个连接池参数 second-rabbitmq-config: host: localhost port: 5672 username: another-user password: secret-password virtual-host: /second-vhost ``` 接着可以在 Java 代码里针对不同的业务模块注入相应的 ConnectionFactory 或者 RabbitTemplate 对象完成具体的消息发送与消费功能扩展[^4]。 --- ### 示例代码片段 下面展示一段简单的 Java 配置类用来初始化两个独立的 RabbitMQ 连接工厂实例: ```java @Configuration public class RabbitConfig { @Bean(name = "defaultConnectionFactory") public ConnectionFactory defaultConnectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost("localhost"); connectionFactory.setPort(5672); connectionFactory.setUsername("guest"); connectionFactory.setPassword("guest"); connectionFactory.setVirtualHost("/first-vhost"); return connectionFactory; } @Bean(name = "secondaryConnectionFactory") public ConnectionFactory secondaryConnectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost("localhost"); connectionFactory.setPort(5672); connectionFactory.setUsername("another-user"); connectionFactory.setPassword("secret-password"); connectionFactory.setVirtualHost("/second-vhost"); return connectionFactory; } } ``` 以上展示了如何在一个应用程序内部同时维护并利用来自不同 vhost 下的服务能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值