Skip to content

ljz0721cx/springjms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

JMS的全称是Java Message Service,JMS只是一个标准 下面我们使用spring-jms作为研究

ConnectionFactory:是用于产生到JMS服务器的链接的工厂, pooledConnectionFactory:我们可以为工厂出来的连接建立一个pool JmsTemplate:Spring为我们提供的JmsTemplate类来实现消息的接收和发送。也是最核心的

<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
    <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  
    <property name="connectionFactory" ref="connectionFactory"/>  
</bean>  

Destination:消息发送的目的地,ActiveMQ中实现了两种类型的Destination,一个是点对点的ActiveMQQueue,另一个就是支持订阅/发布模式的ActiveMQTopic

<!--这个是队列目的地,点对点的-->  
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">  
    <constructor-arg>  
	<value>queueDestination</value>  
    </constructor-arg>  
</bean>  
<!--这个是主题目的地,一对多的-->  
<bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">  
    <constructor-arg value="topic"/>  
</bean> 

MessageListenerContainer:消息监听容器,必须要有以下几个属性 一个是表示从哪里监听的ConnectionFactory;一个是表示监听什么的Destination;一个是接收到消息以后进行消息处理的MessageListener。 Spring一共为我们提供了两种类型的:DefaultMessageListenerContainer和SimpleMessageListenerContainer SimpleMessageListenerContainer会在一开始的时候就创建一个会话session和消费者Consumer,一般不兼容Java EE的JMS限制 DefaultMessageListenerContainer会动态的适应运行时需要,并且能够参与外部的事务管理。它很好的平衡了对JMS提供者要求低、先进功能如事务参与和兼容Java EE环境。

<!-- 消息监听器 -->  
<bean id="consumerMessageListener" class="com.tiantian.springintejms.listener.ConsumerMessageListener"/>      

<!-- 消息监听容器 -->  
<bean id="consumerMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
    <property name="connectionFactory" ref="connectionFactory" />  
    <property name="destination" ref="queueDestination" />  
    <property name="messageListener" ref="consumerMessageListener" />  
    <!-- 这里可以设置事务啥的 -->  
</bean>  

如果我们发出了一个名字为queueDestination的消息,我们的监听器就是监听了发送到这个目的地的消息。这样监听的容器就可以监听到相关的信息。

首先要安装ActiveMq,启动mq,访问mq地址 http://localhost:8161/admin/queues.jsp

注意事项:

1.消息监听时候会出现消息出现异常不能回滚,是由于你处理了异常或者是你没有抛出RuntimeException,只有在抛出是运行时异常时候才会回滚消息
2.回滚消息可以在Number Of Pending Messages可以看到挂起的消息队列。有兴趣的可以自己测试一下
3.使用JTA做的数据库的事务管理,可以使用分布式的消息监听

About

简单实用jms

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages