以下是“Spring Boot中使用RabbitMQ Routing路由详解”的完整攻略,包含两个示例说明。
简介
RabbitMQ是一个开源的消息队列系统,它支持多种消息协议,包括AMQP、STOMP、MQTT等。在RabbitMQ中消息通过交换机(Exchange)路由到队列(Queue)中,交换机可以使用不同的路由键(Routing Key)和绑定(Binding)来控制消息的路由。
Routing路由是RabbitMQ中一种常用的消息路由模式,它可以根据路由键将消息路由到多个队列中。Routing路由的路由键是一个字符串,可以使用通配符(*和#)来匹配多个路由键。
示例1:发送和接收Routing消息
以下是一个使用Spring Boot发送和接收Routing消息的示例:
1. 添加依赖项
首先,您需要添加以下依赖项到您的pom.xml
文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2. 配置RabbitMQ连接
在application.properties
文件中添加以下配置:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
3. 发送Routing消息
以下是一个简单的发送Routing消息的示例:
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class RoutingSender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String message = "Hello, Routing!";
rabbitTemplate.convertAndSend("my-exchange", "routing-key", message);
}
}
在这个示例中,我们使用AmqpTemplate
发送消息。我们使用rabbitTemplate.convertAndSend
方法将消息发送到名为my-exchange
的交换机中,并使用routing-key
路由键将消息路由到队列中。
4. 接收Routing消息
以下是一个简单的接收Routing消息的示例:
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.stereotype.Component;
@Component
public class RoutingReceiver implements MessageListener {
@Override
public void onMessage(Message message) {
String text = new String(message.getBody());
System.out.println("Received message: " + text);
}
}
在这个示例中,我们实现了MessageListener
接口,并在onMessage
方法中打印出接收到的消息。
5. 配置交换机和队列
在RabbitConfig
类中添加以下配置:
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.ExchangeBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public Exchange myExchange() {
return ExchangeBuilder.directExchange("my-exchange").durable(true).build();
}
@Bean
public Queue myQueue() {
return QueueBuilder.durable("my-queue").build();
}
@Bean
public Binding binding() {
return BindingBuilder.bind(myQueue()).to(myExchange()).with("routing-key");
}
}
在这个示例中,我们使用ExchangeBuilder
创建一个名为my-exchange
的Direct交换机,并使用QueueBuilder
创建一个名为my-queue
的持久化队列。我们使用BindingBuilder
将队列绑定到交换机上,并使用routing-key
路由键将消息路由到队列中。
6. 运行示例
在Application
类中添加以下代码:
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableRabbit
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在这个示例中,我们使用@EnableRabbit
注解启用RabbitMQ支持。
现在,您可以运行RoutingSender
类来发送Routing消息,运行RoutingReceiver
类来接收Routing消息。
示例2:使用通配符匹配Routing消息
以下是一个使用通配符匹配Routing消息的示例:
1. 发送Routing消息
以下是一个发送Routing消息的示例:
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class RoutingSender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String message1 = "Hello, Routing 1!";
rabbitTemplate.convertAndSend("my-exchange", "routing-key.1", message1);
String message2 = "Hello, Routing 2!";
rabbitTemplate.convertAndSend("my-exchange", "routing-key.2", message2);
}
}
在这个示例中,我们发送了两条Routing消息,分别使用routing-key.1
和routing-key.2
路由键。
2. 接收Routing消息
以下是一个接收Routing消息的示例:
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.stereotype.Component;
@Component
public class RoutingReceiver implements MessageListener {
@Override
public void onMessage(Message message) {
String text = new String(message.getBody());
System.out.println("Received message: " + text);
}
}
在这个示例中,我们实现了MessageListener
接口,并在onMessage
方法中打印出接收到的消息。
3. 配置交换机和队列
在RabbitConfig
类中添加以下配置:
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.ExchangeBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public Exchange myExchange() {
return ExchangeBuilder.directExchange("my-exchange").durable(true).build();
}
@Bean
public Queue myQueue1() {
return QueueBuilder.durable("my-queue-1").build();
}
@Bean
public Binding binding1() {
return BindingBuilder.bind(myQueue1()).to(myExchange()).with("routing-key.#");
}
@Bean
public Queue myQueue2() {
return QueueBuilder.durable("my-queue-2").build();
}
@Bean
public Binding binding2() {
return BindingBuilder.bind(myQueue2()).to(myExchange()).with("routing-key.2");
}
}
在这个示例中,我们使用ExchangeBuilder
创建一个名为my-exchange
的Direct交换机,并使用QueueBuilder
创建两个持久化队列my-queue-1
和my-queue-2
。我们使用BindingBuilder
将队列绑定到交换机上,并使用routing-key.#
路由键将消息路由到my-queue-1
队列中,使用routing-key.2
路由键将消息路由到my-queue-2
队列中。
4. 运行示例
在Application
类中添加以下代码:
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableRabbit
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在这个示例中,我们使用@EnableRabbit
注解启用RabbitMQ支持。
现在,您可以运行RoutingSender
类来发送Routing消息,运行RoutingReceiver
类来接收Routing消息。您会发现,使用routing-key.#
路由键的消息会被路由到my-queue-1
队列中,使用routing-key.2
路由键的消息会被路由到my-queue-2
队列中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot中使用RabbitMQ routing路由详解 - Python技术站