`
keren021
  • 浏览: 7075 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BlazeDS+Spring+activeMQ outofmemory

阅读更多
一、BlazeDS内存溢出修改方案:

BlazeDS在大数据量、频繁推送数据或者频繁刷新页面、且服务器session时间超长的情况下,会导致内存泄漏。由于http协议是无状态的,所以客户端不主动通知blazeds,blazeds是不知道客户端已经断开,一直会等到session超时,且客户端每链接一次服务器,都会产生一个FlexClient,FlexClient对象会维护一个消息队列,所以解决这个问题就应该从两个地方入手,客户端和服务器。
1、flex端代码修改(主动关闭链接)
(1)
//监听页面离开事件
var connectManager:MessageConnectManager = MessageConnectManager.getInstance();
connectManager.regist();
connectManager.addEventListener(MessageConnectManager.DISCONNECT,disConnectHandler);

//页面离开  主动关闭链接
protected function disConnectHandler(e:Event):void
{
if(this.consumer && this.consumer.channelSet){
this.consumer.channelSet.disconnectAll();
}
}
2、修改blazeDS配置文件(网络中断或者用户频繁刷新页面导致内存泄漏)

修改配置文件flex-services-config.xml :
<channel-definition id="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>
                .....(2)
<flex-client-outbound-queue-processor   class="processor.TimeoutOutBoundQueueProcessor">
<properties>
<!--message time out  in millisecond-->
<messageTimeOut>30000</messageTimeOut>
<!--client time out in millisecond-->
<clientTimeOut>12000</clientTimeOut>
</properties>
</flex-client-outbound-queue-processor>
            </properties>
        </channel-definition>
 
 
<channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel">
 
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
 <properties> 
                .....(3)
<flex-client-outbound-queue-processor   class="processor.TimeoutOutBoundQueueProcessor">
<properties>
<!--message time out  in millisecond-->
<messageTimeOut>30000</messageTimeOut>
<!--client time out in millisecond-->
<clientTimeOut>12000</clientTimeOut>
</properties>
</flex-client-outbound-queue-processor>
     </properties>
</channel-definition> 

二、activeMQ内存溢出修改方案:
acitveMQ在5.4版本以后,能对慢消费者进行处理,比如blazeds+spring+activemq集成时,如果所有客户端与blazeds断开链接,但activemq还会继续向spring JMSAdapter发生数据,且spring JMSAdapter接受到消息后放消息队列里,且不通知activemq,从而导致内存溢出。
修改activemq配置文件
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="messagebus" dataDirectory="activemq/data"
destroyApplicationContextOnStop="true" persistent="true">
<destinationPolicy>
<policyMap>
<policyEntries> 
      ........(4)
           <policyEntry topic=">" producerFlowControl="false" memoryLimit="1mb" topicPrefetch="100" >
<slowConsumerStrategy>
    <abortSlowConsumerStrategy checkPeriod="30000" maxSlowDuration="120000" abortConnection="false" />
</slowConsumerStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
.......(5)
<systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="20 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="1 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>
</broker>


配置解释:
(1):客户端监听beforeunload事件,断开链接。工具类见附件“MessageConnectManager.as ”

(2)(3):服务器端保护措施,附件“TimeoutOutBoundQueueProcessor.java ”
     messageTimeOut:队列中消息超时时间,单位毫秒,超过指定时间,剔除队列;
     clientTimeOut:客户端超时时间,如果超过指定时间,blazeDS没有向客户端flush数据,说明客户端已经断开链接,目前测试blazeds最大flush时间1分钟

(4):activeMQ慢消费者处理策略
topicPrefetch:消费者收到但没有应答的队列长度,超过这个长度,mq就不会向这个消费者推送数据
slowConsumerStrategy:慢消费者策略(如何衡量一个消费者慢? 在指定时间内未响应消息长度达到topicPrefetch设置或者达到到指定慢的次数,目前使用前者)
checkPeriod:检查消费者是否慢的频度
maxSlowDuration:慢持续时间
abortConnection:是否中断链接(注意 不能中断)

(5):activeMQ占用系统资源限制,超过限制,持久化到磁盘。
分享到:
评论
6 楼 keren021 2013-02-01  
coral0212 写道
希望楼主留下一个联系方式,,其他对这个感兴趣的与我联系,我遇到问题了,扣扣158403055


什么问题? 说说看是否能帮忙! 不好意思,最近很少看。
5 楼 keren021 2013-01-28  
sharplog 写道
你好,请问你用的是哪个版本的ActiveMQ? 我用5.6.0,参照你的设置了slowConsumerStrategy,但是发现没有效果,可能是什么原因呢?
我在程序里这样创建的subScriber:
this.session.createSubscriber(topic, selector, false);
但我不能在程序中主动去调用subscriber.close(),想通过ActiveMQ的设置,让它自动把一段时间没有读消息的这些subscriber删除掉。就参照你的文章做了相同的配置。但是,我发现并没有效果。
可能是什么原因呢?


一年多没有整这个了,你使用工具查看了吗?
4 楼 coral0212 2012-12-22  
希望楼主留下一个联系方式,,其他对这个感兴趣的与我联系,我遇到问题了,扣扣158403055
3 楼 sharplog 2012-07-07  
你好,请问你用的是哪个版本的ActiveMQ? 我用5.6.0,参照你的设置了slowConsumerStrategy,但是发现没有效果,可能是什么原因呢?
我在程序里这样创建的subScriber:
this.session.createSubscriber(topic, selector, false);
但我不能在程序中主动去调用subscriber.close(),想通过ActiveMQ的设置,让它自动把一段时间没有读消息的这些subscriber删除掉。就参照你的文章做了相同的配置。但是,我发现并没有效果。
可能是什么原因呢?
2 楼 keren021 2012-01-16  
jklliang 写道
轻问
1.var connectManager:MessageConnectManager = MessageConnectManager.getInstance(); 
2.connectManager.regist(); 
3.connectManager.addEventListener(MessageConnectManager.DISCONNECT,disConnectHandler);
MessageConnectManager 这个注册和添加监听是怎样处理的?
如何才能知道页面停止推送



不好意思,最近没有上iteye; 上次附件中漏加“MessageConnectManager”这个文件了,已经补上。“如何才能知道页面停止推送”这个不明白你的意思,链接断开,应该后台就会停止向前端推送数据。
1 楼 jklliang 2011-11-22  
轻问
1.var connectManager:MessageConnectManager = MessageConnectManager.getInstance(); 
2.connectManager.regist(); 
3.connectManager.addEventListener(MessageConnectManager.DISCONNECT,disConnectHandler);
MessageConnectManager 这个注册和添加监听是怎样处理的?
如何才能知道页面停止推送

相关推荐

    Flex4.X+BlazeDS+Spring3L实战开发在线书店四

    【标题】"Flex4.X+BlazeDS+Spring3实战开发在线书店四"涉及的核心技术栈是Adobe Flex 4.6、BlazeDS、Spring 3框架以及Java相关的JPA和Hibernate,配合MySQL数据库实现一个在线书店的完整系统。下面将详细阐述这些...

    Flex4.X+BlazeDS+Spring3L实战开发在线书店二

    在本课程中,我们将深入探讨如何使用Flex 4.6、BlazeDS、Spring 3 和其他相关技术来构建一个实际的在线书店应用。Flex 4.6 是Adobe Flex框架的一个重要版本,它提供了强大的富互联网应用程序(RIA)开发工具,使...

    PureMVC+Flex+BlazeDS+Spring+Hibernate.doc

    标题中的“PureMVC+Flex+BlazeDS+Spring+Hibernate.doc”指的是一项整合了多种技术的Web应用开发方案,这些技术包括PureMVC、Flex、BlazeDS、Spring和Hibernate。这篇文档可能是指导读者如何将这些技术结合在一起...

    flex+blazeds+spring

    标题“flex+blazeds+spring”表明我们要探讨的是如何将Flex前端与BlazeDS中继层和Spring后端框架结合起来,实现完整的数据交互和应用程序逻辑。 在Flex与Spring集成的环境中,Flex作为用户界面展示层,负责与用户...

    Flex4.X+BlazeDS+Spring3L实战开发在线书店三

    《Flex4.X+BlazeDS+Spring3 实战开发在线书店》是一门深入探讨使用Adobe Flex 4.6、BlazeDS、Spring 3框架以及Java相关技术进行Web应用程序开发的课程。这门课程旨在帮助开发者掌握如何构建功能丰富的、交互性强的...

    flex+Spring+Hibernate+Cairngorm+BlazeDS+Spring BlazeDS Integration整合框架

    使用flex 4.5 + Spring 3.0 + Hibernate 3.3 + Cairngorm 2.2.1 + BlazeDS 3.3.0 + Spring BlazeDS Integration 1.0.3整合出的一个登录的小demo·

    flex4+blazeDS+spring+ibatis开发教程

    ### Flex4+BlazeDS+Spring+iBatis 开发教程详解 #### 一、富互联网应用(RIA)概念与背景 ##### RIA定义 富互联网应用(Rich Internet Application,简称RIA)是一种新兴的应用程序形式,它结合了客户端与服务器端...

    Myeclipse6.5+flex3+Blazeds+spring+hibernate完美整合

    Myeclipse6.5+flex3+Blazeds+spring+hibernate完美整合,写的非常详细

    Flex+blazeDS+Spring官方Demo,环境搭建

    Flex+blazeDS+Spring官方Demo,环境搭建,内含十几个例子,从易到难,包括spring消息,spring安全,注解方式和非注解配置文件方式,十分好用。内含有tomcat,可直接启动并运行用户手册。

    Flex+BlazeDS+Spring+Hibernate

    Flex+BlazeDS+Spring+Hibernate 是一个经典的前端与后端集成方案,广泛应用于构建富互联网应用程序(Rich Internet Applications,RIA)。在这个框架组合中,Flex 作为用户界面层,提供了丰富的交互体验;BlazeDS ...

    Flex+Gilead+BlazeDS+Spring+Hibernate Demo

    Flex+Gilead+BlazeDS+Spring+Hibernate示例Demo,使用1:n和m:n两个双向关系,很好的演示了Gilead的Hibernate Lazy Killer特性,借助Gilead可以有效规避DTO模式的大量繁琐代码。效果图展示地址:...

    spring3+ActiveMQ+blazeds+flex consumer

    本项目“spring3+ActiveMQ+blazeds+flex consumer”旨在整合一系列技术,以实现这样的功能。下面将详细阐述这些技术及其整合过程。 首先,Spring框架(Spring3)是Java领域最流行的轻量级应用框架之一,它提供了...

    Flash Builder 4 + BlazeDs + Spring + Hibernate + Cairngorm开发框架

    《Flash Builder 4 + BlazeDs + Spring + Hibernate + Cairngorm 开发框架详解》 在IT行业中,构建高效、可扩展的Web应用是一项至关重要的任务。这个开发框架组合——Flash Builder 4、BlazeDs、Spring、Hibernate...

    Flex4.X+BlazeDS+Spring3L实战开发在线书店一

    在"Flex4.X+BlazeDS+Spring3 实战开发在线书店一"这个项目中,开发者将学习如何利用这些技术构建一个功能完整的在线书店应用。Flex 4.6的Spark组件库提供了丰富的UI元素,可以设计出美观的用户界面。ActionScript ...

    Flex4+BlazeDS+Spring+Hibernate 整合源码

    在“Flex4+BlazeDS+Spring+Hibernate 整合源码”中,开发者可能实现了以下功能: 1. 使用Flex4创建前端用户界面,包括自定义组件和动画效果。 2. 通过BlazeDS配置,实现在Flex客户端与Spring服务层之间的数据双向...

    PureMVC+Flex+BlazeDS+Spring+Hibernate

    标题中的“PureMVC+Flex+BlazeDS+Spring+Hibernate”是一个常见的技术栈组合,用于构建企业级的 Rich Internet Applications (RIA)。这个技术栈包括前端开发框架、后端服务通讯、应用服务器、服务端架构和数据持久化...

    Flex+BlazeDS+Spring环境一步步搭建

    本教程将详细介绍如何一步步搭建Flex+BlazeDS+Spring的开发环境。 首先,我们需要准备以下软件: 1. **MyEclipse 6.0.1**:这是一个集成开发环境,支持Java和Flex项目的开发。你需要自行下载并安装,确保它是完整...

    跟我一步步搭建PureMVC+Flex+BlazeDS+Spring+Hibernate

    根据提供的文件信息,本文将详细介绍如何一步步搭建PureMVC+Flex+BlazeDS+Spring+Hibernate的技术栈。这个过程涉及到了多个技术领域的整合,包括前端的Flex开发、后端的Java开发以及数据库交互等多个方面。 ### 一...

Global site tag (gtag.js) - Google Analytics