消息队列-RabbitMQ的交换机和队列配置
RabbitMQ的交换机和队列配置
打开rabbitmq的管理页面,可以手动新增Exchange 交换机和 Queue队列
1、Exchange交换机配置说明:
![](https://img2022.cnblogs.com/blog/1129695/202201/1129695-20220122095629619-2144688854.png)
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 信道都可以访问。
其他连接无法再申明相同名称的队列。
使用场景:系统内部的跨进程调用。生产者和消费者在同一系统内的连接中。
作者:海绵般汲取
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任