1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.引入配置文件
spring:
application:
name: rabbitmq-springboot
rabbitmq:
host: 127.0.0.1
port: 5672
username: ws
password: 123
virtual-host: /ws
模型一 "Hello World!"
创建测试类作为生产者
@SpringBootTest(classes = RabbitmqApplication.class)
@RunWith(SpringRunner.class) //启动spring工厂
public class TestRabbitMQ {
@Autowired
// 注入RabbitTemplate
private RabbitTemplate rabbitTemplate;
//hello world
@Test
public void test(){
rabbitTemplate.convertAndSend("hello1","hello world");
}
}
创建消费者
@Component
//默认创建 持久化 非独占 持久化队列 true
@RabbitListener(queuesToDeclare = @Queue("hello1"))//声明消费者 监听hello队列 有消息即消费
public class HelloCustomer {
/**
* message 消息队列中的消息
*/
@RabbitHandler//代表队列取出消息是通过这个方法取出
public void receivel(String message){
System.out.println("message==="+message);
}
}
模型二 工作队列 Work queues
一个生产者 多个消费者
消费者:
@Component
public class WorkCustomer {
@Autowired
private RabbitTemplate rabbitTemplate;
//默认创建 持久化 非独占 持久化队列 true
@RabbitListener(queuesToDeclare = @Queue("work"))//声明消费者 监听hello队列 有消息即消费
public void receive1(String message) {
System.out.println("message1===" + message);
}
//默认创建 持久化 非独占 持久化队列 true
@RabbitListener(queuesToDeclare = @Queue("work"))//声明消费者 监听hello队列 有消息即消费
public void receive2(String message) {
System.out.println("message2===" + message);
}
}
生产者:
@SpringBootTest(classes = RabbitmqApplication.class)
@RunWith(SpringRunner.class) //启动spring工厂
public class TestRabbitMQ {
@Autowired
// 注入RabbitTemplate
private RabbitTemplate rabbitTemplate;
//hello world
@Test
public void test(){
for (int i = 0; i < 10; i++) {
rabbitTemplate.convertAndSend("work","work队列"+i);
}
}
}
模型三 通过交换机广播发送 Publish/Subscribe
生产者:
@Test
public void testFanout(){
rabbitTemplate.convertAndSend("logs","","Publish/Subscribe fanout模型发送");
}
消费者:
@Component
public class FanoutCustomer {
@RabbitListener(bindings = {@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "logs",type="fanout")//绑定的交换机
)})
public void receive1(String message){
System.out.println("message1==="+message);
}
@RabbitListener(bindings = {@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "logs",type="fanout")//绑定的交换机
)})
public void receive2(String message){
System.out.println("message2==="+message);
}
}
自动创建交换机
模型四 路由 Routing
消费者:
@Component
public class RouteCustomer {
@RabbitListener(bindings = {@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "directs",type="direct"),//自定义交换机名称和类型
key = {"info","error","warn"}
)})
public void receive1(String message){
System.out.println("message1==="+message);
}
@RabbitListener(bindings = {@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "directs",type="direct"),//自定义交换机名称和类型
key = {"error"}
)})
public void receive2(String message){
System.out.println("message2==="+message);
}
}
生产者:info
@Test//route 路由模式
public void testRoute(){
rabbitTemplate.convertAndSend("directs","info","发送 info的key的路由信息");
}
结果:
error
@Test//route 路由模式
public void testRoute(){
rabbitTemplate.convertAndSend("directs","error","发送 error的key的路由信息");
}
结果:
模式五 订阅模式 动态路由 Topics
消费者:
@Component
public class RouteCustomer {
@RabbitListener(bindings = {@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "directs",type="direct"),//自定义交换机名称和类型
key = {"info","error","warn"}
)})
public void receive1(String message){
System.out.println("message1==="+message);
}
@RabbitListener(bindings = {@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "directs",type="direct"),//自定义交换机名称和类型
key = {"error"}
)})
public void receive2(String message){
System.out.println("message2==="+message);
}
}
生产者:
@Test//route 路由模式
public void testTopics(){
rabbitTemplate.convertAndSend("topics","user.save","user.save 路由消息");
}
结果:
@Test//route 路由模式
public void testTopics(){
rabbitTemplate.convertAndSend("topics","order.save.id","order.save.id 路由消息");
}
结果: