RabbitMQ学习笔记(二)交换机

一、fanout交换机

        该交换机为广播类型,收到的消息将会广播给与其绑定的所有队列,先在控制台创建名为“noop.fanout”的交换机,再绑定两个队列,分别是“fanout,queue1”和“fanout.queue2”

        测试代码如下:

        消息发送:

@Test
    void MQtest() throws InterruptedException {
        String exchangeName ="noop.fanout";
            String msg = "hello,everyone";
            rabbitTemplate.convertAndSend(exchangeName,null ,msg);
    }

        消息接收:

@RabbitListener(queues = "fanout.queue1")
    public void listenSimple1(String msg){
        System.out.println("一号收到消息:"+msg+"。");
    }

    @RabbitListener(queues = "fanout.queue2")
    public void listenSimple2(String msg){
        System.out.println("二号收到消息:"+msg+"。");
    }

        结果:

二、direct交换机

        该交换机为定向交换机,根据Key将对应的消息发送到对应的队列中,可以通过设置达到fanout交换机的效果

        (1)每一个queue应设置一个BindingKey

        (2)发布消息时设定routingkey

          (3)   交换机将会把消息路由到Bindingkey和routingkey相同的队列中

        首先在控制台进行交换机和队列的创建,在交换机与队列进行bind时添加routingkey

        代码如下:

        发送者(Key:red):

@Test
    void MQtest() throws InterruptedException {
        String exchangeName ="noop.direct";
            String msg = "该消息为red,所有队列都有该key,都应收到";
            rabbitTemplate.convertAndSend(exchangeName,"red" ,msg);
    }

        消费者:

@RabbitListener(queues = "direct.queue1")
    public void listenSimple1(String msg){
        System.out.println("一号收到消息:"+msg+"。");
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenSimple2(String msg){
        System.out.println("二号收到消息:"+msg+"。");
    }

        结果:

使用其他key(yellow,blue)同理。

三、Topic交换机

        根据某种规则发放消息的交换机,与direct交换机不同于,其routingkey可以是多个单词的列表,使用  号进行分割。(该模式是最灵活的交换机,也是最推荐使用的

        可以使用通配符:

        #:代表0或多个单词。(例如china.#  可以找到 china.的所有东西,包括china.a.b、china.a.b.c或是更多)

        *:代表一个单词。(例如china.* 只能找到china.a或是china.b而不能找到更多)

首先在控制台进行创建 (不再赘述)

绑定key如下:

代码实例如下:

发送者:

@Test
    void MQtest() throws InterruptedException {
        String exchangeName ="noop.topic";
            String msg = "新闻,只有二号能收到";
            rabbitTemplate.convertAndSend(exchangeName,"US.news" ,msg);
    }

生产者:

@RabbitListener(queues = "topic.queue1")
    public void listenSimple1(String msg){
        System.out.println("一号收到消息:"+msg+"。");
    }

    @RabbitListener(queues = "topic.queue2")
    public void listenSimple2(String msg){
        System.out.println("二号收到消息:"+msg+"。");
    }

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值