`
lixjluck
  • 浏览: 106046 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JBoss中异步消息的发送和接收

阅读更多

 在不使用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进行消息的异步发送

  

 这个有很多文章介绍了,这里就不多述了。

分享到:
评论

相关推荐

    JBOSS建立JMS应用实例(附源码)

    JMS允许应用程序创建、发送、接收和读取消息,极大地提高了系统的可伸缩性和可靠性。下面我们将深入探讨如何在JBoss中构建JMS应用,并通过实例来了解其工作原理。 1. **JMS基础** - **消息模型**:JMS提供了两种...

    jboss-jms包

    - **会话(Sessions)**:线程安全的上下文,用于创建生产者、消费者和消息。 - **消息(Messages)**:包含要传递的数据,支持多种消息类型,如文本消息、二进制消息和对象消息。 3. **配置与使用** - **配置...

    jboss 6.0 上开发 MDB

    在JMS API中,我们可以使用MessageProducer来创建和发送消息。 广播模式,又称为发布/订阅模式,涉及多个消费者接收同一条消息。在JBoss中,这可以通过使用主题(Topic)而非队列来实现。与队列不同,主题中的消息...

    jboss4.2.2GA中文文档

    5. **JMS API**:主要包括ConnectionFactory、Destination、MessageProducer、MessageConsumer等接口,通过这些接口,开发者可以创建连接、定义目的地、发送和接收消息。 6. **事务管理**:JMS可以与EJB事务管理...

    Jboss ESB简介及开发实例

    一、Jboss ESB的简介 1、 什么是ESB。 ESB的全称是Enterprise ...③事件驱动的架构 - 应用之间异步地产生和接收消息。 用一句比较通俗的话来描述ESB:ESB就是在SOA架构中实现服务间智能化集成与管理的中介。

    jboss 7 配置 jms

    在 JBoss 7 中配置 JMS(Java Message Service)是实现企业级分布式通信和异步处理的关键步骤。JMS 是一个标准,定义了应用程序如何通过消息传递系统进行通信。 1. **JMS 概述** - JMS 提供了一种基于消息的中间件...

    JBOSS建立JMS应用实例

    1. 概念理解:JMS是Java平台中用于企业级消息传递的API,它定义了生产、发送、接收和消费消息的标准接口。 2. 消息模型:JMS支持两种消息模型——点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。前者...

    jboss服务器下的jms实例

    在JBoss环境下,这些组件可以通过Spring配置文件集成到服务器中,实现消息的自动发送和接收。 配置文件中,开发者需要定义JMS连接工厂、目的地(队列或主题)以及JMSTemplate的bean。此外,还可以利用Spring的事务...

    (转)JBOSS7.1下开发JMS(HoernetQ)的示例DEMO

    7. **测试和调试**:运行服务器和客户端,验证消息是否能正确发送和接收。如果遇到问题,可以检查配置、日志文件和代码逻辑。 这个示例DEMO将帮助开发者理解如何在实际项目中利用JMS和HornetQ在JBoss AS 7.1环境下...

    JBoss4.0实例参考PDF格式

    4. **EJB容器**:JBoss 4.0支持EJB 2.x规范,包括会话bean、实体bean和消息驱动bean。文档会解释这些组件的工作原理以及如何在JBoss中创建和部署。 5. **Web服务**:JBoss 4.0支持SOAP和RESTful Web服务,提供WS-I ...

    使用Spring JMS轻松实现异步消息传递.pdf

    在上述代码中,`JmsTemplate` 用于发送消息,`DefaultMessageListenerContainer` 和 `MessageListener` 用于异步接收消息。这种方式使得开发者可以快速构建基于 JMS 的应用程序,而无需关注底层 JMS 实现的复杂性。 ...

    Message on Jboss

    本章主要集中在使用JMS和消息驱动bean的JBoss特定方面,以及JBoss Messaging的配置和MBeans。JMS将访问连接工厂和目的地的细节视为提供商特定的细节。在使用JBoss Messaging层时,需要知道以下几点: 1. 连接工厂的...

    jboss 4.2.3

    5. **JMS支持**:JBoss 4.2.3集成JMS,允许应用程序进行异步通信和消息传递。这在分布式系统中非常有用,因为消息队列可以确保消息的可靠传输,即使发送方和接收方在不同时间在线。 6. **安全特性**:JBoss 4.2.3...

    Jboss Errai_Reference_Guide_3.2.0.pdf

    - **客户端和服务器端消息发送与接收**:介绍了如何在客户端使用Client Bus发送消息,以及如何在服务器端使用Server Bus和Server Services接收消息。 - **单响应对话和伪同步消息**:解释了如何处理一次性的消息交换...

    Jboss下开发ejb应用之一消息驱动bean的应用

    消息驱动bean是处理JMS(Java Message Service)消息的特殊类型的EJB,它们作为后台服务运行,接收并处理消息队列中的消息,从而解耦了发送者和接收者。这种模式在异步处理和系统间通信中非常有用,因为它允许系统在...

    基于Jboss的jms编程

    JMS主要由两部分组成:消息生产者(发送消息)和消息消费者(接收消息)。消息可以是持久的,这意味着即使生产者和消费者不同时在线,消息也会被存储直到被消费。另外,JMS支持同步和异步消息传递,以及事务性消息...

    ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)

    - 示例配置可能包括 `&lt;message-driven&gt;` 元素,指定JMS目标和消息类型。 6. **jboss.xml**: - 针对JBOSS服务器的特定部署配置,如JNDI绑定、JMS资源引用等。 7. **部署与测试**: - 将ejb-jar包和相应的部署...

    IBM MQ与JBOSS整合,通过SPRING来读写消息

    6. **测试与优化**:完成基本配置后,进行测试以确保消息能够正确地发送和接收。根据需求,可能还需要进行性能优化,例如调整线程池大小、设置消息存活时间(TTL)等。 整合IBM MQ、JBoss和Spring可以带来很多优势,...

Global site tag (gtag.js) - Google Analytics