Spring+ActiveMQ+Flex- 智慧公交(一)

2014-11-24 08:14:27 · 作者: · 浏览: 0

智能公交调度系统-系统结合了GPS GIS GPRS 等,将车辆的状态信息实时传到调度中心,调度中心可以自动调度和监控车辆。通过将GPS接入后台在通过消息中间件将消息发送到前端,前端可以实时看到车辆运行状态、运行轨迹等信息。该县的公交数量有280辆,我们采用BlazeDS(免费)完全可以胜任,LCDS(商业)比较昂贵,但性能好。

那就简单介绍一下是以Flex为前台,结合BlazeDS和ActiveMQ以及Spring实现接收JMS消息的方法(publish/subscribe模式)。在消息订阅上采用UDP还是TCP根据具体情况具体选择,UDP传输速度快,TCP传输速度不如UDP,但可靠性好。视频传输、聊天软件大多采用的都是UDP。

具体的实现方式是:

1.用Spring中配置的Sender bean的send()方法向ActiveMQ发送JMS消息;

2.用Spring中配置的Receiver bean 的receive()方法从ActiveMQ接收消息;

3.然后通过BlazeDS的messaging模式将消息发送到Flex的消息订阅者上(推送到客户端)。

本例需要用到的环境包括:FlexPlugin、MyEclipse、ActiveMQ、BlazeDS

一.Blazeds

blazeDS采用amf协议。该协议可以传输Object,Array, Date, XML。由于AMF采用二进制编码,这种方式可以高度压缩数据,因此非常适合用来传递大量的资料。数据量越大,FlashRemoting的传输效能就越高,远远超过WebService。至于XML,LoadVars和loadVariables(),它们使用纯文本的传输方式,效能就更不能与FlashRemoting相提并论了。

下载的blazeds.war 拷贝到tomcat webapp目录下,运行tomcat。Tomcat webapp目录下会生成blazeds文件夹。

二.ActiveMQ

ActiveMQ是Apache出品,最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式和许多先进的功能。

到官网下载activeMQ5.9 修改activeMQ conf文件夹下activemq.xml配置文件,加入UDP传输方式(

activemq.xml

- 
   
- 
   
- 
  
   
- 
    
- 
   
     - 
     
     
      file:${activemq.conf}/credentials.properties
      
     
   
- 
    
  
    
- 
    
- 
   
     - 
    
      - 
     
       - 
      
        - 
       
         - 
         - 
         
          
         
        
       
      
     - 
     - 
     
      
     - 
     - 
     
      
     - 
     - 
    
      - 
     
       - 
       
        
       - 
       
        
       - 
       
        
       
      
     - 
     - 
    
      - 
      
      
      
      
      
      
      
     - 
     - 
     
      
     
   
- 
    
  
    
  
  
- 
   
 

三.创建 web project(j2ee 5.0)

\

将tomcat blazeds文件夹中的文件覆盖掉 工程SpringFlexMQ WebRoot下的文件。

四.Web.xml配置

  
   
- 
  
   
- 
    
    
     index.
     jsp
     
   
- 
    
    
     flex.messaging.HttpFlexSession
     
   
- 
    
    
     flex
     
    
     org.springframework.web.servlet.DispatcherServlet
     - 
     
     
      contextConfigLocation
      
     
      classpath*:applicationContext.xml
      
     
    
     1
     
   
- 
    
    
     flex
     
    
     /messagebroker/*
     
   
- 
    
    
     MessageBrokerServlet
     
    
     flex.messaging.MessageBrokerServlet
     - 
     
     
      services.configuration.file
      
     
      /WEB-INF/flex/services-config.xml
      
     
    
     1
     
   
- 
    
    
     ControlServlet1
     
    
     com.test.jms.servlet.ControlServlet1
     
   
- 
    
    
     ControlServlet1
     
    
     /ControlServlet1
     
   
  
  
 

SSH整合的时候会注册spring 的ContextLoaderListene,但在这里给去掉了。似乎不是完美,这些问题以后会慢慢解决。

五.工程建好以后可以看到flex文件夹里的四个配置文件,修改配置文件。

1.messaging-config.xml

  
   
- 
  
   
- 
    
     - 
     
   
- 
    
     
     
   
  
  
 
2.proxy-config.xml

  
   
- 
  
   
- 
   
     - 
     
     
      100
      
     
      2
      
     
    
     true
     
   
- 
    
     
     
   
- 
    
     
   
  
    
  
  
 
3.remoting-config.xml

  
   
- 
  
   
- 
    
    
     JavaAdapter" default="true" /> 
    
   
- 
    
     
   
  
  
 
4.services-config.xml

  
   
- 
  
   
- 
    
     
     
     
   
- 
   
     - 
     
      
     
   
- 
    
     - 
     - 
     
   
- 
   
     - 
     
      
     - 
     
      - 
      
      
       false
       
      
     - 
     
      - 
      
      
       true
       
      
       4
       
      
     - 
     
      - 
      
      
       0
       
      
       100
       
      
       5000
       - 
       
        
        
       
      
     
   
- 
   
     - 
    
      - 
      
      
       [BlazeDS]
       
      
       false
       
      
       false
       
      
       false
       
      
       false
       
      - 
      
      
       Endpoint.*
       
      
       Service.*
       
      
       Configuration
       
      
     
   
- 
   
     - 
     
     
      false
      
     
   
  
  
 

六.Spring的配置文件applicationContext.xml

  
   
- 
  
   
- 
    
- 
    
     
   
- 
    
  
    
  
    
  
    
  
    
  
    
  
    
  
  
 

七.Java后台代码

1. Sender.java

package com.test.jms.util;

 

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Sender {
 
 
	public void send(String s) {
		
		try { 
		// 连接工厂,负责创建Connection
		ConnectionFactory connectionFactory = null;
		// 负责创建 Session
		Connection connection