`
nanjingjiangbiao_T
  • 浏览: 2597133 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

activemq 注意问题

 
阅读更多

1 使用jms需要注意的问题

一下所述的问题,不仅是对ActiveMQ,对于其他的JMS也一样有效。

1.1 不要频繁的建立和关闭连接

JMS使用长连接方式,一个程序,只要和JMS服务器保持一个连接就可以了,不要频繁的建立和关闭连接。频繁的建立和关闭连接,对程序的性能影响还是很大的。这一点和jdbc还是不太一样的。

1.2 Connection的start()和stop()方法代价很高

JMS的Connection的start()和stop()方法代价很高,不能经常调用。我们试用的时候,写了个jms的connection pool,每次将connection取出pool时调用start()方法,归还时调用stop()方法,然而后来用jprofiler发现,一般的 cpu时间都耗在了这两个方法上。

1.3 start()后才能收消息

Connection的start()方法调用后,才能收到jms消息。如果不调用这个方法,能发出消息,但是一直收不到消息。不知道其它的jms服务器也是这样。

1.4 显示关闭Session

如果忘记了最后关闭Connection或Session对象,都会导致内存泄漏。这个在我测试的时候也发现了。本来以为关闭了 Connection,由这个Connection生成的Session也会被自动关闭,结果并非如此,Session并没有关闭,导致内存泄漏。所以一定要显示的关闭Connection和Session。

1.5 对Session做对象池

对Session做对象池,而不是Connection。Session也是昂贵的对象,每次使用都新建和关闭,代价也非常高。而且后来我们发现,原来Connection是线程安全的,而Session不是,所以后来改成了对Session做对象池,而只保留一个Connection。

2 集群

ActiveMQ有强大而灵活的集群功能,但是使用起来还是会有很多陷阱。

2.1 broker cluster和 master-slave

ActiveMQ可以做broker的集群,也可以做master-slave方式的集群。前者能在多个broker之前fail-over和 load-balance,但是在某个节点出故障时,可能导致消息丢失;而后者能实时备份消息,和fail-over,但是不能load- balance。broker cluser的方式,在一个broker上发送的消息可以在其它的broker上收到。当一个broker失效时,客户端可以自动的转到别的broker 上运行,多个broker可以同时提供服务,但是消息只存储在一个broker上,如果那个broker失效了,那么客户端直到它重新启动后才能收到该 broker上的消息,假如很不幸,那个broker的存储介质坏了,那么消息就丢失掉了。
Master-slave方式中,只有master提供服务,slave只是实时的备份master的数据,所以消息不会丢失。当master失效时,slave会自动升为master,客户端会自动转到slave上工作,所以能fail-over。由于只有master提供服务,所以不能将负载分到多个broker上。
其实单个broker的性能已经是相当的惊人了,在我们公司的机器上能达到每秒收发4000个消息,没个消息4K字节这样的速度,足够公司目前的需要了,而公司并不希望丢失任何数据,所以我们选择使用master-slave模式。

2.2 多种master-slave模式

master-slave也有多种实现方式。它们的不同只是在共享数据和锁机制上。

2.2.1 Pure master-slave

Pure master-slave,显示的在配置文件中指定一个broker做为另一个broker的slave。运行时,slave同过网络自动从master 出复制数据,同时在和master失去连接时自动升级为master。当master失效,slave成为master后,如果要让原先的master重新投入运行,需要停掉运行中的slave(现在升级为master了),手动复制slave中的数据到master中。再重新启动master和 slave。这种方式最简单,效率也不错,但是只能有两台做集群,只能fail-over一次,而且需要停机回复master-slave结构。

2.2.2 JDBC master-slave

这种方式不需要特殊的配置,只要让所有的节点都把数据存储到同一个数据库中。先拿到数据库表的锁的节点成为master,一旦它失效了,其它的节点获得锁,就可以成为master。因为数据通过数据库共享,放在一个地方,不需要停机恢复master-slave。这种方式,需要额外的数据库服务器,如果数据库失效了,那么就全失效了,而且速度不是很快。我们在用mysql测试时,并没有成功,master失效后,其他的节点始终没有升级成 slave,可能是数据库配置的问题。

2.2.3 Share file master-slave

这种方式类似于前者,也不需要特别的配置,只是通过共享文件系统来共享数据,靠文件锁实现只有一台成为master。共享文件系统的方式有很多,我们测试了nfs v4 (v3有bug,不行), 最终在稳定性,效率等方面不是很满意,可能是通过网络太慢了。

测试过众多master-slave模式后发现,pure方式管理起来麻烦,jdbc方式成本高,效率低,share file方式需要高性能的共享文件,都有缺点。鉴于单台activeMQ很可靠,而我们的基础平台组愿意用硬件备份,最终还是决定不用master- slave了,也不用broker cluster,就用单台,通过硬件冗余保证数据不会丢失,并找另外一台刀片机做冷备,在主服务器失效时顶替。

分享到:
评论

相关推荐

    ActiveMQ 之Spring结合实例

    包括1、ActiveMQ java实例 2、ActiveMQ Spring结合实例 3、代码亲测,无问题。 4、资源分5分绝对值 注意:请先安装ActiveMQ 服务。

    activeMQ示例 activeMQ demo,java分布式技术

    请将本maven项目引入你自己的maven项目中(在你自己的pom.xml文件中配置这个项目的gourp和id以及版本号),通过模块化导入,注意把spring-activeMQ.xml加载到容器当中,运行tomcat启动项目,即可看到效果。

    apache-activemq-5.9.0.zip

    windows版本ActiveMQ,注意,该版本jdk1.7支持,配置好jdk后,进入解压文件\bin目录,根据系统是64位还是32位选择目录,点击activemq.bat运行即可,http://localhost:8161/admin/查看消息情况

    Maven+Spring+ActiveMQ整合

    maven spring mq整合,注意最新版的mq的jar包是集成了spring的,我用的5.11.1的。 运行之前,先要下载mq服务本地运行http://apache.fayea.com//activemq/5.14.3/apache-activemq-5.14.3-bin.zip

    apache-activemq-5.15.11-bin.zip

    windows版本ActiveMQ,注意,该版本需jdk1.8才支持,配置好jdk后,进入解压文件\bin目录,根据系统是64位还是32位选择目录,点击activemq.bat运行即可

    ActiveMQ.pdf

    整理最新的ActiveMQ笔记,消息中间件是解决的问题是能够解耦、能够削峰、能够异步处理,包含整合SpringBoot等、消息存储和持久化、多节点集群的使用、面试遇到和注意的问题等。

    ActiveMQ相关jar包--使用Connection连接池

    ActiveMQ相关jar包--使用Connection连接池,jar的版本很重要,请注意。

    activemq-中控台工程

    Apache Mq控制中心的工程,下载导入直接启动,注意JDK版本既可

    activemq优化方案

    ActiveMq运行是比较稳定的,数据的吞吐速度也很高,如果出现入队列或者出队列慢的问题,先检查一下自己的代码,是不是本身取到数据后处理过慢。 本文的关于性能优化,其实是列举出一些需要注意的点,请确保你的项目...

    第十一章 企业项目开发--消息队列activemq1

    第十一章 企业项目开发--消息队列activemq注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2)消息队列是分布式系统中实现RP C 的一

    activemq-dsls:一对用于在 Java 中使用 ActiveMQ 代理的 DSL

    注意:这些 DSL 处于 pre-alpha 的这个阶段。 验证它们的唯一测试是另一个项目的一部分。 activemq-dsl 该项目定义了一个模仿 Apache Camel 的 Java DSL 概念的 DSL。 这个想法是它允许使用反映 ActiveMQ 的 XML ...

    ActiveMQ从入门到精通(三)

    话不多说,先来看一张ActiveMQ官方提供的架构图:Zookeeper+ActiveMQMaster/Slavebroker的信息要注册到ZK注意到只有Master对外提供了服务,Slave是待机状态。当Master出现故障,ZK内部的选举机制,会让一个Slave升级...

    activemq-artemis-operator:用于Kubernetes的ActiveMQ Artemis运营商(正在进行中)

    ActiveMQ Artemis运营商 概述 此ActiveMQ Artemis运算符是使用工具和... 注意:本指南使用版本v0.25.0 +作为本地kubernetes集群,并使用quay.io作为公共注册表。 安装Operator SDK CLI 首先,签出并安装operator-sdk

    ActiveMQ消息的消费原理

    本文来自于cnblogs,文章主要案例为主来介绍ActiveMQ消息的消费原理,从方法到过程以及方案等方面详细介绍。这里说了两种方法,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法。另...

    php ActiveMQ的安装与使用方法图文教程

    主要介绍了php ActiveMQ的安装与使用方法,结合图文与实例形式分析了ActiveMQ的功能、安装、使用方法及操作注意事项,需要的朋友可以参考下

    activeMQCockpit:activeMQ Web控制台的替代方法

    请注意,您需要在开始页面上设置要连接的代理名称和jmx端口。 两者都必须与本地安装的activemq.xml文件中的管理上下文中定义的设置匹配。 当前包括以下视图: 经纪人详细资料队列和主题,都带有过滤器队列和主题...

    PHP使用ActiveMQ实现消息队列的方法详解

    主要介绍了PHP使用ActiveMQ实现消息队列的方法,结合实例形式详细分析了PHP使用ActiveMQ实现消息队列具体步骤、相关操作技巧与注意事项,需要的朋友可以参考下

    工具使用篇——python操作ActiveMq

    准备 1、python需要安装stomp,stomp包的安装比较麻烦...注意: 一般用python是通过stomp协议进行通讯 操作过程 1、生产方 prublishi.py import time import sys import os import stomp import time import sys import

Global site tag (gtag.js) - Google Analytics