Spring AMQP Connection and Resource Management 关于CachingConnectionFactory的CacheMode配置

CacheMode

cache size

cacheSize指的是可以缓存的连接数(CacheMode.CONNECTION)或者channel数(CacheMode.CHANNEL)。注意,这个属性不限制连接的使用量,只决定连接关闭时是否缓存。1.6版本默认值从1变为25.可以通过RabbitMQ Admin UI来监视连接或者CHANNEL的创建频率,依此来选择一个合适的缓存量。

CacheMode.CONNECTION

  • 模式解释

当缓存模式设置为CacheMode.CONNECTION时,连接会被缓存起来,createConnection()的调用可能会创建一个新的连接,也可能从缓存中获取;关闭连接时,如果缓存的连接数没有达到cache size,就会将连接缓存起来。在这个模式下,由连接创建的channel也会被缓存起来。

  • 使用场景

在高可用集群下,由于连接连着不同的broker,缓存连接会变得非常有用。

  • 相关参数connectionLimit,channelCheckoutTimeLimit

当设置为CacheMode.CONNECTION,spring amqp提供了一个属性connectionLimit,这个属性要配合channelCheckoutTimeLimit使用。注意,connectionLimit不代表连接的限制数,当连接数达到connectionLimit时,spring amqp会监视存活时间超过channelCheckoutTimeLimit的连接,当连接超过这个时间时,会抛出AmqpTimeoutException因此,connectionLimit在一定意义上指的是空闲连接数。

  • 失效参数

在CacheMode.CONNECTION模式下,不支持amqp中各个角色的automatic declaration。

  • 相关属性

PropertyMeaning
 connectionName:<localPort>

ConnectionNameStrategy生成的连接名称

 openConnections

连接brokers的连接数

 channelCacheSize

当前配置的最大channel缓存数

 connectionCacheSize

当前配置的最大连接缓数

 idleConnections

当前的连接缓存数

 idleConnectionsHighWater

连接缓存数的峰值

 idleChannelsTx:<localPort>

这个链接当前支持事务的channel缓存数

 idleChannelsNotTx:<localPort>

这个链接当前不支持事务的channel缓存数

 idleChannelsTxHighWater:<localPort>

这个链接当前支持事务的channel缓存数的峰值

 idleChannelsNotTxHighWater:<localPort>
这个链接不当前支持事务的channel缓存数的峰值
  • 延申

默认情况下,amqp-client会创建一个固定大小的连接池(默认size:Runtime.getRuntime().availableProcessors() * 2)。如果需要使用大量的连接,可以在CachingConnectionFactory中设置一个executor 。

CacheMode.CHANNEL

  • 模式解释

CacheMode.CHANNEL模式下,所有的客户端共享一个链接,不同的channel之间相互隔离。

  • 相关参数

当channelCheckoutTimeout大于0时,channelCacheSize代表一个连接可以创建的最大channel数,当达到channelCacheSize时,新的chanel申请会被阻塞,如果阻塞超时会抛出AmqpTimeoutException。

  • 相关属性
PropertyMeaning
 connectionName

ConnectionNameStrategy生成的连接名称

 channelCacheSize

当前配置的最大空闲/缓存channel数

 localPort

所属连接的本地端口,可以用来在RabbitMQ Admin UI中关联连接。

 idleChannelsTx

当前缓存的支持事务的channel的数量。

 idleChannelsNotTx
当前缓存的不支持事务的channel的数量。
 idleChannelsTxHighWater
缓存的支持事务的channel数量的峰值。
 idleChannelsNotTxHighWater
缓存的不支持事务的channel数量的峰值。
  • 注意

当在框架中使用RabbitTemplate时,Channels可以得到有效的管理。如果通过createChannel直接创建channel,需要通过手动关闭channel(调用closing)。

官方配置的几个例子

<bean id="connectionFactory"
      class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
    <constructor-arg value="somehost"/>
    <property name="username" value="guest"/>
    <property name="password" value="guest"/>
</bean>

<!-- CacheMode.CONNECTION -->
<rabbit:connection-factory
    id="connectionFactory" cache-mode="CONNECTION" connection-cache-size="25"/>

<!-- provide host and port attributes by using the namespace-->
<rabbit:connection-factory
    id="connectionFactory" host="somehost" port="5672"/>

<!-- clustered environment -->
<rabbit:connection-factory
    id="connectionFactory" addresses="host1:5672,host2:5672" shuffle-addresses="true"/>


<!-- 自定义线程工厂-->
<rabbit:connection-factory id="multiHost" virtual-host="/bar" addresses="host1:1234,host2,host3:4567"
    thread-factory="tf"
    channel-cache-size="10" username="user" password="password" />

<bean id="tf" class="org.springframework.scheduling.concurrent.CustomizableThreadFactory">
    <constructor-arg value="rabbitmq-" />
</bean>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值