SpringBoot---RabbitMQ消息队列_1(fanout类型的交换器)

1、首先下载安装好Rabbit MQ,使用Username : guest Password: guest登录

 2、观察目前RabbitMq中的Exchange和queue的情况。下图是默认存在的交换器

3、 默认没有任何消息队列

 RabbitMQ和SpringBoot整合

RabbitMq交换器接收到的消息会广播到每一个绑定的消息队列。(fanout类型的交换器)

Spring提供对RabbitMQ的封装如下:1)AmqpAdmin    bean对象  管理rabbitMQ的Bean对象
创建交换器、绑定队列等
(2)RabbitTemplate  消息的操作对象

1、创建一个SpringBoot工程,添加RabbitMq的启动依赖

2、配置文件配置

# 配置RabbitMQ消息中间件连接配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#配置RabbitMQ虚拟主机路径/,默认可以省略
spring.rabbitmq.virtual-host=/

3、在test文件夹的测试类中创建以下测试方法,用于在RabbitMq添加队列和交换器

@SpringBootTest
class Rabbitmq14ApplicationTests {
    @Autowired
    AmqpAdmin amqpAdmin;
@Resource RabbitTemplate rabbitTemplate;
@Test public void adminRabbitMq(){ //1、创建一个交换器 amqpAdmin.declareExchange(new FanoutExchange("my_fanout_exchange")); //2、创建队列 amqpAdmin.declareQueue(new Queue("queue_email")); amqpAdmin.declareQueue(new Queue("queue_sms")); //3、绑定交换器和队列 amqpAdmin.declareBinding(new Binding("queue_email",Binding.DestinationType.QUEUE,"my_fanout_exchange","",null)); amqpAdmin.declareBinding(new Binding("queue_sms",Binding.DestinationType.QUEUE,"my_fanout_exchange","",null)); System.out.println("消息队列创建成功!"); }}

4、运行该测试方法。观察控制台输出,同时观察RabbitMq

 

 

 5、添加配置类

@Configuration
public class RabbitMQConfig {
    /**
     * 定制JSON格式的消息转换器
     * @return
     */
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

添加User类

@Data
public class User {
    Long id;
    String username;
    String email;
    int age;
}
User.java 

6、将消息发送到RabbitMq交换器,在测试类中添加下面方法,发送100个消息。

@Test
    public void publishMag(){
        User user=new User();
        user.setAge(30);
        user.setId(10000L);
        user.setEmail("test@aliyun.com");
        user.setUsername("builderMsg");
        for(int i=0;i<100;i++){
            rabbitTemplate.convertAndSend("fanout_exchange","",user); //fanout_exchange自定义的交换器
        }
        System.out.println("消息发送成功!");
    }

观察RabbitMq的后台(其中Ready的消息为100,表示队列中没有被消费的数据。)

 7、编写监听类

@Service
public class MessageService {
    int countOfEmailMsg=0;
    int countOfSmsMsg=0;

    @RabbitListener(queues = "queue_sms")
public void readSmsQueue(Message message){
        byte[] body=message.getBody();
        String s=new String(body);//user
        countOfSmsMsg++;
        System.out.println(countOfEmailMsg+"短信业务接收到消息:"+s);
    }
    @RabbitListener(queues = "queue_email")
public void readEmailQueue(Message message){
        byte[] body=message.getBody();
        String s=new String(body);
        countOfEmailMsg++;
        System.out.println(countOfEmailMsg+"邮件业务接收到消息:"+s);
    }
}

启动工程。观察控制台输出

posted @ 2020-09-11 22:17  codeing123  阅读(554)  评论(0)    收藏  举报