1. Fanout 类型交换机
/*** 监听 fanout 类型的交换机 "fanout.hamll",绑定到队列 "fanout.hamll.query2"* fanout 类型的交换机会将消息广播到所有绑定的队列。** 使用步骤:* 1. 确保 RabbitMQ 服务器已启动并运行。* 2. 在 RabbitMQ 管理界面中创建名为 "fanout.hamll" 的 fanout 类型交换机。* 3. 启动 Spring Boot 应用程序,MyRabbitListener 将自动创建并绑定队列 "fanout.hamll.query2" 到交换机 "fanout.hamll"。** 注意点:* 1. fanout 类型的交换机忽略 routing key,所有绑定的队列都会收到消息。* 2. 确保交换机名称和类型与代码中声明的一致。*/
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "fanout.hamll.query2", durable = true), // 持久化队列exchange = @Exchange(name = "fanout.hamll", type = ExchangeTypes.FANOUT, durable = true) // 持久化交换机
))
public void query2(String message) {System.err.println("fanout.hamll.query2: " + message);
}
2. Direct 类型交换机
/*** 监听 direct 类型的交换机 "direct.hamll",绑定到队列 "direct.hamll.query1",使用 routing key "query.hamll.query1"* direct 类型的交换机会根据 routing key 将消息路由到指定的队列。** 使用步骤:* 1. 确保 RabbitMQ 服务器已启动并运行。* 2. 在 RabbitMQ 管理界面中创建名为 "direct.hamll" 的 direct 类型交换机。* 3. 启动 Spring Boot 应用程序,MyRabbitListener 将自动创建并绑定队列 "direct.hamll.query1" 到交换机 "direct.hamll"。** 注意点:* 1. direct 类型的交换机根据 routing key 精确匹配队列。* 2. 确保交换机名称、类型和 routing key 与代码中声明的一致。*/
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.hamll.query1", durable = true), // 持久化队列exchange = @Exchange(name = "direct.hamll", type = ExchangeTypes.DIRECT, durable = true), // 持久化交换机key = "query.hamll.query1" // routing key
))
public void directQuery1(String message) {System.err.println("direct.hamll.query1: " + message);
}
3. Topic 类型交换机
/*** 监听 topic 类型的交换机 "topic.hamll",绑定到队列 "topic.hamll.query1",使用 routing key "query.hamll.*"* topic 类型的交换机会根据 routing key 的模式匹配将消息路由到指定的队列。** 使用步骤:* 1. 确保 RabbitMQ 服务器已启动并运行。* 2. 在 RabbitMQ 管理界面中创建名为 "topic.hamll" 的 topic 类型交换机。* 3. 启动 Spring Boot 应用程序,MyRabbitListener 将自动创建并绑定队列 "topic.hamll.query1" 到交换机 "topic.hamll"。** 注意点:* 1. topic 类型的交换机根据 routing key 的模式匹配队列。* 2. 通配符说明:* - *:匹配一个单词。* - #:匹配零个或多个单词。* 3. 确保交换机名称、类型和 routing key 模式与代码中声明的一致。*/
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.hamll.query1", durable = true), // 持久化队列exchange = @Exchange(name = "topic.hamll", type = ExchangeTypes.TOPIC, durable = true), // 持久化交换机key = "query.hamll.*" // routing key 模式
))
public void topicQuery1(String message) {System.err.println("topic.hamll.query1: " + message);
}
4. Headers 类型交换机
/*** 监听 headers 类型的交换机 "headers.hamll",绑定到队列 "headers.hamll.query1"* headers 类型的交换机会根据消息的 headers 属性进行匹配将消息路由到指定的队列。** 使用步骤:* 1. 确保 RabbitMQ 服务器已启动并运行。* 2. 在 RabbitMQ 管理界面中创建名为 "headers.hamll" 的 headers 类型交换机。* 3. 启动 Spring Boot 应用程序,MyRabbitListener 将自动创建并绑定队列 "headers.hamll.query1" 到交换机 "headers.hamll"。** 注意点:* 1. headers 类型的交换机根据消息的 headers 属性进行匹配。* 2. 确保交换机名称、类型和 headers 属性与代码中声明的一致。*/
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "headers.hamll.query1", durable = true), // 持久化队列exchange = @Exchange(name = "headers.hamll", type = ExchangeTypes.HEADERS, durable = true), // 持久化交换机arguments = {@Argument(name = "x-match", value = "all"), // 匹配所有 headers@Argument(name = "type", value = "query"),@Argument(name = "module", value = "query1")}
))
public void headersQuery1(String message) {System.err.println("headers.hamll.query1: " + message);
}