还剩12页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实现消息服务Spring+JMS+ActiveMQ+Tomcat基于我使用的版本情况如下所示Spring+JMS+ActiveMQ+Tomcat,•Spring
2.5下面通过学习与配置,实现消息服务的基本功能发送与接收对提供了很好的Spring JMS支持,可以通过来方便地实现消息服务这里,我们的消息服务不涉及事务管JmsTemplate理下面简单说明实现过程先看一下,我们最终的配置文件的内容,如下所示Spring applicationcontext.xml[xhtml]view plaincopyprint
1.xml version=,,
1.0encoding=,,UTF-
82.beans xmlns=http://www.springframework.org/schema/beans
3.xmlns:amq=xmlns:xsi=nhttp://
4.xsi:schemaLocation=http:http:/schema/core/activemq-core.xsd
5.bean id=listenercontainer
6.class=org.tainer
7.property name=connectionFactory ref=connectionFactoryn/property
8.property name=,,destination,,ref=,,messageQueue,,x/property
9.property name=messageListener ref=receiveMessageListenerx/property
10./bean
11.bean id=connectionFactory class=org.ctFactoryBean
12.property name=ujndiName value=java:comp/env/myJMS/ConnectionFactory/property
22.init-param
23.param-namecontextConfigLocation/param-name
24.param-value
25.classpath:org/shirdrn/spring/jms/integration/applicationContext.xml
26./param-value
27./init-param
28.load-on-startupl/load-on-startup
29./servlet
30.servlet-mapping
31.servlet-namecontroller/servlet-name
32.url-pattern*.do/url-pattern
33./servlet-mapping
34.welcome-file-list
35..welcome-fileindex.jsp/welcome-file
36./welcome-file-list
37./web-appxml version=
1.0encoding=UTF-8〃?web-app version=〃
2.5〃xmlns=,/.sun.com/xml/ns/javaee,zxmlns:xsi=http://www.w
3.org/2001/XMLSchema-instance”.xsi:schemaLocation=,/http://java.sun.com/xml/ns/javaee.xsd〃context-paramparam-namecontextConf igLocation/param-nameparam-value〈〉classpath:org/shirdrn/spring/jms/integration/applicationContext.xml/param-value/context-param1istener1istener-classorg.springframework.web.context.ContextLoaderListener//listener serv1etsnrvl pt.-nampeontrol1pr/sprv1pt.-naniA11I另外,我们还要实现一个页面,提供输入发送消息的表单,提交后交给后台处理,成功发送后跳转到一个成功页面表单输入页面为如下所示index.jsp,[java]iew pla
1.%@page language=java import=Hjava.util.pageEncoding=,UTF-8,,%
2.%
3.String path=request.getContextPath;
4.String basePath=request.getScheme+5・+request.getServerName++request.getServerPort
6.+path+
7.%
8.!DOCTYPE HTMLPUBLIC-//W3C//DTD HTML
4.01Transitional//ENn
9.html
10.head
11.base href=%=basePath%
13.
14.titleMy DSPindex.jsp starting page/title
15.meta http-equiv=pragma content=no-cache
16.meta http-equiv=cache-control content=no-cache
17.meta http-equiv=expires content=
018.meta http-equiv=keywords contentfkeyword],keyword2,keywords
19.meta http-equiv=description content=This ismy page
20.!--
21.link rel=stylesheet type=text/css href=styles.css mce__href=styles.cssH
22.--
23./head
24.body
25.div align=center style=width:500px;height:300px;border:2px;borderColor:black
26.form action=sendeessage.do method=post
27.table align=center
28.tr
29.th colspan=,,2H
30.消息发送控制台
34.tr
35.td
36.消息内容:
37./td
38.td
39.input type=text name=message
40./td
41./tr
42.tr
43.td align-center”colspan=n2n
44.input type=reset value=清除》
45.input type=submit value=发送“〉
46./td
47./tr
48./table
49./form
50./div
51./bodypage language=java import=java,uti
1.*〃pageEncoding UTF-8〃%二〃String path=request.getContextPath;String basePath=request.getSchemeO+〃〃〃+request.getServerName+request.getServerPort+path+7;〃〃+!DOCTYPE HTMLPUBLIC-//W3C//DTD HTML
4.01Transitional//ENhtmlheadbase href=zz%=basePath%z/titleMy JSPindex.jsp startingpage/titlemeta http-equiv=〃pragma〃content=〃no-cache〃meta http-equiv=〃cache-control content=,,no-cache,zmeta http-equiv=〃expires content=〃0〃rETj_zJmpt.a ht.tD-pou iv=z,knvwords/,eont.pnt.=,zkpvword
1.kovword
2.kovwor成功页面为就是给一个成功的提示信息,如下所示:success.jsp,[java]
1.%@page language=java import=Hjava.util.*11pageEncoding=,UTF-8%
2.%
3.String path=request.getContextPath;
4.String basePath=request.getScheme+5・+request.getServerName++request.getServerPort
6.+path+
7.%
8.!DOCTYPE HTMLPUBLIC-//W3C//DTD HTML
4.01Transitional//ENn
9.html
10.head
11.base href=%=basePath%
13.
14.titleMy DSPindex.jsp startingpage/title
15.meta http-equiv=pragma content=no-cache
16.meta http-equiv=cache-control content=no-cache
17.meta http-equiv=expires content=
018.meta http-equiv=keywords content=keywordl keyword2,keywordsJ
19.meta http-equiv=description content=This ismy page
20.!--
21.link rel=stylesheet type=text/css href=styles.css mce__href=styles.cssH
22.--
23./head
24.body
25.div align=center style=width:500px;height:300px;border:2px;borderColor:black
26.form action=sendeessage.do method=post
27.table align=center
28.tr
29.th colspan=n2n
30.消息发送报告
31./th
32./tr
33.tr
36.状态发送成功
37./td
38./tr
39.tr
40.td align=center”colspan=
241.a href=index.jsp mce_href=index.jsp》返回/a
42./td
43./tr
44./table
45./form
46./div
47./body
48./html%@page language=〃java〃import=java,uti
1.*〃pageEncoding=〃UTF-8〃%%String path=request.getContextPath;String basePath=request.getSchemeO+〃〃〃+request.getServerName+request.getServerPort+path+7;〃〃+%!DOCTYPE HTMLPUBLIC/Z-//W3C//DT1HTML
4.01Transitional//EN,z htmlheadbasehref=z,%=basePath%/,titleMy JSPindex.jsp,startingpage/titlemeta http-equiv pragma〃content=〃no-cache〃二〃meta http-equiv=〃cache-control content=,,no-cache,zmeta http-equiv=〃expires content=〃0〃mot.a ht.tD-naui v=zzknvwords/,eont.pnt.=,zknvword
1.knvword
2.knvwor至此,我们可以将实现的简单工程发布到容器,然后启动服务器,通过web TomcatTomcat页面可以发送消息,并通过日志查看,实际消息发送和接收的情况
15./bean
16.bean id=messageQueue class=org.toryBean
17.property name=jndiName value=java:comp/env/myJMS/MessageQueue/property
18./bean
19.bean id=receiveMessageListener
20.class=org.shirdrn.spring.jms.integration.ReceiveMessageListener/bean
21.bean id=messageSender class=org.shirdrn.spring.jms.integration.MessageSender
22.property name=jmsTemplate ref=jmsTemplate/property
23./bean
24.bean id=jmsTemplate class=org.en
25.property name=connectionFactory ref=connectionFactoryx/property
26.property name=defaultDestination ref=messageQueuex/property
27./bean
28.bean id=sendMessageController
29..class=org,shirdrn.spring.jms.integration.SendMessageControllerproperty name=messagesender ref=messagesender/
30.property name=successview value=/success/
31./bean
32.bean id=urlMapping
33.class=org.pping
34.property name=mappings
35.props
36.prop key=/sendMessage.dosendMessageController/prop/props
37./property
38./bean
40.class=org.esolver
41.property name=requestContextAttribute value=rc/
42.property name=viewClass
43.value=org.springframework.web.servlet.view.DstIView/
44.property name=prefix value=//
45.property namesuffixvalue=n.jsp/
46./bean
47./beansxml version=〃
1.0〃encoding〃UTF-8二〃?beans xmlns=,,http://www.springframework.org/schema/beans,/xmlns:amq=〃ivemq.apache,org/schema/core〃xmlns:xsi=,,http://www.w
3.xsi:schemaLocation=,zhttp://www.springframework,org/schema/beans http://www.si,org/schema/core,org/setbean id=〃1istenerContainer”class=〃org.springframework,jms.1istener.DefaultMessageListenerContairproperty name=〃connectionFactory〃ref=connectionFactory〃/propertproperty name=〃destination“ref=zzmessageQueue,,/propertyproperty name=messageListener〃ref=,,receiveMessageListener,,X/prop/beanbean idconnectionFactory class=〃二〃property name=〃jndiName value=〃java:comp/env/myJMS/ConnectionFactoi/beanbean id=〃messageQueue class=property namejndiName〃val ue=z/java:comp/env/myJMS/MessageQueue^X/二〃/hoan11I我们使用的Spring org.springframework.jms.listener.DefaultMessageListenerContainer5K收集消息,通过设置一个消息监听器,具体实现类为代码如下所示org.shirdrn.spring.jms.integration.ReceiveMessageListener,[java]
1.package org.shirdrn.spring.jms.integration;
2.
3.import javax.jms.DMSException;
4.import javax.jms.Message;
5.import javax.jms.MessageListener;
6.import javax.jms.TextMessage;
7.import org.apache.Iog4j.Logger;
8.public classReceiveMessageListener implementsMessageListener{
12.private staticfinal LoggerLOG=Logger.getLoggerReceiveMessageList
13.
14.public voidonMessageMessage message{
15.if messageinstanceof TextMessage{
16.TextMessage text=TextMessage message;
17.try{
18.LOG.infoReceived message:+text.getText;
19.catch JMSExceptione{
20.e,printStackTrace;ener.class;
21.
22.
23.
24.
25.package org.shirdrn.spring,jms.integration;import javax.jins.JMSExcept ion;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;import org.apache.Iog4j.Logger;public classReceiveMessageListener implementsMessageListener{private staticfinal LoggerLOG=Logger.getLoggerReceiveMessageListener.chpublic voidonMessageMessage message{if messageinstanceof TextMessage{TextMessage text=TextMessage message;try{〃I.OG.i nfn fz,Rpr.p ivpd mascKga+tpxt.p-pfTpxtO:」d I上面,对发送的消息进行监听,并接收处理,我们只是简单地打印出一条日志内容对于还需要注入连接工厂和消息目的这两个listenercontainer,connectionFactory destination属性我们使用的connectionFactory ActiveMQ并通过服务,绑定到名字org.apache.activemq.ActiveMQConnectionFactory,JNDI上;而属性通过使用的java:comp/env/myJMS/ConnectionFactory destinationActiveMQ消息队列,也是通过服务绑定到名org.apache.activemq.command.ActiveMQQueue JNDI上所以,在的中的java:comp/env/myJMS/MessageQueue Tomcatconf/context.xml〈元素里面加上如下配置Context,[xhtml]v i
1.Resource name=myJlvIS/ConnectionFactory
2.auth=Container
3.type=org.apache.activemq.ActiveMQConnectionFactory
4.description=JMS ConnectionFactory
5..factory=org.apache.activemq.jndi,DNDIReferenceFactory
6.brokerURL=vm://shirdrnUrl,
7.brokerName=MyActiveMQBroker
78.Resource name=myJMS/MessageQueue
9.auth=Container
10.・type=org.apache.activemq.command.ActiveMQQueue
11.description=My MessageQueue
12..factory=org.apache.activemq.jndi,DNDIReferenceFactory,
13.physicalName=MyMessageQueue7Resource namemyJMS/ConnectionFactory”auth=Container”二〃type=org.apache,activemq.ActiveMQConnectionFactory”description=〃JMS ConnectionFactory”factory=〃org.apache,activemq.jndi.JNDI Referenc eFactor y/z brokerURL=/zym://shirdrnUrlz/〃brokerName=z,MyAct iveMQBroker/z/Resource name=〃myJMS/MessageQueue”auth=Container”type=zzorg.apache,activemq.command.ActiveMQQueue/,description=〃My MessageQueue”factory=〃org.apache,activemq.jndi.JNDIReferenceFactory,zphysicalName=,,MyMessageQueue,z/我们通过使用来实现消息的发送,所以实现的发送类要将注入进JmsTemplate JmsTemplate去,实现代码如下所示[java]
1.package org.shirdrn.spring.jms.integration;
3.import javax.jms.DMSException;
4.import javax.jms.Message;
5.import javax.jms.Session;
6.import javax.jms.TextMessage;
7.import org.apache.Iog4j.Logger;
8.import org.springframework.jms.core.DmsTemplate;
9.import org.springframework.jms.core.Messagecreator;
10.public classMessagesender{
11.private staticfinal LoggerLOG=Logger.getLoggerMessagesender.clas s;
12.private OmsTemplate jmsTemplate;
13.public voidsetJmsTemplate3msTemplatejmsTemplate{
14.this.jmsTemplate=jmsTemplate;
15.}
16.public voidsendMessagefinal String message{
17.LOG.infoSend message:”+message;
18.jmsTemplate.sendnew MessageCreator{
19.public MessagecreateMessageSession sessionthrows JMSException{
20.TextMessage textMessage=session.createTextMessagemessage;
21.return textMessage;
22.}
23.};
24.
25.package org.shirdrn.spring,jms.integration;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import javax.jms.TcxtMessage;import org.apache.Iog4j.Logger;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;public classMessageSender{private staticfinal LoggerLOG=Logger.getLoggerMessageSender.class;private JmsTemplateJmsTemplate;public voidsetJmsTemplateJmsTemplate JmsTemplate{this.imsTpmnl at.p=imsTpmnl at.p:上面基于的来创建消息,通过调用的方法发送出Spring MessageCreatorJmsTemplate send去对于我们使用了通过实现一个控制器Web,Spring MVC,来控制页面消息的发送及其视图的org.shirdrn.spring.jms.integration.SendMessageController派发我们实现的类继承自可以在一个控制器SendMessageController MultiActionController,中实现多个代码实现如下所示Action,[java]view plain
1..package org.shirdrn.spring.jms.integration;
2.import java.util.HashMap;
3.import java.util.Map;5,
6.import javax.servlet.http.HttpServletRequest;
7.import javax.servlet.http.HttpServletResponse;
8..import org.springframework.web.servlet.ModelAndView;ler;
9.public classSendMessageController extendsMultiActionController{
10.private Stringsuccessview;
11.private MessageSendermessagesender;
12.public ModelAndViewsendMessageHttpServletRequest request,
19.
20.MapString,Object retMap=new HashMapStringObject;J
21.Stringmessage=request.getParametermessage;
22.messagesender.sendMessagemessage;
23.return newModelAndViewsuccessView retMap;J
24.
25.public StringgetSuccessView{
26.return successview;
27.}
28.public voidsetSuccessViewString successview{
29.this.successview=successview;
30.
31.public MessagesendergetMessageSender{
32.return messagesender;
33.
34.public voidsetMessageSenderMessageSender messagesender{
35.this.messagesender=messagesender;
36.
37.package org.shirdrn.spring,jms.integration;import java.util.HashMap;importjava.util.Map;importjavax.servlet,http.HttpServletRequest;importjavax.servlet,http.HttpServletResponse;importimportpublicorg.springframework.web.servlet.ModelAndView;org.springframework,web.servlet,mvc.multiaction.MultiActionController;class SendMcssageControllerextends MuitiActionController{private StringsuccessView;private MessageSendermessageSender;public ModelAndViewsendMessageHttpServletRequest request,HttnSorvl ptRp;rnnSP rnsnonthrowsFxr.pnt上面调用模型层的来实现发送消息的处i nnModel Messagesender理逻辑,如果发送成功,视图派发到指定的页面可successView以看到,最前面我们给出的配置内容分为三组,最后一组是Spring对控制器的配置视图解析器配置,可以将控制器中指定前缀/解析为后缀是viewResolver Jsp的页面,例如解析为/success/sucess.jsp请求与控制器的映射,例如对于满足模urlMapping URL/sendMessage.do式的请求,都会被指派给去处理控制器sendMessageController sendMessageController实现类,里面的方法名称可以自定义,但要在中的属生中org.springframework.web.servlet.handler.SimpleUrlHandlerMapping mappingsI配置映射然后,我们需要一个部署描述文件,文件配置内容,如下所示web web.xml[xhtml]view pla
1.xml version=H
1.0n encoding=,,UTF-8,
2.web-app version=
2.5xmlns=http
3..xmlns:xsi=http://www.w
3.org/2001/XMLSchema-instance
4.xsi:schemaLocation=
5.,xsd
6.
7.context-param
8.param-namecontextConfigLocation/param-name
9.param-value
10.classpath:org/shirdrn/spring/jms/integration/applicationContext.xml
11./param-value
12./context-param
13.listener
14.listener-classener/listener-class
15./listener
16.
17.servlet
18.servlet-namecontroller/servlet-name
19.servlet-class
20..org・springframework・。