现象,使用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 ja
va.net.BindException: Address already in use: connect
原因:创建了太多jms连接没有来得及回收
解决方法:使用jms连接池
原来的配置:
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
org.apache.activemq.jndi.ActiveMQInitialContextFactory
</prop>
<prop key="java.naming.provider.url">
tcp://huzq-linux:61616
</prop>
</props>
</property>
</bean>
<bean id="jndiConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>ConnectionFactory</value>
</property>
<property name="jndiTemplate">
<ref local="jndiTemplate"></ref>
</property>
</bean>
修改为:
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://huzq-linux:61616" />
</bean>
</property>
</bean>
分享到:
相关推荐
#### 二、高并发发送消息异常及其解决 ##### 现象描述 当使用多个线程(如10个)以一定频率(比如每100毫秒)发送消息时,可能会出现发送一定数量的消息后(约3000条),所有线程停止,并抛出异常 `javax.jms....
.NET 封装的ActiveMQ消息队列是一种在.NET环境中对...如果你需要处理大量并发的请求或者需要跨进程、跨网络通信,使用ActiveMQ作为消息队列是一个很好的选择,因为它提供了高可用性、可扩展性和消息持久化等功能。
通过调用`convertAndSend()`或`send()`方法,我们可以将对象转换为消息并发送到队列或主题。例如: ```java @Autowired private JmsTemplate jmsTemplate; public void sendMessage(String message) { ...
这些示例代码通常会展示如何创建生产者发送消息、创建消费者接收消息、设置消息属性、使用事务、处理异常等常见操作。通过学习和运行这些示例,开发者可以快速理解和掌握ActiveMQ的基本用法和高级特性。 在实际环境...
- **Journal**: 采用日志文件的方式进行消息的持久化,适合于高并发场景。 - **JDBC**: 可以将消息存储在关系型数据库中,便于查询和管理。 **4.2 ActiveMQ集群的几种模式及其区别是什么?** - **Master-Slave**: ...
6. **性能优化**:由于ActiveMQ支持高性能的并发处理,开发包可能会提供一些性能优化的选项,例如批量发送消息、预读策略等,以提高整体系统性能。 7. **示例与文档**:压缩包中的"demo"目录很可能包含了一些示例...
- **生产者(Producer)**:生产者是创建和发送消息的组件,它负责将应用程序的数据封装成消息并发送到消息队列。 - **消费者(Consumer)**:消费者是接收和处理消息的组件,它可以订阅一个或多个消息主题,并在消息...
ActiveMQ是Apache软件基金会开发的一款开源、高性能、跨平台的消息代理,支持多种消息协议,如AMQP、JMS、STOMP等。Spring MVC是Spring框架的一部分,用于构建Web应用的模型-视图-控制器架构。将ActiveMQ集成到...
通过以上步骤,我们可以实现ActiveMQ与Spring的整合,利用消息队列的异步特性发送邮件,提高系统的并发处理能力和响应效率。在实际项目中,这种模式还可以应用于其他耗时的操作,如批量数据处理、日志记录等。
当消费者处理消息时发生异常,ActiveMQ可以重试消息或者将消息放入死信队列。Spring提供异常处理器来处理这些情况,如定义`ErrorHandler`。 9. **连接池**: 为了提高性能,通常会使用连接池来管理与ActiveMQ的...
ActiveMQ-CPP库的设计考虑了性能和效率,但实际应用中可能需要根据具体需求进行优化,例如调整并发级别、使用连接池或优化消息处理流程。 7. **错误处理与调试** 库中提供了丰富的异常处理机制,通过捕获和处理`...
在IT行业中,消息队列(Message Queue)是分布式系统中常用的一种组件,它能够缓解高并发场景下的系统压力,提高应用的响应速度和系统稳定性。ActiveMQ是Apache组织开发的一款开源的消息中间件,支持多种消息协议,...
在高并发环境下,连接池可以显著提高系统的响应速度和并发能力。在ActiveMQ中,我们可以使用PooledConnectionFactory来实现连接池。 以下是一个简化的ActiveMQ连接池工具类实现思路: 1. **初始化配置**:在工具类...
- **配置消息生产者**:创建生产者类,利用JMS API发送消息到ActiveMQ服务器。 - **配置消息消费者**:创建消费者类,订阅特定的队列或主题,接收并处理来自ActiveMQ的消息。 - **配置连接工厂和URL**:在jfianl...
通过这些改进,可以显著提升ActiveMQ在实际应用中的表现,使其在处理高并发、大数据量消息传输时更加稳定和高效。同时,优化后的代码也有助于降低维护成本,提高开发者的生产力。在实际项目中,对ActiveMQ的代码进行...
标题中的“NETTY+ACTIVITYMQ实现高用户并发”表明我们正在探讨如何使用Netty和ActiveMQ结合来处理大量并发用户请求。Netty是一个高性能、异步...通过合理的配置和优化,我们可以实现高可用、高并发的消息通信解决方案。
- **高吞吐量**:优化的消息传递性能,支持大量并发连接和消息。 - **多种协议支持**:包括AMQP、STOMP、XMPP等,便于与其他系统集成。 - **安全机制**:用户认证和授权,支持SSL/TLS加密,确保数据安全。 - **...
2. **流量控制**:在高并发场景下,消息队列可以缓冲瞬时大量请求,避免服务器过载。 3. **错误恢复**:通过消息持久化,可以保证消息在异常情况下的可靠性,方便后续重试。 4. **分布式系统**:在分布式环境中,...
通过文档"消息发送接收-使用方法.doc",你可能可以学习到如何在实际项目中选择合适的通信模型、消息队列、协议以及如何实现消息的发送、接收、确认、异常处理等细节。理解并熟练掌握这些知识点对于提升你的IT技能和...
在IT行业中,消息队列(Message Queue)是分布式系统中常用的一种技术,它能有效地解耦各个服务,提高系统的响应速度和并发处理能力。ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它支持多种消息协议,如...