Flex集成spring实现消息推送

来源:互联网 发布:python 获取主机名 编辑:程序博客网 时间:2024/05/06 08:22

本文章适合对blazdes和spring都有所了解的人

1. 实现环境

Web服务器:tomcat6.x

依赖库包:org.springframework.flex-1.0.3.RELEASE.jar,spring的库包(3.0.0.m2版本),

blazds的库包

2. 配置文件

2.1 配置文件结构


2.2 Web.xml

   <listener>   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

    <servlet>

        <servlet-name>SpringDispatcher</servlet-name>       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <load-on-startup>0</load-on-startup>

</servlet>

   <servlet-name>SpringDispatcher</servlet-name>

        <url-pattern>/messagebroker/*</url-pattern>

</servlet-mapping>

2.3 Flex文件夹下配置文件

需要修改的是,如果我们选择的是通道是my-polling-amf,

对应的配置文件内容如下,主意endpoint的url元素的值,如果我们修改web.xml中DispatcherServlet的映射路径,如将

   <servlet-name>SpringDispatcher</servlet-name>

        <url-pattern>/messagebroker/*</url-pattern>

</servlet-mapping>

修改为

   <servlet-name>SpringDispatcher</servlet-name>

        <url-pattern>/spring/*</url-pattern>

</servlet-mapping>

       则endpoint的url修改如下

http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amfpolling

 

        <channel-definitionid="my-polling-amf"class="mx.messaging.channels.AMFChannel">

            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling"class="flex.messaging.endpoints.AMFEndpoint"/>

            <properties>

               <polling-enabled>true</polling-enabled>

               <polling-interval-seconds>4</polling-interval-seconds>

            </properties>

        </channel-definition>

当web服务器不是tomcat时,注意修改serverice-config.xml中<security>的内容

2.4 Spring的中的相关配置

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:flex="http://www.springframework.org/schema/flex"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/flex

http://www.springframework.org/schema/flex/spring-flex-1.0.xsd"default-autowire="byName">

    <flex:message-broker>

        <flex:message-servicedefault-adapter-id="actionscript"default-channels="my-polling-amf"/>

    </flex:message-broker>

    <flex:message-destinationid="topicDestination"

    channels="my-polling-amf"

    allow-subtopics="true"

    subscription-timeout-minutes="3"

    subtopic-separator="."/>

    <beanid="myConfigProcess"class="com.creaway.util.MessageServiceProcessor"></bean>

</beans>

其中com.creaway.util.MessageServiceProcessor实现代码如下

package com.creaway.util;

 

importorg.springframework.flex.config.MessageBrokerConfigProcessor;

 

import flex.messaging.MessageBroker;

 

/**

 * @authorzhl

 * @qq 40303490

 * @date 2013-4-19

 */

public class MessageServiceProcessor implements MessageBrokerConfigProcessor {

 

   @Override

   public MessageBroker processAfterStartup(MessageBroker broker){

      broker.getServices();

      return broker;

   }

 

   @Override

   public MessageBroker processBeforeStartup(MessageBroker broker){

      // TODO Auto-generatedmethod stub

      return broker;

   }

 

}

2.5 发布消息的java代码

if(broker==null)

      {

        broker = MessageBroker.getMessageBroker("_messageBroker");

      }

      try

      {

  

        if(broker!=null)

        {

           Object messageBody = "messagebody obj";

           if(messageBody==null)

           {

              log.error("主题 "+topic+"产生消息失败!");

           }

           else

           {

              AsyncMessage msg = new AsyncMessage();

              msg.setMessageId(UUIDUtils.createUUID());

              msg.setDestination(destination);

              msg.setHeader(AsyncMessage.SUBTOPIC_HEADER_NAME,topic);

              msg.setBody(messageBody);

              broker.routeMessageToService(msg,null);         

           }         

        }

      }

      catch(Exception e)

      {

        e.printStackTrace();

        log.error(e.toString());

      } 

消息发布由MessageBroker的routeMessageToService方法来实现,通过静态方法MessageBroker.getMessageBroker("_messageBroker")获取实例,如果在配置元素<flex:message- broker >中没有指定brokerid名称,默认为_messageBroker

<flex:message-destinationid="topicDestination"/>

    msg.setDestination(destination)中的值一致;

   msg.setHeader(AsyncMessage.SUBTOPIC_HEADER_NAME,topic)中的topic和flex前端代码中的订阅主题一致

0 0
原创粉丝点击