rabbitmq 连接、通道及线程池说明和配置

<bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
    <property name="host" value="${rabbitmq.host}" />  
    <property name="port" value="${rabbitmq.port}" />  
    <property name="username" value="${rabbitmq.username}" />  
    <property name="password" value="${rabbitmq.password}" />  
    <property name="virtualHost" value="${rabbitmq.virtualHost}" />
    <!-- 缓存模式   CONNECTION CHANNEL,默认的缓存模式是CHANNEL    缓存模式 CHANNEL,connection 是单例的
    当缓存模式是 CONNECTION(Cache connections and channels within each connection), 队列的自动声明等等 (参考 the section called “Automatic Declaration of Exchanges, Queues and Bindings”) 将不再支持。
    在框架(如. RabbitTemplate) 中使用的通道将会可靠地返回到缓存中.如果在框架外创建了通道 (.直接访问connection(s)并调用 createChannel() ),
    你必须可靠地返回它们(通过关闭),也许需要在 finally 块中以防止耗尽通道.
     -->
    <property name="cacheMode" value="CONNECTION"/>

    <!-- 默认通道缓存25,多线程环境中,较小的缓存意味着通道的创建和关闭将以很高的速率运行.加大默认缓存大小可避免这种开销
     如果达到了限制,调用线程将会阻塞,直到某个通道可用或者超时, 在后者的情况中,将抛出 AmqpTimeoutException异常.-->
    <property name="channelCacheSize" value="10"/>

    <!-- channelCheckoutTimeout属性. 当此属性的值大于0时(毫秒), channelCacheSize会变成连接上创建通道数目的限制. -->
    <property name="channelCheckoutTimeout" value="200"/>

    <!-- connectionLimit 1.5.5 新增,会限制连接的总数目,当达到限制值时,将 channelCheckoutTimeLimit  来等待空闲连接.如果时间超时了,将抛出 AmqpTimeoutException -->
    <property name="connectionLimit" value="2"/>

    <!-- 默认创建了存活0个线程的线程池,存活时间为60. 当需要使用大量连接时,你应该考虑在 CachingConnectionFactory 定制一个 executor .
    然后,同一个executor会用于所有连接,其线程也是共享的. executor的线程池是没有界限的或按预期使用率来设置(通常, 一个连接至少应该有一个线程).
    如果在每个连接上创建了多个channels,那么池的大小会影响并发性,因此一个可变的线程池executor应该是最合适的. -->
    <property name="executor" value="20"/>

</bean>
阅读更多
文章标签: rabbitmq
个人分类: rabbitmq
想对作者说点什么? 我来说一句

RabbitMQ连接池实现方案及源码

2017年11月21日 262KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭