RabbitMQ交换机

1.交换机的作用

(1)接收publisher发送消息

(2)将消息按照规则路由到与之绑定的队列

2.交换机类型

(1)Fanout(广播)

Fanout Exchange会将接受到的消息广播到每一个跟其绑定的queue,所以也叫广播模式

(2)Direct(定向)

Direct Exchange会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由

  • 每一个Queue都与Exchange设置一个BindingKey
  • 发布者发送消息时,指定消息的RoutingKey
  • Exchange将消息路由到BindingKey与消息RoutingKey一直的Queue

(3)Topic(话题)

TopicExchange与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以"."号分割,且Queue与Exchange指定BindingKey时可以使用通配符

  • " # ":代指0个或多个单词
  • " * ":代指一个单词

3.声明队列和交换机(一般在消费者中声明)

(1)定义一个配置类,使用SpringAMQP提供了几个类,用来声明队列,交换机及其绑定关系

java 复制代码
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TopicConfiguration {
    //定义一个交换机
    @Bean
    public TopicExchange topicExchange() {
        return ExchangeBuilder.topicExchange("topic_Exchange").build();
    }

    //定义一个消息队列
    @Bean
    public Queue topicQueue() {
        return QueueBuilder.durable("topic_Queue").build();
    }

    //定义绑定关系
    @Bean
    public Binding topicBinding() {
        return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.queue.test");
    }
}

(2)使用SpringAMQP提供的@RabbitListener注解来声明队列和交换机

java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class RabbitListener {
    //使用注解定义交换机,消息队列,routingKey值
    @org.springframework.amqp.rabbit.annotation.RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "topic_Queue",durable = "true"),//设置队列
            exchange = @Exchange(name = "topic_Exchange",type = ExchangeTypes.TOPIC),//设置交换机
            key = {"topic.queue.test"}//设置routingKey值,多个routingKey值以数组的形式定义
            ))
    public void pay(String message) throws InterruptedException {
        System.out.println("支付模块处理的任务:"+message);
    }
相关推荐
典典分享指南1 分钟前
一品牌多产品线的 GEO 内容矩阵:从策略到落地
java·c#·bash·symfony
用户094248568031 小时前
第3章:OpenJDK从源码到字节码——Class 文件与 javac 管线
java·jvm
azhou的代码园1 小时前
基于RFM模型的中小型企业客户管理系统
java·人工智能·spring boot·毕业设计
君顾11 小时前
酒吧点餐小程序系统开发实战:从架构设计到上线全流程指南
java·开发语言·酒吧
子非鱼a1 小时前
【WEB】[SWPU2019]Web1
java·服务器·前端
花生了什么事o2 小时前
自定义Spring Boot Starter全流程
java·spring boot·后端
torpidcat3 小时前
ruoyi-vue-pro 若依芋道 java springboot +mybatis 生日查询相关
java·vue.js·spring boot
AC赳赳老秦3 小时前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
我命由我123454 小时前
Windows 操作系统 - 启用 D 盘虚拟内存
java·运维·服务器·windows·学习·java-ee·运维开发
xcl09254 小时前
智慧场馆解决方案系统源码:从架构设计到部署实战
java·spring boot