【rabbitMQ】声明队列和交换机

上一篇:springboot整合rabbitMQ模拟简单收发消息

https://blog.csdn.net/m0_67930426/article/details/134904766?spm=1001.2014.3001.5501

相关配置环境参考上篇

springAMQP提供了几个类用来声明声明队列,交换机及其绑定关系

声明队列,交换机及其绑定都在消费者一端完成

目录

基于Bean声明

Fanout

声明交换机

声明队列

交换机绑定队列

Direct

声明交换机

声明队列

交换机绑定队列

基于注解声明


基于Bean声明

Fanout

声明交换机

java 复制代码
package com.example.consumer.config;

import org.springframework.amqp.core.FanoutExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FanoutConfig {

    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("a.fanout");

    }
    
}

另一种写法

java 复制代码
    @Bean
    public FanoutExchange fanoutExchange(){
    return   ExchangeBuilder.fanoutExchange("a.fanout").build();
    }

声明队列

java 复制代码
@Bean
    public Queue queue1(){
        return new Queue("aaa.queue");
    }

另一种写法

java 复制代码
    @Bean
    public Queue queue1(){
        return QueueBuilder.durable("aaa.queue").build();
    }

交换机绑定队列

java 复制代码
    @Bean
    public Binding binding1(FanoutExchange fanoutExchange, Queue queue11){
        return BindingBuilder.bind(queue1).to(fanoutExchange);
    }

绑定多个对列

代码:

java 复制代码
package com.example.consumer.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FanoutConfig {

    @Bean
    public FanoutExchange fanoutExchange(){
    return   ExchangeBuilder.fanoutExchange("a.fanout").build();
    }

    @Bean(name="queue1")
    public Queue queue1(){
        return QueueBuilder.durable("aaa.queue").build();
    }

    @Bean
    public Binding binding1(FanoutExchange fanoutExchange, Queue queue1){
        return BindingBuilder.bind(queue1).to(fanoutExchange);
    }

    @Bean
    public Queue queue2(){
        return QueueBuilder.durable("bbb.queue").build();
    }

    @Bean
    public Binding binding2(FanoutExchange fanoutExchange, Queue queue2){
        return BindingBuilder.bind(queue2).to(fanoutExchange);
    }
}

Direct

声明交换机

java 复制代码
package com.example.consumer.config;

import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectConfig {

    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("b.direct");
    }

声明队列

java 复制代码
 @Bean
    public Queue queue3(){
        return new Queue("ccc.queue");
    }

交换机绑定队列

java 复制代码
    @Bean
    public Binding binding3(DirectExchange directExchange, Queue queue3){
        return BindingBuilder.bind(queue3).to(directExchange).with("red");
    }

以上内容创建了一个a.fanout交换机,创建了一个b.direct交换机

创建了aaa.queue队列,bbb.queue队列,ccc.queue队列

a.fanout绑定了aaa.queue,bbb.queue两个队列,b.direct绑定了ccc.queue队列

并且Routing key: " red "

基于注解声明

在基于Bean声明中,如果要再绑定一个Routing key 需要重新创建一个bean,这样势必会麻烦很多

java 复制代码
 
    @RabbitListener(bindings = @QueueBinding(
            value =@Queue(name="eee.queue" ,durable = "true"),
            exchange =@Exchange(name="eee.direct",type= ExchangeTypes.DIRECT ),
            key = {"red","blue"}
    ))
    public void ccc(String msg){
        System.out.println("消费者收到了eee.queue的消息:【"+msg+"】");
    }
相关推荐
茶杯梦轩1 天前
从零起步学习RabbitMQ || 第三章:RabbitMQ的生产者、Broker、消费者如何保证消息不丢失(可靠性)详解
分布式·后端·面试
回家路上绕了弯3 天前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户8307196840823 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840825 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者6 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者8 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧9 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖9 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农9 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者9 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端