消息队列-RabbitMQ的交换机和队列配置

RabbitMQ的交换机和队列配置

打开rabbitmq的管理页面,可以手动新增Exchange 交换机和 Queue队列

1、Exchange交换机配置说明:

 

 

rabbitmq创建了指定name的交换机后,不允许对其进行改变,否则会报错。

类似报错信息请查看链接:https://www.cnblogs.com/wang-yaz/p/10980607.html

 

Virtual Host,name是常用属性

Virtual Host:

  表示 这个交换机属于哪个虚拟目录。一个虚拟目录下 exchange的名字不能重复。

  而在不同虚拟目录下可以有同名的exchange交换机。 类似于不同的文件夹概念。

Type: 交换机的类型,常见的有fanout、direct、topic、headers这四种

  具体解释请看:https://www.cnblogs.com/gne-hwz/p/10717473.html

java学习-消息队列rabbitmq的组成 

Durability: 持久化特性 (transient 临时的, durable 持久化的), 默认为持久化
Auto Delete : 是否自动删除, 默认为false
    true:当没有消费者连接时,队列会被删除,期间生产者发送到队列的消息会丢失
    false:没有消费者连接时,队列不会被删除,期间生产者发送到队列的消息不会丢失

internal:设置是否是RabbitMQ内部使用,默认false。如果设置为 true ,
  则表示是内置的交换器,客户端程序无法直接发送消息到这个交换器中,只能通过交换器路由到交换器这种方式。

Arguments :表示其他自定义参数。

alternate-exchange:
如果无法通过其他方式路由到此交换的消息,请将它们发送到此处指定的备用交换。
 (设置“替代交换”参数。)

 

  

在java代码中定义交换机方式:

DirectExchange(String name, boolean durable, boolean autoDelete, Map<String, Object> arguments)

    /**
     * 声明直连交换机的bean, 该bean名称为:testDirectExchange
     * AbstractExchange(String name, boolean durable, boolean autoDelete)
     * this(name, true, false);
     * 默认情况下,交换机是持久化,且不会自动删除
     * @return
     */
    @Bean
    public DirectExchange testDirectExchange(){
        // 直连消息队列参数,指定备用交换机,当testDirectExchange交换机不能用时,会将消息发送到testDirectExchange_alternate交换机上
        Map<String, Object> otherArguments = new HashMap<>(1);
        otherArguments.put("alternate-exchange", "testDirectExchange_alternate");
        return new DirectExchange("testDirectExchange", true, false,  otherArguments);
    }

 

上面是在SpringBoot中的交换机定义声明方式。 具体可以查看类 org.springframework.amqp.rabbit.core.RabbitAdmin

底层实现是,使用 Channel发送交换机定义请求

channel.exchangeDeclare(exchange.getName(), exchange.getType(), exchange.isDurable(),
        exchange.isAutoDelete(), exchange.isInternal(), exchange.getArguments());

 

 

队列的配置

 

 

 

name:队列名称
virtual host:虚拟目录
Durability: 持久化特性 (transient 临时的, durable 持久化的)
Auto Delete : 是否自动删除
true:当没有消费者连接时,队列会被删除,期间生产者发送到队列的消息会丢失
false:没有消费者连接时,队列不会被删除,期间生产者发送到队列的消息不会丢失
 
arguments: 其他参数
x-message-ttl
  消息的最大存活时间,单位毫秒, 当超过时间后消息会被丢弃
默认消息存活时间为永久存在 x
-expires   队列过期时间,当auto delete设置为true时,才会生效 x-max-length   队列存放最大就绪消息数量,超过限制时,从头部丢弃消息
默认最大数量限制与操作系统有关。 x
-max-length-bytes   队列存放的所有消息总大小,超过限制时,从头部丢弃消息 x-overflow 消息超出最大数量时,溢出行为: drop-head 或 reject-publish (drop-head:头部丢弃, reject-publish拒绝生产者发布消息) x-dead-letter-exchange 当队列满时,被拒绝的消息,或者消息过期时,将被重新发布到死信交换机上。 x-dead-letter-routing-key 消息被发布到死信交换机时,如果没设置这个路由键,则将使用消息的原始路由键, 比如,消息发送到 exchange=contract.exchange 路由键 routeKey = contract.info 当该队列满时,如果 x-dead-letter-exchange=contract.dead.exchange 没有指定x-dead-letter-routing-key时,会将消息发送到队列为 exchange=contract.dead.exchange routeKey = contract.info 消息的原始路由键即时,消息原本要发送到的队列绑定路由键名 x-max-priority: 队列支持的消息最大优先级数,没设置时,队列不支持消息优先级 x-queue-mode:lazy 将队列设置为惰性模式,将消息保存在磁盘上,如果没设置,将保存内存缓存上以尽快传递消息 x-queue-master-locator 将队列设置为 master 位置模式,确定队列 master 在节点集群上声明时的定位规则。

 

队列配置,除了上面的参数外,

队列还有一个配置参数: exclusive 排他队列

当exclusive = true 时,

只针对首次申明它的 connection 连接可见。并且在连接断开时自动删除。

当前 connection下的 channel 信道都可以访问。

其他连接无法再申明相同名称的队列。

使用场景:系统内部的跨进程调用。生产者和消费者在同一系统内的连接中。

posted @ 2022-01-25 17:32  海绵般汲取  阅读(2014)  评论(0编辑  收藏  举报