背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。
对于上面提到的方法2使用一个监听器开启多线程监听,借助spring自带的DefaultMessageListenerContainer可以很方便实现这一功能。
<!-- 使用spring进行配置 监听-->
<bean id="testListenerContainer1"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="destination" ref="queue2"></property>
<property name="messageListener" ref="messageReceiver"></property>
<property name="sessionTransacted" value="false"></property>
<!-- 设置固定的线程数 -->
<property name="concurrentConsumers" value="6"></property>
<!-- 设置动态的线程数 -->
<property name="concurrency" value="2-9"></property>
<!-- 设置最大的线程数 -->
<property name="maxConcurrentConsumers" value="15"></property>
</bean>
监听器打印输出当前线程:
public void onMessage(Message message) {
System.out.println("在onMessage中线程ID是"+Thread.currentThread());
分享到:
相关推荐
IBM的WebSphere MQ提供了一套Java Message Service (JMS) API,允许Java应用程序与MQ队列进行通信。首先,你需要在项目中引入`com.ibm.mq.allclient`和`com.ibm.mq.jmqi`的依赖库。使用JMS,你可以创建一个`...
8. **会话(Session)**:是线程安全的单线程或多线程上下文,用于创建生产者、消费者以及发送和接收消息。 9. **消息监听器(MessageListener)**:实现监听接口,可以在接收到消息时自动调用指定的方法,实现异步...
例如,一个Web服务可以使用JMS发送请求到队列,而MDB作为后台服务,监听该队列并处理请求,这样可以实现服务的解耦和负载均衡。 7. **JMS的实现**: JMS规范由多种实现提供,如Apache ActiveMQ、IBM WebSphere MQ、...
- 考虑使用超时机制避免长时间阻塞,或者采用多线程处理多个请求。 - 监控和调整MQ队列深度,防止队列积压过多消息导致性能下降。 8. **故障恢复与测试**: - 设计和实施故障恢复策略,例如消息重试机制。 - 对...
7. **会话(Session)**:会话是在一个连接上创建的单线程或者多线程上下文,用于执行发送、接收或浏览消息的操作。 8. **生产者(Producer)**:通过会话创建,负责发送消息到指定的目的地。 9. **消费者...
**JMS(Java Message Service)** 是Java平台上用于企业级应用间异步通信的一种标准接口。它为不同的消息中间件(Message Oriented Middleware, MOM)提供商提供了一个统一的API,使得开发者无需关心底层实现,就能...
Java的多线程能力使得处理并发连接变得简单,这对于网络即时通信至关重要,因为此类系统通常需要同时处理大量并发用户。 二、Java NIO(非阻塞I/O) 在构建大规模的网络通信系统时,传统的Java I/O模型可能会遇到...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准API。它提供了一种可靠的消息传递机制,使得应用程序可以在分布式环境中发送和接收消息,而无需关心消息的传输细节。...
- **Spring框架集成**:Spring提供了JMS模板和监听器容器,简化了JMS的使用。 7. **最佳实践** - **性能优化**:例如,批量发送消息、合理设置消息缓存等。 - **安全性**:配置JMS提供者的安全策略,确保只有...
Spring Boot,作为一个轻量级的Java开发框架,提供了方便快捷的方式来集成各种MQ服务,如ActiveMQ、RabbitMQ和Kafka。本教程将围绕Spring Boot如何集成这些消息队列实现发送与接收的消息处理进行详细讲解。 首先,...
ActiveMQ 是一个基于 Java JMS(Java Message Service)规范实现的消息中间件,它提供了一种在分布式系统中可靠传递消息的解决方案。ActiveMQ 支持多种通信协议,如 TCP 和 UDP,利用这些协议来确保不同应用程序间的...
2. **消息队列(Message Queue)**:在JMS中,消息被发送到消息队列,客户端不直接与服务器交互,而是通过消息代理(如Apache ActiveMQ、RabbitMQ或IBM WebSphere MQ)进行通信。消息队列确保消息的可靠传输,即使...
还可以使用网络连接池和多线程技术优化性能。 总结,Apache ActiveMQ提供了灵活的消息传递机制,支持点对点和发布/订阅模式,适用于各种分布式系统中的数据通信。通过理解并熟练掌握这两种模式的开发流程,开发者...
- 创建消息消费者:同样使用JMS API创建连接、会话,并监听指定的队列,接收和处理消息。 - 运行示例:在"activeMQHelloWorld.zip"中,启动生产者和消费者应用,观察消息的传递过程。 5. **JMS接口**: - `...
在IT行业中,消息队列(Message Queue,MQ)是一种常用于分布式系统中的组件,它能够解耦应用程序,提高系统的可扩展性和可靠性。本实例聚焦于使用C#与Apache ActiveMQ进行通信的应用。ActiveMQ是业界广泛使用的开源...
ActiveMQ是Apache软件基金会旗下的一个开源消息中间件,它实现了Java消息服务(JMS)规范,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS规范定义了一套API,用于在两个应用程序之间或者...
连接对象是多线程安全的,因此可以在不同的线程间共享。 ##### 1.3 会话 (Session) **会话** (`JMSSession`) 是生产和消费消息的一个单线程上下文。一个会话代表了与消息服务的交互,并且会话中的操作是事务性的。...
在`activeMqConsumer`模块中,启动监听线程接收消息。 3. **运行与调试** 分别运行这两个模块,查看控制台输出,确认消息是否正确发送和接收。 通过这个简单的例子,我们了解了如何在Spring中配置和使用ActiveMQ,...