`
lhx1026
  • 浏览: 308218 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

解决使用activemq时抛出的异常:javax.j ms.JMSException: Could not connect to broker URL

阅读更多

我使用的是spring jms和activemq结合,在配置文件中定义了普通的connectionFactory的bean,如下所示:

 

	<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
	<description>JMS连接工厂</description>
		<property name="brokerURL" value="tcp://192.168.20.23:61616" />
       </bean>

 定义了上面的文件之后,在使用spring jms的JmsTemplate发送jms消息时,如果发送大量消息的话,有时候会抛出如下异常:

 

org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS
 processing; nested exception is javax.jms.JMSException: Could not connect to broker 
URL: tcp://192.168.20.23:61616. Reason: java.net.BindException: Address already in use: connect
	at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
	at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
	at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
	at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534)
	at net.kentop.astoam.device.MG800DeviceService.excute(MG800DeviceService.java:423)
	at net.kentop.astoam.device.MG800DeviceService$HandlerReceiveMessage.
handlerUdpData(MG800DeviceService.java:936)
	at net.kentop.mon4mg.monitor.UDPReceiverThread.run(UDPReceiverThread.java:51)
Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://192.168.20.23:61616. 
Reason: java.net.BindException: Address already in use: connect
	at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
	at org.apache.activemq.ActiveMQConnectionFactory.
createActiveMQConnection(ActiveMQConnectionFactory.java:286)
	at org.apache.activemq.ActiveMQConnectionFactory.
createActiveMQConnection(ActiveMQConnectionFactory.java:230)
	at org.apache.activemq.ActiveMQConnectionFactory.
createConnection(ActiveMQConnectionFactory.java:178)
	at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184)
	at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:456)
	... 4 more
 

而且在运行的时候会增加很多activemq的线程,使得整个程序运行起来比较慢。通过观察,猜测主要原因是连接activemq时,没有使用池连接,导致每次发送jms消息时,用的不是同一个连接,而是创建一个新的连接,所以耗费很多系统资源,并且因为整个项目是多线程的,所以就会抛出如上面的异常。解决方法是将activemq的连接的bean定义为activemq的池连接定义,将配置文件中的connectionFactory的bean定义改为如下内容:

 

	<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
		<property name="connectionFactory">
			<bean class="org.apache.activemq.ActiveMQConnectionFactory">
				<property name="brokerURL" value="tcp://192.168.20.23:61616" />
			</bean>
		</property>
	</bean>

 

修改之后重新运行程序,再测试。果然没有占用那么多资源,而且也不会抛出上面的异常了。

 

注意:要使用activemq的池连接,必须在classpath中包含有activemq-pool.jar

1
0
分享到:
评论
2 楼 lhx1026 2011-02-10  
kimmking 写道
Reason: java.net.BindException: Address already in use: connect  


你的端口应该被占用了吧?
1 楼 kimmking 2011-01-25  
Reason: java.net.BindException: Address already in use: connect  

相关推荐

    ActiveMQ高并发处理方案

    当使用多个线程(如10个)以一定频率(比如每100毫秒)发送消息时,可能会出现发送一定数量的消息后(约3000条),所有线程停止,并抛出异常 `javax.jms.JMSException: Could not connect to broker`。进一步查看...

    ActiveMQ_Demo

    private static final String BROKEN_URL = ActiveMQConnection.DEFAULT_BROKER_URL; ConnectionFactory connectionFactory; Connection connection; Session session; ThreadLocal...

    activemq工具类

    在IT行业中,ActiveMQ是一个非常重要的消息中间件,它基于开放标准JMS(Java Message Service)规范,提供了高效、可靠的异步通信能力。SpringBoot框架则以其简洁的配置和快速的开发体验,成为了现代Java应用的首选...

    ActiveMQ整合spring的Demo.zip

    &lt;property name="brokerURL" value="tcp://localhost:61616" /&gt; &lt;bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"&gt; &lt;bean id="jmsTemplate" class="org.springframework.jms.core....

    activeMQ一个demo

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息传递协议(Open Message Broker,JMS)标准,提供高效、可靠的消息传递服务。在本文中,我们将深入探讨ActiveMQ的基本概念、工作原理以及如何...

    springboot与activemq结合以及mq延迟demo

    spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.user=admin spring.activemq.password=admin ``` 然后,我们需要创建一个消息生产者,即发送消息的类。Spring Boot通过`@Component`注解创建...

    java怎么连接并访问activemq

    Java 连接并访问 ActiveMQ 概述: ActiveMQ 是 Apache 软件基金会下的一个开源的消息队列系统,广泛应用于企业级应用程序中。在 Java 项目中,如果需要使用 ActiveMQ,需要了解如何连接并访问 ActiveMQ。本文将详细...

    ActiveMQ与spring集成实例

    这里的`brokerURL`指定了ActiveMQ服务器的地址和端口。 3. **创建Destination**:Destination是消息的接收者,可以是Queue(点对点)或Topic(发布/订阅)。在Spring配置文件中定义Queue或Topic: ```xml ...

    Spring整合ActiveMQ简单实例

    &lt;property name="brokerURL" value="tcp://localhost:61616"/&gt; &lt;bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"&gt; &lt;bean id="jmsTemplate" class="org.springframework.jms.core....

    ActiveMQ与Spring整合示例Demo

    **ActiveMQ与Spring整合详解** ActiveMQ是Apache组织开发的一款开源消息中间件,它遵循Java消息服务(JMS)规范,提供可靠的消息传递和高效的消息处理能力。在企业级应用中,ActiveMQ常用于实现应用之间的解耦,...

    Spring集成ActiveMQ配置

    Spring集成ActiveMQ配置是将Spring框架与Apache ActiveMQ消息中间件结合,以便在应用程序中实现JMS(Java消息服务)消息的发送和接收。这里我们将详细介绍这个集成过程的关键步骤和涉及的技术点。 首先,集成环境...

    Spring + ActiveMq + maven demo

    &lt;property name="brokerURL" value="tcp://localhost:61616"/&gt; &lt;bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"&gt; &lt;value&gt;myQueue &lt;bean id="jmsTemplate" class="org....

    自定义messageID

    ActiveMQ默认使用JMS Message ID,这是一个由broker生成的ID,通常格式为`ID:&lt;brokerName&gt;-&lt;sequenceNumber&gt;-&lt;timestamp&gt;`。这种ID在大多数情况下已经足够,但有时我们可能需要根据业务逻辑生成具有特定含义的...

    JMS整合Spring实例

    &lt;property name="brokerURL" value="tcp://localhost:61616" /&gt; &lt;bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"&gt; &lt;bean id="jmsTemplate" class="org.springframework.jms.core....

    一个简单的JMS客户端应用

    在JMS应用中,必须妥善处理各种可能的异常,例如`JMSException`,并考虑重新发送消息或回滚事务的情况。 总结,一个简单的JMS客户端应用涉及到连接管理、会话创建、消息生产和消费等多个环节,利用JMS提供的API...

Global site tag (gtag.js) - Google Analytics