欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

全面解析RabbitMQ交换机的工作机制及其实际运用" - 2. 实际案例中的RabbitMQ交换机应用

最编程 2024-01-27 18:58:42
...

2.1直连交换机实践

创建好队列与交换机,并且绑定

 @Bean
    public Queue queue1(){
        return new Queue("queue1");
    }
    @Bean
    public Queue queue2(){
        return new Queue("queue2");
    }
    @Bean
    public DirectExchange drectexchange(){
        return new DirectExchange("drectexchange");
    }
    @Bean
    public Binding bingding1(){
        return BindingBuilder.bind(queue1()).to(drectexchange()).with("a");
    }
    @Bean
    public Binding bingding2(){
        return BindingBuilder.bind(queue2()).to(drectexchange()).with("b");
    }

生产者方法

 @RequestMapping("/send3")
    public String send3(){
        //向消息队列发送消息
        amqpTemplate.convertAndSend("drectexchange","a","hello");
        return "哈哈;";
    }

消费者监听

package com.example.consumer;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "queue1")
public class ReceiverQ1 {
@RabbitHandler
public void process(String msg) {
log.warn("Q1接收到:" + msg);
}
}
package com.example.consumer;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "queue2")
public class ReceiverQ2 {
@RabbitHandler
public void process(String msg) {
log.warn("Q2接收到:" + msg);
}
}

运行一遍send3方法
在这里插入图片描述

2.2 主题交换机实践

前提准备,打开RabbitMQ服务,参考 构建高可用消息队列系统 01

进入实战

创建好队列与交换机,并且绑定

  @Bean
    public TopicExchange topicExchange(){
        return new TopicExchange("topicExchange");
    }
    @Bean
    public Binding bingding3(){
        return BindingBuilder.bind(queue1()).to(topicExchange()).with("*.*.a");
    }
    @Bean
    public Binding bingding4(){
        return BindingBuilder.bind(queue2()).to(topicExchange()).with("*.*.b");
    }
    @Bean
    public Binding bingding5(){
        return BindingBuilder.bind(queue1()).to(topicExchange()).with("mq.#");
    }
    @Bean
    public Binding bingding6(){
        return BindingBuilder.bind(queue2()).to(topicExchange()).with("mq.#");
    }

生产者方法

@RequestMapping("/send4")
    public String send4(String rex){
        //向消息队列发送消息
        amqpTemplate.convertAndSend("topicExchange",rex,"hello");
        return "哈哈;";
    }

消费者监听在直连交换机上有
测试1
在这里插入图片描述
在这里插入图片描述
测试2
在这里插入图片描述
在这里插入图片描述
测试3
mq打头
在这里插入图片描述
在这里插入图片描述

2.3 扇形交换机实践

创建好队列与交换机,并且绑定

  @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("fanoutExchange");
    }
    @Bean
    public Binding bingding7(){
        return BindingBuilder.bind(queue1()).to(fanoutExchange());
    }
    @Bean
    public Binding bingding8(){
        return BindingBuilder.bind(queue2()).to(fanoutExchange());
    }

生产者方法
生产者调用convertAndSend时第二个参数必须要有,可以给null值,否则报错

 @RequestMapping("/send5")
    public String send5(){
        //向消息队列发送消息
        amqpTemplate.convertAndSend("fanoutExchange","","hello");
        return "哈哈;";
    }

消费者监听在直连交换机上有
测试
在这里插入图片描述

在这里插入图片描述