现在的位置: 首页 > 综合 > 正文

Spring整合JMS

2013年04月04日 ⁄ 综合 ⁄ 共 2787字 ⁄ 字号 评论关闭

接触了一下JMS,稍作记录方便以后回来看,感觉用Spring封装的JMSTemplate在配置上有点麻烦,但在程序中调用就非常简单了。

1.首先配置JBoss,在JBosshome下找到jbossmq-destinations-service.xml,在最下面加入

<!--  Register User Send/Receive Queue  --> 
<mbean code="org.jboss.mq.server.jmx.Queue" 
  name="jboss.mq.destination:service=Queue,name=registerUserQueue"> 
 <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> 

 </mbean> 
 <!--  Register User Send/Receive Topic  --> 
<mbean code="org.jboss.mq.server.jmx.Topic" 
name="jboss.mq.destination:service=Topic,name=registerUserTopic"> 
  <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> 

</mbean>

主要是Jboss发送消息的两种模式 主题 和 队列模式 

2.在Spring配置文件中需要配置

    <!-- jndi获得 jms资源的上下文 -->
    <bean id="jndiTemplate"
        class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">
                    org.jnp.interfaces.NamingContextFactory
                </prop>
                <prop key="java.naming.provider.url">localhost</prop>
                <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
            </props>
        </property>
    </bean>

<!-- jms连接工厂 -->
    <bean id="jmsConnectionFactory"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="jndiName">
            <value>XAConnectionFactory</value>
        </property>
    </bean>
    <!-- jms模板 -->
    <bean id="jmsTemplate"
        class="org.springframework.jms.core.JmsTemplate102">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
        <property name="defaultDestination" ref="destination" />
        <property name="pubSubDomain">
            <value>true</value>
        </property>
        <!-- 等待消息的时间(ms) -->
        <property name="receiveTimeout">
            <value>30000</value>
        </property>
    </bean>
   
    <!-- 定义jms发收消息 -->
    <bean id="destination"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>

   <!-- 定义jms发收消息,这里我用主题模式来发消息 -->
        <property name="jndiName">
            <value>topic/registerUserTopic</value>
        </property>
    </bean>

    <!-- 消息发布者 -->
    <bean id="msgProducer" class="com.xugang.demo.jms.MessageProducer">
        <property name="jmsTemplate" ref="jmsTemplate" />
    </bean>
    <!-- 消息接收者 -->
    <bean id="msgConsumer" class="com.xugang.demo.jms.MessageConsumer">
        <property name="jmsTemplate" ref="jmsTemplate" />
    </bean>

3.最后写 消息发布者 和消息接收者

消息接收者直接调   jmsTemplate.receive("registerUserTopic");收消息

消息发布者调用      jmsTemplate.send(new MessageCreator(){。。。。});来发消息

其中MessageCreator实现了将JavaBean转换到MapMessage(顾名思义以Map的形式来保存Javabean,将JavaBean中的各属性和对应的Value对应起来)

程序是依赖JBoss的,在运行程序前需要启动JBoss服务,花了一下午总算做出了一个Demo,

为以后进一步的应用打个基础吧。

抱歉!评论已关闭.