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

原创 2016年09月05日 11:25:12
<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>

相关文章推荐

不恰当使用线程池处理 MQ 消息引起的故障

现状 业务部门反应网站访问特别慢,负责运维监控的同事说MQ消息队列积压了,中间件的说应用服务器内存占用很高,GC 一直回收不了内存,GC 线程占了近 100% 的 CPU,其他的基本上都在等待,数据...

RabbitMQ解决大量unacked问题

RabbitMQ解决大量unacked问题 为了快速响应用户请求,我们需要消息异步处理机制,比较简单的做法是用redis的List结构,我们项目使用更专业的RabbitMQ。关于redis和Ra...

RabbitMQ能打开的最大连接数

RabbitMQ自带了显示能够接受的最大连接数,有2种比较直观的方式: 1. rabbitmqctl命令。 1 2 3 4 5 6 7 8 9 10 11 12 n...

RabbitMQ客户连接池的实现

RabbitMQ客户连接池的实现

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Java RabbitMQ 完整示例 带联接断开恢复,发布接收完整示例

Java RabbitMQ 完整示例 带联接断开恢复,发布接收完整示例 import java.io.IOException; import java.util.UUID; ...

基于Golang实现的Rabbitmq 连接池

原文出处:个人博客地址:http://www.damonyi.cc/?p=11       之前项目中需要写个Python 版本的Agent,里面用到了Rabbitmq,中间遇到了好多坑啊,最主...

RabbitMQ消息分发模式----"Work Queues"模式

2、Workqueues工作队列模式: 上篇博客我们完成了一个简单的对声明的队列进行发送和接受消息程序。下面我们将创建一个工作队列,来向多个工作者(consumer)分发耗时任务。 今天我们来看工...

rabbitmq技术的一些感悟(一)

Rabbitmq 初识rabbitmq RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看Rab...

RabbitMq的整理 exchange、route、queue关系

RabbitMq的整理 exchange、route、queue关系 发表于2年前(2013-12-20 11:23)   阅读(1303) | 评论(1) 5人收藏此文章, 我要收藏 赞1 ...
  • samxx8
  • samxx8
  • 2015年08月11日 10:59
  • 14911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:rabbitmq 连接、通道及线程池说明和配置
举报原因:
原因补充:

(最多只允许输入30个字)