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

1、前言

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

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

2、exchange的fanout模式

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

fanout 例子

交换机为:zhanghanlun
其绑定的状态为:
RabbitMQ exchange(交换机)的三种模式_第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
绑定的状态如下:
RabbitMQ exchange(交换机)的三种模式_第2张图片

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

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

4、exchange的topic模式

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

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

topic 例子

交换机为:zhanghanlun
绑定的状态如下:
RabbitMQ exchange(交换机)的三种模式_第3张图片

生产者代码

@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,将消息发送到绑定到交换机的指定队列中

你可能感兴趣的:(中间件,Java)