《基于Flex与Spring实现JMS应用.pdf》由会员分享,可在线阅读,更多相关《基于Flex与Spring实现JMS应用.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于 Flex 和 Spring实现 JMS应用本文介绍的内容是以Flex为前台,结合BlazeDS和 ActiveMQ 以及 Spring 实现接收JMS消息的方法(publish/subscribe 模式)。具体的实现方式是:1.用 Spring 中配置的Sender bean 的 send()方法向 ActiveMQ 发送 JMS消息;2.用 Spring 中配置的Receiver bean 的 receive()方法从 ActiveMQ 接收消息;3.然后通过 BlazeDS的 messaging 模式将消息发送到Flex 的消息订阅者上。针对这个应用实现有两种实现方式:一是将消息Se
2、nd和 Receive按简单的 java bean 处理;二是采用Spring jmsTemplate,下面分别来介绍这两种方式。注:本例需要用到的环境包括:FlexPlugin、Eclipse、ActiveMQ5.4、BlazeDS4 本文档的前提是已经将Flex+BlazeDS+Spring集成。以具体实例运用这两种方式实现上述功能一、不采用jmsTemplate 这种方式就是将消息的Send 和 Receive方法当作简单的java bean 来处理。1,新建 Flex工程,命名为“SpringJMS”,如下所示:2.导入所需的包,本项目中所需的包如下:3.为了配置Spring Blaz
3、eDSC的整合,需修改 web.xml,去除所有flex 相关的配置,加入 Spring的配置,修改后的web.xml 如下:SpringJMSSpring MVC Dispatcher Servletorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/applicationContext.xml1Spring MVC Dispatcher Servlet/messagebroker/*index.htmlindex.htmindex.jspdefault.htmldefault.htmd
4、efault.jsp!-Flex Messaging WorkManagerwm/MessagingWorkManagercom.ibm.websphere.asynchbeans.WorkManagerContainerShareable-4.工程建好以后可以看到flex 文件夹里的四个配置文件,本例中只需要修改其中的services-config.xml,其他三个可以删除掉。要对 services-config.xml 进行修改如下,其中标红的为修改的地方,标紫色的为新加的地方。falsetrue4 0 100 5000 !-false-BlazeDS falsefalsefalsefal
5、seEndpoint.*Service.*Configurationfalse5、修改完server-config.xml文件后,就是要进行Spring 相关配置。在Spring 的配置文件applicationContext.xml 中添加以下配置6.后台 java 类(一).jms 的 Send代码publicclassJMSSender /*JMS 消息发送方法*/publicvoid send()System.out.println(do send method);/连接工厂,负责创建ConnectionConnectionFactoryconnectionFactory=null;/
6、负责创建 SessionConnection connection=null;/创建 MessageProducer(用来发消息)和MessageConsumer(用来接收消息)Session session=null;/消息的目的地Destination destination=null;connectionFactory=new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,tcp:/localhost:61616);try connection=c
7、onnectionFactory.createConnection();connection.start();session=connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);/创建 Topic,名字为 myTopic1destination=session.createTopic(myTopic1);MessageProducermessage_producer=session.createProducer(destination);/通过消息生产者发出消息message_producer.send(sessio
8、n.createTextMessage(this is JMS message);catch(JMSException e)e.printStackTrace();(二).jms Receive 代码publicclass Receive privatestaticConnectionFactoryconnectionFactory=null;privatestatic Connection connection=null;privatestatic Session session=null;privatestatic Destination destination=null;privates
9、taticMessageConsumermessageConsumer=null;/*param args*/publicvoiddoReceive()System.out.println(receive);connectionFactory=new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,tcp:/localhost:61616);try connection=connectionFactory.createConnection();connec
10、tion.start();session=connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);destination=session.createTopic(myTopic1);if(messageConsumer=null)messageConsumer=session.createConsumer(destination);messageConsumer.setMessageListener(new MessageListener()OverridepublicvoidonMessage(Message mess
11、age)TextMessagetextMessage=(TextMessage)message;String msag=null;try msag=textMessage.getText();System.out.println(msag);/获取消息代理,此处的参数就是Spring配置文件中配置的messagebroker 的idMessageBrokermessageBroker=MessageBroker.getMessageBroker(_messageBroker);String clientID=UUIDUtils.createUUID();AsyncMessageasynMsg=
12、new AsyncMessage();/设置消息的地址,这个必须跟Spring 配置文件中信道的destination一致asynMsg.setDestination(market-data-feed);asynMsg.setHeader(message,new);asynMsg.setClientId(clientID);asynMsg.setMessageId(UUIDUtils.createUUID();asynMsg.setTimestamp(System.currentTimeMillis();asynMsg.setBody(msag);messageBroker.routeMess
13、ageToService(asynMsg,null);catch(JMSException e)e.printStackTrace();System.out.println(Receive1JMS+msag););catch(Exception e)/TODO:handle exception 7.在 Spring 配置文件中配置Sender 和 Receiver bean,代码如下:8.到这里后台所有的代码及配置已经完成,剩下的就是前台了,具体的内容如下所示:9.到此为止,所有的代码及配置已经完成。二、采用 Spring 的 jmsTemplate实现 jms 开始的步骤同前一种方式的1-3
14、.从 Spring 配置文件的配置开始不一样,下面从 Spring 配置文件讲起:1.在 Spring 配置文件中添加下列代码:2.后台 java 类(一)消息发送类publicclassTemplateSender /发送类的属性JmsTemplate,并包括其 get,set 方法,此属性通过 Spring IoC Setter注入privateJmsTemplatejmsTemplate;publicJmsTemplategetJmsTemplate()returnjmsTemplate;publicvoidsetJmsTemplate(JmsTemplatejmsTemplate)th
15、is.jmsTemplate=jmsTemplate;/*消息发送方法*/publicvoid send()System.out.println(Send Message!);this.getJmsTemplate().send(new MessageCreator()public Message createMessage(Session session)throwsJMSException TextMessage message=session.createTextMessage();message.setText(This is a JMS Message!);return messag
16、e;);(二)消息监听类,由于消息监听代码比较繁琐,而且可以重用,在这里我们就将它提出来单独成一个类。publicclassMyMessageListenerimplementsMessageListener publicvoidonMessage(Message message)TextMessagetextMessage=(TextMessage)message;String msag=null;try msag=textMessage.getText();System.out.println(msag);/获取消息代理,此处的参数就是Spring 配置文件中配置的messagebroke
17、r 的idMessageBrokermessageBroker=MessageBroker.getMessageBroker(_messageBroker);String clientID=UUIDUtils.createUUID();AsyncMessageasynMsg=new AsyncMessage();/设置消息的地址,这个必须跟Spring 配置文件中信道的destination一致asynMsg.setDestination(market-data-feed);asynMsg.setHeader(message,new);asynMsg.setClientId(clientID)
18、;asynMsg.setMessageId(UUIDUtils.createUUID();asynMsg.setTimestamp(System.currentTimeMillis();asynMsg.setBody(msag);System.out.println(Receive1JMS+msag);messageBroker.routeMessageToService(asynMsg,null);catch(JMSException e)e.printStackTrace();System.out.println(Receive1JMS+msag);(三)消息接收类publicclassT
19、emplateReceiver /接收类的属性JmsTemplate,并包括其 get,set 方法,此属性通过 Spring IoC Setter注入privateJmsTemplatejmsTemplate;/消息消费者privatestaticMessageConsumermessageConsumer=null;/消息地址privatestatic Destination destination=null;/本来 JmsTemplate可以自动管理消息消费者和消息地址,/但是为了解决消息重复接收的问题,需实现SessionCallback接口/重新自己创建消息消费者publicJmsT
20、emplategetJmsTemplate()returnjmsTemplate;publicvoidsetJmsTemplate(JmsTemplatejmsTemplate)this.jmsTemplate=jmsTemplate;publicvoiddoReceive()System.out.println(receive);destination=jmsTemplate.getDefaultDestination();/jmsTemplate实现 SessionCallback接口,重新创建消息消费者jmsTemplate.execute(new SessionCallback()Ov
21、erridepublic Object doInJms(Session session)throwsJMSException if(null=messageConsumer)messageConsumer=session.createConsumer(destination);/调用自己编写的消息监听类MyMessageListenermyMessageListener=new MyMessageListener();myMessageListener.onMessage(jmsTemplate.receive();messageConsumer.setMessageListener(myMessageListener);returnnull;);3.在 Spring 的配置文件中配置消息发送、接收及监听类,代码如下:!-消息目的地,因为jmsTemplate有默认的了,所以这里可以省略-4.到此后台的代码及配置已经完成,就剩前台,在这里前台和上一中方式一样,没有改变,可以抄过来用。5.到此整个工程已经完成。(两种实现方式切换,只需要修改前台RemoteObject所调用的后台类名)。