RabbitMQ exchange(交换机)的三种模式

1、前言

我们在rabbitMq的时候经常会用到exchange来分发我们的消息,在使用exchange的时候要了解其常见的三种模式:

  • fanout模式
  • direct模式
  • topic模式

2、exchange的fanout模式

这个模式的要点是:忽略routing key,将消息发送到绑定到交换机的所有队列中

fanout 例子

交换机为:zhanghanlun
其绑定的状态为:
绑定状态1

生产者的代码如下:

@Service
public class Producer {

    @Autowired
    private AmqpTemplate amqpTemplate;

    public void send(){
       	String context = "hello world";
        String exchange = "zhanghanlun";
        String routingKey = "zhang";
        System.out.println("Sender:"+context);
        this.amqpTemplate.convertAndSend(exchange,routingKey,context);
    }

消费者代码

1、对列"zhanghanlun"

@Component
@RabbitListener(queues = "zhanghanlun")
public class Consumer {

    @RabbitHandler
    public void process(String context) {
        System.out.println("Consumer——zhanghanlun receive message: " + context);
    }

}

2、对列“chengwenxiu”

@Component
@RabbitListener(queues = "chengwenxiu")
public class Consumer1 {

    @RabbitHandler
    public void process(String context){
        System.out.println("Consumer——chengwenxiu receive message: "+context);
    }
}

当生产者发送消息的时候,对列“zhanghanlun”和对列“zhanghanlun”都收到了消息

Sender:hello world
Consumer——zhanghanlun receive message: hello world
Consumer——chengwenxiu receive message: hello world

3、exchange的direct模式

这个模式的要点是:精确匹配routing key,将消息发送到绑定到交换机的指定队列中

direct 例子

交换机为:zhanghanlun
绑定的状态如下:
绑定状态1

生产者和消费者的代码还是不变如上,其结果为:只有对列”zhanghanlun“能收到消息

Sender:hello world
Consumer——zhanghanlun receive message: hello world

4、exchange的topic模式

这个模式的要点是:模糊匹配routing key,将消息发送到绑定到交换机的指定队列中

  • *(星号) 用来表示一个单词.
  • #(井号) 用来表示任意数量(零个或多个)单词。

topic 例子

交换机为:zhanghanlun
绑定的状态如下:
topic绑定

生产者代码

@Service
public class Producer {

    @Autowired
    private AmqpTemplate amqpTemplate;

    public void send(){
        String context = "hello world";
        String exchange = "zhanghanlun";
        String routingKey = "zhang.hhh";
        System.out.println("Sender:"+context);
        this.amqpTemplate.convertAndSend(exchange,routingKey,context);
    }
}

结果:只有对列”zhanghanlun“收到消息

Sender:hello world
Consumer——zhanghanlun receive message: hello world

5、总结

exchange的模式总结一下如下:

  1. fanout模式:忽略routing key,将消息发送到绑定到交换机的所有队列中
  2. direct模式:精确匹配routing key,将消息发送到绑定到交换机的指定队列中
  3. topic模式:模糊匹配routing key,将消息发送到绑定到交换机的指定队列中
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值