欢迎来到天天文库
浏览记录
ID:6753811
大小:41.12 KB
页数:7页
时间:2018-01-24
《activemq高并发处理方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、高并发发送消息异常解决方法:现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停止: javax.jms.JMSException:CouldnotconnecttobrokerURL:tcp://localhost:61616.Reason:java.net.BindException:Addressalreadyinuse:connect;nestedexceptionisjava.net.BindException:Addressalreadyinuse:connect原因:创建了太多j
2、ms连接没有来得及回收解决方法:使用jms连接池原来的配置:org.apache.activemq.jndi.ActiveMQInitialContextFactorytcp://huzq-linux:616163、n>ConnectionFactory修改为:4、operty>解决activemq多消费者并发处理遇到一个现象,如果activemq队列积压了数据的话,如果在spring中启动listner,只有一个consumer执行,查阅了很多资料,无果,后来偶尔通过activemq的监控网页看到消费者列表中,只有一个消费者有等待处理的数据,其他都没有,如下图:由此得知,activemq有一定机制将队列中的数据交给consumer处理,这个机制就是数据的数量分配,查资料得知,默认是1000,因此,把这个值调小就可以了。在客户端的连接url中,修改为tcp://ipaddr5、:61616?jms.prefetchPolicy.all=2这样基本消费者就分配公平了,不会出现一个消费者忙死,另外的消费者闲死了。为高并发程序部署ActiveMQ使用ActiveMQ来扩展你的应用程序需要一些时间并要花一些精力.本节中我们将介绍三种技术用于扩展应用程序.我们将从垂直扩展开始,这种扩展方式中,单个代理需要处理成千上万的连接和消息队列.接下来我们将介绍水平扩展,这种扩展方式需要处理比前一种方式更多的网络连接.最后,我们介绍的传输负载分流,可以在扩展和性能间得到平衡,但是会增加ActiveMQ程序的复杂性.1.垂6、直扩展:垂直扩展是一种用于增加单个ActiveMQ代理连接数(因而也增加了负载能力)的技术.默认情况下,ActiveMQ的被设计成尽可高效的传输消息以确保低延迟和良好的性能.但是,你也可以进行一些配置使的ActiveMQ代理可以同时处理大量并发的连接以及大量的消息队列.默认情况下,ActiveMQ使用阻塞IO来处理传输连接,这种方式为每一个连接分配一个线程.你可以为ActiveMQ代理使用非阻塞IO(同时客户端可以使用默认的传输)以减少线程的使用.可以在ActiveMQ的配置文件中通过传输连接器配置非阻塞IO.下面的是配置非阻7、塞IO的示例代码:配置NIO传输连接器除了为每个连接使用一个线程的阻塞IO,ActiveMQ还可以为每一个客户端连接使用一个消息分发线程.你可以通过将系统参数org.apache.activemq.UseDedicatedTaskRunner设置为false来设置ActiveMQ使用一个搞线程8、池.下面是一个示例:ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false"确保ActiveMQ代理用于足够的内存来处理大量的并发连接,需要分两步进行:首先,你需要确保运行ActiveMQ的JVM在启
3、n>ConnectionFactory修改为:4、operty>解决activemq多消费者并发处理遇到一个现象,如果activemq队列积压了数据的话,如果在spring中启动listner,只有一个consumer执行,查阅了很多资料,无果,后来偶尔通过activemq的监控网页看到消费者列表中,只有一个消费者有等待处理的数据,其他都没有,如下图:由此得知,activemq有一定机制将队列中的数据交给consumer处理,这个机制就是数据的数量分配,查资料得知,默认是1000,因此,把这个值调小就可以了。在客户端的连接url中,修改为tcp://ipaddr
4、operty>
5、:61616?jms.prefetchPolicy.all=2这样基本消费者就分配公平了,不会出现一个消费者忙死,另外的消费者闲死了。为高并发程序部署ActiveMQ使用ActiveMQ来扩展你的应用程序需要一些时间并要花一些精力.本节中我们将介绍三种技术用于扩展应用程序.我们将从垂直扩展开始,这种扩展方式中,单个代理需要处理成千上万的连接和消息队列.接下来我们将介绍水平扩展,这种扩展方式需要处理比前一种方式更多的网络连接.最后,我们介绍的传输负载分流,可以在扩展和性能间得到平衡,但是会增加ActiveMQ程序的复杂性.1.垂
6、直扩展:垂直扩展是一种用于增加单个ActiveMQ代理连接数(因而也增加了负载能力)的技术.默认情况下,ActiveMQ的被设计成尽可高效的传输消息以确保低延迟和良好的性能.但是,你也可以进行一些配置使的ActiveMQ代理可以同时处理大量并发的连接以及大量的消息队列.默认情况下,ActiveMQ使用阻塞IO来处理传输连接,这种方式为每一个连接分配一个线程.你可以为ActiveMQ代理使用非阻塞IO(同时客户端可以使用默认的传输)以减少线程的使用.可以在ActiveMQ的配置文件中通过传输连接器配置非阻塞IO.下面的是配置非阻
7、塞IO的示例代码:配置NIO传输连接器除了为每个连接使用一个线程的阻塞IO,ActiveMQ还可以为每一个客户端连接使用一个消息分发线程.你可以通过将系统参数org.apache.activemq.UseDedicatedTaskRunner设置为false来设置ActiveMQ使用一个搞线程
8、池.下面是一个示例:ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false"确保ActiveMQ代理用于足够的内存来处理大量的并发连接,需要分两步进行:首先,你需要确保运行ActiveMQ的JVM在启
此文档下载收益归作者所有