springAMQP-广播模式(fanout)

广播模式是一个交换机下的所有队列都会收到消息 没有路由键的事情了

package com.example.demo.framework.mq;


import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MqFanout {
    /** 交换机名称 */
    public static String Exchange_Name = "fanoutExchange";
    /** 队列名称  */
    public static String Queue_Name = "fanoutQueue";
    /** 批量队列名称  */
    public static String Queue_Batch_Name = "fanoutQueueBatch";

    /**
     * 声明队列
     * @return
     */
    @Bean
    Queue fanoutQueue() {
        return new Queue(Queue_Name);
    }
    @Bean
    Queue fanoutBatchQueue() {
        return new Queue(Queue_Batch_Name);
    }

    /**
     * SpringAMQP 提供了各种类型的交换机类型
     * DirectExchange  1v1队列  正在使用
     * FanoutExchange  广播模式
     * HeadersExchange  头模式 不是很了解这个模式
     * TopicExchange   模糊匹配模式
     * @return
     */
    @Bean
    FanoutExchange bindFanoutExchange(){
        /**
         * 构造一个新的Exchange,并为其指定名称,持久性标志和自动删除标志以及*参数。
         * @param name 交换的名称。
         * @param durable 如果我们声明一个持久交换(交换将在服务器重启后保留),则为true
         * @param autoDelete 如果服务器在不再使用该交换时应删除该交换,则为true
         * @param arguments 用于声明交换的参数
         */
        return new FanoutExchange(Exchange_Name,false,true,null);
    }

    /**
     * 将交换机与队列绑定
     * @return
     */
    @Bean
    Binding fanoutBindingOne(){
        return BindingBuilder.bind(fanoutQueue()).to(bindFanoutExchange());
    }
    @Bean
    Binding fanoutBindingBatch(){
        return BindingBuilder.bind(fanoutBatchQueue()).to(bindFanoutExchange());
    }
}

消息监听

package com.example.demo.modules.rabbitMQ;


import com.example.demo.framework.mq.MqDirect;
import com.sun.istack.internal.logging.Logger;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class MQListener {

    private Logger log = Logger.getLogger(MQListener.class);

    /**
     * 消息一条一条打印
     * @param msg
     */
    @RabbitListener(queues = "fanoutQueue")
    public void fanout(String msg){
        log.info("fanoutQueue监听到的消息----->"+msg);
    }

    @RabbitListener(queues = "fanoutQueueBatch",containerFactory = "batchQueueRabbitListenerContainerFactory")
    public void fanoutBatch(List<Message> messages){
        log.info("fanoutQueueBatch监听到的数量----->"+messages.size());
        log.info("fanoutQueueBatch监听到的消息----->"+messages.get(0).toString());
    }
}

消息发送

package com.example.demo;

import com.example.demo.framework.mq.MqDirect;
import com.example.demo.framework.mq.MqFanout;
import com.example.demo.framework.mq.MqTopic;
import com.rabbitmq.client.Channel;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.BatchingRabbitTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;

@SpringBootTest
class RabbmitMqApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private ConnectionFactory connectionFactory;

    @Autowired
    private BatchingRabbitTemplate batchingRabbitTemplate;

  
    //fanout模式下不需要路由键 参数为null就行
    @Test
    void fanout(){
        rabbitTemplate.convertAndSend(MqFanout.Exchange_Name,null,"fanout消息");
    }


查看打印结果
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值