1、在消费者服务中,利用代码声明队列、交换机,并将两者绑定
在消费者服务中创建MQConfig,配置类:
package cn.itheima.mq;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MQ的配置类
*
* @author ning
* @since 2022/12/2 21:48
*/
@Configuration
public class MQConfig {
//创建一个Fanout交换机
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange("exchange.fanout");
}
//创建一个Fanout队列1
@Bean
public Queue queue1(){
return new Queue("fanout.queue1");
}
//创建一个Fanout队列2
@Bean
public Queue queue2(){
return new Queue("fanout.queue2");
}
//绑定对列1
@Bean
public Binding binding1(FanoutExchange fanoutExchange,Queue queue1){
return BindingBuilder.bind(queue1).to(fanoutExchange);
}
//绑定对列2
@Bean
public Binding binding2(FanoutExchange fanoutExchange,Queue queue2){
return BindingBuilder.bind(queue2).to(fanoutExchange);
}
}
2、在消费者服务中,编写两个消费者方法,分别监听fanout.queue1和fanout.queue2
在listener包下创建SpringFanoutRabbitListener类:
package cn.itheima.mq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 接收消息
* @author ning
* @since 2022/12/2 20:31
*/
@Component
public class SpringFanoutRabbitListener {
//声明要监听的队列
//可以监听多个队列
//监听一个:queues = ""
//监听多个:queues = {""}
@RabbitListener(queues = "fanout.queue1")
public void listenFanoutQueue1(String msg) {
System.out.println("消费者1接受到了消息" + msg);
}
//声明要监听的队列
//可以监听多个队列
//监听一个:queues = ""
//监听多个:queues = {""}
@RabbitListener(queues = "fanout.queue2")
public void listenFanoutQueue2(String msg) {
System.out.println("消费者2接受到了消息" + msg);
}
}
3、在生产者服务中,编写测试方法,向exchange.fanout发送消息
package cn.itheima.mq.helloworld;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* 发送消息测试类
*
* @author ning
* @since 2022/12/2 20:09
*/
@SpringBootTest
public class SpringAmqpFanoutTest {
//注入收发消息模板
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void testSimpleFanoutQueue() {
//消息
String msg = "hello, spring amqp!";
//交换机名称
String exchangeName = "exchange.fanout";
//发送消息,转成字节数组发送
//给交换机发送消息是三个参数
rabbitTemplate.convertAndSend(exchangeName,"",msg);
System.out.println("消息发送完毕");
}
}