Spring AMQP匿名队列AnonymousQueue

一般来说,当您需要唯一命名、独占、自动删除的队列时,我们建议您使用 AnonymousQueue 而不是代理定义的队列名称(使用“”作为队列名称会导致代理生成队列名称)。

这是因为:

队列实际上是在建立与代理的连接时声明的。 这是在创建 Bean 并将其连接在一起之后很长一段时间。 使用队列的 Bean 需要知道其名称。 
事实上,当应用程序启动时,代理甚至可能没有运行。

2. 如果由于某种原因与代理的连接丢失,管理员会重新声明具有相同名称的 AnonymousQueue。 如果我们使用代理声明的队列,队列名称将会更改。

您可以控制 AnonymousQueue 实例使用的队列名称的格式。

默认情况下,队列名称以 spring.gen- 为前缀,后跟 UUID 的 Base64 表示形式——例如:spring.gen-MRBv9sqISkuCiPfOYfpo4g。

您可以在构造函数参数中提供 AnonymousQueue.NamingStrategy 实现。 

以下示例展示了如何执行此操作:

@Bean
public Queue anon1() {
    return new AnonymousQueue();
}

@Bean
public Queue anon2() {
    return new AnonymousQueue(new AnonymousQueue.Base64UrlNamingStrategy("something-"));
}

@Bean
public Queue anon3() {
    return new AnonymousQueue(AnonymousQueue.UUIDNamingStrategy.DEFAULT);
}
第一个 bean 生成一个以 spring.gen- 为前缀的队列名称,后跟 UUID 的 Base64 表示形式——例如:spring.gen-MRBv9sqISkuCiPfOYfpo4g。 第二个 bean 生成一个队列名称,前缀为 Something-,后跟 UUID 的 Base64 表示形式。 第三个bean仅使用UUID(无base64转换)生成名称——例如,f20c818a-006b-4416-bf91-643590fedb0e。

Base64 编码使用 RFC 4648 中的“URL 和文件名安全字母表”。删除尾随填充字符 (=)。

您可以提供自己的命名策略,从而可以在队列名称中包含其他信息(例如应用程序名称或客户端主机)。

您可以在使用 XML 配置时指定命名策略。 naming-strategy 属性出现在实现 AnonymousQueue.NamingStrategy 的 bean 引用的 <rabbit:queue> 元素上。 以下示例展示了如何以各种方式指定命名策略:

<rabbit:queue id="uuidAnon" />

<rabbit:queue id="springAnon" naming-strategy="uuidNamer" />

<rabbit:queue id="customAnon" naming-strategy="customNamer" />

<bean id="uuidNamer" class="org.springframework.amqp.core.AnonymousQueue.UUIDNamingStrategy" />

<bean id="customNamer" class="org.springframework.amqp.core.AnonymousQueue.Base64UrlNamingStrategy">
    <constructor-arg value="custom.gen-" />
</bean>
第一个示例创建诸如 spring.gen-MRBv9sqISkuCiPfOYfpo4g 之类的名称。 第二个示例使用 UUID 的字符串表示形式创建名称。 

第三个示例创建诸如 custom.gen-MRBv9sqISkuCiPfOYfpo4g 之类的名称。

您还可以提供自己的命名策略 bean。

从版本 2.1 开始,声明匿名队列时,参数 Queue.X_QUEUE_LEADER_LOCATOR 默认设置为客户端本地。 这可确保在应用程序连接的节点上声明队列。 

您可以在构造实例后调用queue.setLeaderLocator(null) 来恢复到之前的行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值