spring JMS

下文是Spring-JMS的一些基础代码,分为三个部分:
1.配置文件:定义MQ连接池、JmsTemplate、生产者和消费者
2.消息生产者:IQueueSender接口和QueueSender实现类
3.消息消费者:QueueConsumer

主要说明:
1.发送消息由QueueSender完成,它依赖JmsTemplate
2.QueueConsumer作为消费者,它采用异步的方式消费消息。消费者可批量定义,由<jms:listener-container/>定义。另外由于是异步消费消息,所以要注意并发问题
3.配置文件: 本文中的配置文件包含生产者和消费者两部分,在生产环境中,应单独定义生产者和消费者。否则,生产端也好消费消息。

生成者接口:
public interface IQueueSender {
    public void sendMsg(final String message);
}
生产者实现类:
public class QueueSender implements IQueueSender{
    private JmsTemplate jmsTemplate;
    private String queueName;
   
    public void setJmsTemplate(JmsTemplate jmsTemplate) {
       this.jmsTemplate = jmsTemplate;
    }
   
    /* (non-Javadoc)
     * @see com.qsboss.webdemo.jms.IQueueSender#sendMsg(java.lang.String)
     */
    @Override
    public void sendMsg(String message) {
       jmsTemplate.convertAndSend(queueName, message);  // qsboss.test 消息队列名称
    }

    /**
     * @param queueName the queueName to set
     */
    public void setQueueName(String queueName) {
       this.queueName = queueName;
    }
}

消费者:
public class QueueConsumer implements MessageListener {


    /* (non-Javadoc)
     * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
     */
    @Override
    public void onMessage(javax.jms.Message message) {

       // TODO Auto-generated method stub
       if (message instanceof TextMessage) {
           final TextMessage textMsg = (TextMessage) message;
           try {
              System.out.println(this.getClass() + ":" + textMsg.getText());
           } catch (JMSException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
           }
        }
      
    }

}



配置文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://www.springframework.org/schema/jms"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans    
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.1.xsd">

   

    <!-- JMS 连接池配置 -->
    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL">
            <value>${jms.url}</value>
        </property>
    </bean>

    <!-- JMS 模版 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
       <constructor-arg ref="connectionFactory" />
    </bean>

    <!-- JMS 生产者 仅需要在生产端配置 -->
    <bean id="jmsProducer" class="com.qsboss.webdemo.jms.QueueSender">
       <property name="jmsTemplate" ref="jmsTemplate"/>
       <!-- 定义队列名称  -->
       <property name="queueName" value="${jms.destination}"/>
    </bean>
   
     <!-- JMS 消费者 仅需要在消费端配置-->
    <bean id="jmsConsumer" class="com.gnet.qsboss.billing.mq.QueueConsumer" />

    <jms:listener-container concurrency="1" >
    <jms:listener id="QueueListener" destination="${jms.destination}"
           ref="jmsConsumer" />
    </jms:listener-container>
</beans>

你可能感兴趣的:(spring,jms,Spring JMS)