在不使用ejb的情况下,怎么在jboss中简单地实现异步消息的发送和接收呢?
我们可以通过spring对jms的封装来实现。
首先,在jboss配置好你的ConnectionFactory, Queue
jms-ds.xml
<connection-factories>
<tx-connection-factory>
<jndi-name>TestConnectionFactory</jndi-name>
<use-java-context>false</use-java-context>
<xa-transaction/>
<rar-name>jms-ra.rar</rar-name>
<connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
<config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Queue</config-property>
<config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>
<max-pool-size>20</max-pool-size>
<security-domain-and-application>JmsXARealm</security-domain-and-application>
</tx-connection-factory>
</connection-factories>
jms-destination.xml
<mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=TestQueue">
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
以上配置好后,就可以对此队列进行异步的消息接收、发送了。
利用spring进行消息的异步接收
在spring配置配置如下bean
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory">
<bean class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>TestConnectionFactory</value>
</property>
</bean>
</property>
<property name="destination">
<bean class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>queue/TestQueue</value>
</property>
</bean>
</property>
<property name="messageListener">
<bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<property name="delegate">
<bean class="com.test.message.ObjectMessageListener"/>
</property>
</bean>
</property>
</bean>
ObjectMessageListener的实现
public class ObjectMessageListener {
public void handleMessage(Object obj) {
//消费obj
}
}
至此,就可以实现消息的异步消费。
几个疑问:
1、大家可能对ObjectMessageListener 这个Listener的写法有的奇怪,一般情况下的Listener都需要继承jms里的MessageListener,而这里却没有,为什么呢?
这个要归功于spring的MessageListenerAdapter,它实现了我们的业务代码与jms的解耦,有兴趣的可以继续看看它的源码。
2、MessageListenerContainer有3个实现(SimpleMessageListenerContainer, DefaultMessageListenerContainer, ServerSessionMessageListenerContainer),这里为什么使用DefaultMessageListenerContainer,而不是SimpleMessageListenerContainer(spring guide里推荐使用它)
因为SimpleMessageListenerContainer里,有调用connection.setExceptionListener,jboss提供的jms实现不支持。
3、DefaultMessageListenerContainer提供了多线程并发消费的功能,但默认的concurrentConsumers=1,能否把它设置的大点呢?
在jboss中,一个connection只能生成一个session, 因此,这能把concurrentConsumers设置成1.
利用spring进行消息的异步发送
这个有很多文章介绍了,这里就不多述了。
分享到:
- 2009-09-16 09:45
- 浏览 1577
- 评论(0)
- 论坛回复 / 浏览 (0 / 2151)
- 查看更多
相关推荐
JMS允许应用程序创建、发送、接收和读取消息,极大地提高了系统的可伸缩性和可靠性。下面我们将深入探讨如何在JBoss中构建JMS应用,并通过实例来了解其工作原理。 1. **JMS基础** - **消息模型**:JMS提供了两种...
- **会话(Sessions)**:线程安全的上下文,用于创建生产者、消费者和消息。 - **消息(Messages)**:包含要传递的数据,支持多种消息类型,如文本消息、二进制消息和对象消息。 3. **配置与使用** - **配置...
在JMS API中,我们可以使用MessageProducer来创建和发送消息。 广播模式,又称为发布/订阅模式,涉及多个消费者接收同一条消息。在JBoss中,这可以通过使用主题(Topic)而非队列来实现。与队列不同,主题中的消息...
5. **JMS API**:主要包括ConnectionFactory、Destination、MessageProducer、MessageConsumer等接口,通过这些接口,开发者可以创建连接、定义目的地、发送和接收消息。 6. **事务管理**:JMS可以与EJB事务管理...
一、Jboss ESB的简介 1、 什么是ESB。 ESB的全称是Enterprise ...③事件驱动的架构 - 应用之间异步地产生和接收消息。 用一句比较通俗的话来描述ESB:ESB就是在SOA架构中实现服务间智能化集成与管理的中介。
在 JBoss 7 中配置 JMS(Java Message Service)是实现企业级分布式通信和异步处理的关键步骤。JMS 是一个标准,定义了应用程序如何通过消息传递系统进行通信。 1. **JMS 概述** - JMS 提供了一种基于消息的中间件...
1. 概念理解:JMS是Java平台中用于企业级消息传递的API,它定义了生产、发送、接收和消费消息的标准接口。 2. 消息模型:JMS支持两种消息模型——点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。前者...
在JBoss环境下,这些组件可以通过Spring配置文件集成到服务器中,实现消息的自动发送和接收。 配置文件中,开发者需要定义JMS连接工厂、目的地(队列或主题)以及JMSTemplate的bean。此外,还可以利用Spring的事务...
7. **测试和调试**:运行服务器和客户端,验证消息是否能正确发送和接收。如果遇到问题,可以检查配置、日志文件和代码逻辑。 这个示例DEMO将帮助开发者理解如何在实际项目中利用JMS和HornetQ在JBoss AS 7.1环境下...
4. **EJB容器**:JBoss 4.0支持EJB 2.x规范,包括会话bean、实体bean和消息驱动bean。文档会解释这些组件的工作原理以及如何在JBoss中创建和部署。 5. **Web服务**:JBoss 4.0支持SOAP和RESTful Web服务,提供WS-I ...
在上述代码中,`JmsTemplate` 用于发送消息,`DefaultMessageListenerContainer` 和 `MessageListener` 用于异步接收消息。这种方式使得开发者可以快速构建基于 JMS 的应用程序,而无需关注底层 JMS 实现的复杂性。 ...
本章主要集中在使用JMS和消息驱动bean的JBoss特定方面,以及JBoss Messaging的配置和MBeans。JMS将访问连接工厂和目的地的细节视为提供商特定的细节。在使用JBoss Messaging层时,需要知道以下几点: 1. 连接工厂的...
5. **JMS支持**:JBoss 4.2.3集成JMS,允许应用程序进行异步通信和消息传递。这在分布式系统中非常有用,因为消息队列可以确保消息的可靠传输,即使发送方和接收方在不同时间在线。 6. **安全特性**:JBoss 4.2.3...
- **客户端和服务器端消息发送与接收**:介绍了如何在客户端使用Client Bus发送消息,以及如何在服务器端使用Server Bus和Server Services接收消息。 - **单响应对话和伪同步消息**:解释了如何处理一次性的消息交换...
消息驱动bean是处理JMS(Java Message Service)消息的特殊类型的EJB,它们作为后台服务运行,接收并处理消息队列中的消息,从而解耦了发送者和接收者。这种模式在异步处理和系统间通信中非常有用,因为它允许系统在...
JMS主要由两部分组成:消息生产者(发送消息)和消息消费者(接收消息)。消息可以是持久的,这意味着即使生产者和消费者不同时在线,消息也会被存储直到被消费。另外,JMS支持同步和异步消息传递,以及事务性消息...
- 示例配置可能包括 `<message-driven>` 元素,指定JMS目标和消息类型。 6. **jboss.xml**: - 针对JBOSS服务器的特定部署配置,如JNDI绑定、JMS资源引用等。 7. **部署与测试**: - 将ejb-jar包和相应的部署...
6. **测试与优化**:完成基本配置后,进行测试以确保消息能够正确地发送和接收。根据需求,可能还需要进行性能优化,例如调整线程池大小、设置消息存活时间(TTL)等。 整合IBM MQ、JBoss和Spring可以带来很多优势,...