javaonmessage监听消息队列_详解Java消息队列-Spring整合
ActiveMq
1、概述
⾸先和⼤家⼀起回顾⼀下Java 消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为⼤家分析了:
1.消息服务:⼀个中间件,⽤于解决两个活多个程序之间的耦合,底层由Java 实现。
2.优势:异步、可靠
3.消息模型:点对点,发布/订阅
4.JMS中的对象
然后在另⼀篇博客《Java消息队列-ActiveMq实战》中,和⼤家⼀起从0到1的开启了⼀个ActiveMq 的项⽬,在项⽬开发的过程中,我们对ActiveMq有了⼀定的了解:
1.多种语⾔和协议编写客户端。语⾔: Java, C, C++, C#, Ruby, Perl, Python, PHP。应⽤协议: OpenWire,
Stomp REST,WS Notification,XMPP,AMQP
2.完全⽀持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3.对Spring的⽀持,ActiveMQ可以很容易内嵌到使⽤Spring的系统⾥⾯去,⽽且也⽀持Spring2.0的特性
4.通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以⾃动的部署到任何兼容J2EE 1.4 商业服务器上
5.⽀持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6.⽀持通过JDBC和journal提供⾼速的消息持久化
7.从设计上保证了⾼性能的集,客户端-服务器,点对点
8.⽀持Ajaxjava xml是什么
9.⽀持与Axis的整合
10.可以很容易得调⽤内嵌JMS provider,进⾏测试
在接下来的这篇博客中,我会和⼤家⼀起来整合Spring 和ActiveMq,这篇博⽂,我们基于Spring+JMS+ActiveMQ+Tomcat,实现了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,简单实例,不包含任何业务。
2、⽬录结构
2.1 项⽬⽬录
IDE选择了IDEA(建议⼤家使⽤),为了避免下载jar 的各种⿇烦,底层使⽤maven搭建了⼀个项⽬,整合了Spring 和ActiveMq
2.l
4.0.0
Crawl-Page
Crawl-Page
war
1.0-SNAPSHOT
Crawl-Page Maven Webapp 4.1.8.RELEASE
junit
junit
4.10
test
jstl
jstl
1.2
javax.servlet
servlet-api
provided
2.5
org.springframework
spring-core
${springframework}
org.springframework
spring-context
${springframework}
org.springframework
spring-tx
${springframework}
org.springframework
spring-webmvc
${springframework}
org.springframework
spring-jms
${springframework}
org.apache.xbean
xbean-spring
3.16
org.apache.activemq
activemq-core
5.7.0
org.apache.activemq
activemq-pool
5.12.1
commons-httpclient
commons-httpclient
3.1
Crawl-Page
at.maven
tomcat7-maven-plugin
8080
/
因为这⾥l ⽂件有点长,就不展开了。
我们可以看到其实依赖也就⼏个,1、Spring 核⼼依赖 2、ActiveMq core和pool(这⾥如果同学们选择导⼊jar,可以直接导⼊我们上⼀篇博客中说道的那个activemq-all 这个jar包)3、java servlet 相关依赖
这⾥⾯我们选择的ActiveMq pool 的依赖版本会和之后的dtd 有关系,需要版本对应,所以同学们等下配置activemq ⽂件的时候,需要注意dtd 版本选择
2.l
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/javaee
version="3.0">
Archetype Created Web Application
contextConfigLocation
classpath:applicationContext*.xml;
org.t.ContextLoaderListener
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
l
1
springMVC
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/
*
2.4 SpringMvc 和l
这⾥⾯的SpringMVC没什么特别,有需要的同学可以参考⼀下:
xmlns:aop="/schema/aop"
xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"
xmlns:tx="/schema/tx"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/aop
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:amq="/schema/core"
xmlns:jms="/schema/jms"
xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"
xsi:schemaLocation="
2.l
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:amq="/schema/core"
xmlns:jms="/schema/jms"
xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"
xsi:schemaLocation="
>
brokerURL="tcp://192.168.148.128:61616"
userName="admin"
password="admin" />
class="org.tion.CachingConnectionFactory">
Jaycekon
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
这⾥和⼤家讲解⼀下这个配置⽂件,如果⼤家能够从上述配置⽂件中看懂,可以跳过。同学们也可以在ActiveMQ官⽹中的查看。
1、ActiveMq 中的DTD,我们在声明相关配置之前,我们需要先导⼊ActiveMq 中的DTD,不然Spring 并不理解我们的标签是什么意思。
我们在l ⽂件中有配置了activemq 的版本依赖我们这⾥的版本,需要和依赖的版本⼀样,不然是不到相关的dtd
2、amq:connectionFactory:很直⽩的⼀个配置项,⽤于配置我们链接⼯⼚的地址和⽤户名密码,这⾥需要注意的是选择tcp连接⽽不是http连接
3、jmsTemplate:⽐较重要的⼀个配置,这⾥指定了连接⼯⼚,默认消息发送⽬的地,还有连接时长,发布消息的⽅式
3、项⽬结构
3.1 ProducerService
package com.Jayce.Service;
import org.JmsTemplate;
import org.MessageCreator;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;