高并发发送消息异常解决方法: 现象:使用10 个线程每100ms 发送一条消息,大约 3000 多条后,出现异常,所有线程停 止: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason:java.net.BindException: Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect 原因:创建了太多 jms 连接没有来得及回收 解决方法:使用jms 连接池 原来的配置:
org.apache.activemq.jndi.ActiveMQInitialContextFactory tcp://huzq-linux:61616 ConnectionFactory 修改为:
解 决 activemq多消费者并发处理 遇到一个现象,如果activemq 队列积压了数据的话,如果在spring 中启动listner,只有一个consumer 执行,查阅了很多资料,无果,后来偶尔通过activemq 的监控网页看到消费者列表中,只有一个消费者有等待处理的数据,其他都没有,如下图: 由此得知,activemq 有一定机制将队列中的数据交给consumer 处理,这个机制就是数据的数量分配,查资料得知,默认是1000,因此,把这个值调小就可以了。 在客户端的连接 url 中,修改为 tcp://ipaddr:61616?jms.prefetchPolicy.all=2 这样基本消费者就分配公平了,不会出现一个消费者忙死,另外的消费者闲死了。 为高并发程序部署 Activ eMQ 使用 Activ eMQ 来扩展你的应用程序需要一些时间并要花一些精力.本节中我们将介绍三种技术用于扩展应用程序.我们将从垂直扩展开始,这种扩展方式中,单个代理需要处理成千上万的连接和消息队列. 接下来我们将介绍水平扩展,这种扩展方式需要处理比前一种方式更多的网络连接.最后,我们介绍的传输负载分流,可以在扩展和性能间得到平衡,但是会增加 Activ eMQ 程序的复杂性. 1. 垂直扩展: 垂直...