ActiveMQ高并发处理的方案.docxVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高并发发送消息异常解决方法:现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停止:?javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason:.BindException: Address already in use: connect; nested exception is .BindException: Address already in use: connect原因:创建了太多jms连接没有来得及回收解决方法:使用jms连接池原来的配置:beanproperty name=environmentpropsprop key=java.naming.factory.initialorg.apache.activemq.jndi.ActiveMQInitialContextFactory/propprop key=vider.urltcp://huzq-linux:61616/prop/props/property/beanbeanproperty name=jndiNamevalueConnectionFactory/value/propertyproperty name=jndiTemplateref local=jndiTemplate/ref/property/bean修改为:beanproperty name=connectionFactorybeanproperty name=brokerURL value=tcp://huzq-linux:61616 //bean/property/bean解决activemq多消费者并发处理遇到一个现象,如果activemq队列积压了数据的话,如果在spring中启动listner,只有一个consumer执行,查阅了很多资料,无果,后来偶尔通过activemq的监控网页看到消费者列表中,只有一个消费者有等待处理的数据,其他都没有,如下图: 由此得知,activemq有一定机制将队列中的数据交给consumer处理,这个机制就是数据的数量分配,查资料得知,默认是1000,因此,把这个值调小就可以了。在客户端的连接url中,修改为tcp://ipaddr:61616?jms.prefetchPolicy.all=2这样基本消费者就分配公平了,不会出现一个消费者忙死,另外的消费者闲死了。为高并发程序部署ActiveMQ使用ActiveMQ来扩展你的应用程序需要一些时间并要花一些精力.本节中我们将介绍三种技术用于扩展应用程序.我们将从垂直扩展开始,这种扩展方式中,单个代理需要处理成千上万的连接和消息队列.接下来我们将介绍水平扩展,这种扩展方式需要处理比前一种方式更多的网络连接.最后,我们介绍的传输负载分流,可以在扩展和性能间得到平衡,但是会增加ActiveMQ程序的复杂性.垂直扩展:垂直扩展是一种用于增加单个ActiveMQ代理连接数(因而也增加了负载能力)的技术.默认情况下,ActiveMQ的被设计成尽可高效的传输消息以确保低延迟和良好的性能.但是,你也可以进行一些配置使的ActiveMQ代理可以同时处理大量并发的连接以及大量的消息队列.默认情况下,ActiveMQ使用阻塞IO来处理传输连接,这种方式为每一个连接分配一个线程.你可以为ActiveMQ代理使用非阻塞IO(同时客户端可以使用默认的传输)以减少线程的使用.可以在ActiveMQ的配置文件中通过传输连接器配置非阻塞IO.下面的是配置非阻塞IO的示例代码:配置NIO传输连接器brokertransportConnectorstransportConnector name=nio uri=nio://localhost:61616//transportConnectors/broker除了为每个连接使用一个线程的阻塞IO,ActiveMQ还可以为每一个客户端连接使用一个消息分发线程.你可以通过将系统参数org.apache.activemq.UseDedicatedTaskRunner设置为false来设置ActiveMQ使用一个搞线程池.下面是一个示例:ACTIVEMQ_OPTS=-Dorg.apache.activemq.UseDedicatedTaskRunner=false确保ActiveMQ代理用于足够的内存来处理大量的并发连接,需要分两步进行:首先,你需要确保运行ActiveMQ的JVM在启动之前已经配置了足够的内存.可以使用JVM的-Xmx选项来配置,如下所示:ACTIVEMQ_OPTS=-Xmx1024M -Dorg.apache.activemq.Use

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档