ActiveMQ测试报告

ActiveMQ测试报告
ActiveMQ测试报告

ActiveMQ测试报告

1、安装和配置

1、下载amq5.2

https://www.360docs.net/doc/e510972161.html,/~gtully/staging-repos/activemq-5.2.0/org/apach e/activemq/apache-activemq/5.2.0/apache-activemq-5.2.0-bin.tar.gz

tar zxvf

amq的目录结构:

conf:配置文件activemq.xm,log配置文件log4j.properties,运行日志文件activemq.log,安全keystore文件,密码文件credentials.properties等

bin:command line tools,包括activemq和activemq-admin,主要使用工具为activemq-admin,使用命令行工具需要jmx支持。

data:kaha的缺省数据存储存储目录,可以在activemq.xml中配置。

example:一些demo

webapps:activemq提供的一个web管理界面应用程序

lib:一些jar包

我们主要使用文件和命令集中在conf和bin中,考虑到测试中需要经常修改配置,应该将conf和data等用户数据配置在activemq的安装目录外部,activemq可以使用命令行使用指定的配置文件,例如:

bin/activemq xbean:file:cluster/conf/activemq.xml

kaha存储目录是配置在activemq.xml文件中。

2、基本配置

activemq每个实例称为一个broker,broker的配置包括包括broker属性,desitination,connector,存储配置和安全配置,这些配置对server的功能和性能和很大影响,也是我们重点测试和观察的对象,安全配置在下一节单独说明。

broker属性配置:

缺省情况下在xml配置文件中配置:

也可以直接写在url中,使用命令行直接启动:

activemq broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true

我们是配置在xml配置文件中,其中jmx配置后面还有专门描述。

desitination配置:

我们目前只使用queue,没有使用topic,所以只有queue policy的设置。activemq可以针对每个queue进行单独设置,这里“>”是通配符,表示所有queue,具体到生产环境中,需要针对每个queue进行设置。

这里memoryLimit="100mb"表示queue的内存限制为100M,producerFlowControl="false"表示关闭流量控制,如果不关闭流量控制,在消息量发生累积时,amq会主动控制流量,减少消息的生产。

在生成环境中需要对访问进行密码保护,具体设置如下:

1、broker属性useJmx设置为“true”。

2、,阻止amq创建缺省jmx连接。

3、在配置目录下创建jmx.access和jmx.password文件,都是key/value对,前者指定角色的

访问权限,有read ,write,readwrite等,后者指定角色的密码,如zgl=abc。这里注意jmx.password访问权限需要设置为用户只读,否则会有Error。

4、修改bin/activemq脚本中SUNJMX选项,修改为SUNJMX="-Dcom.sun.management.jmxremote.port=1616

-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/conf/jmx.password -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/conf/jmx.access"

具体参考https://www.360docs.net/doc/e510972161.html,/jmx.html。

NetworkConnectors配置:

NetworkConnectors是amq用来配置集群,是集群之间的节点相互发现的一种策略,在同一

集群中的消息可以进行负载均衡,有就是说一个节点在没有消费者时会将累积消息forward 到另外一台较为空闲的节点上(看起来很美,但是据我们测试发现效果差强人意啊). Network连接有两种方法,一种是使用multicast,同一集群的节点都配置同一个多播地址,节点之间直接通过多播消息互相发现并建立连接。

另外一种是使用静态IP地址指定需要连接的机器,通过相互指定ip来达到进来相互连接的目的,如果有4个节点,如下图,这时候每个节点需要在uri中指定另外3个节点的ip地址,如core1的uri可能是static://(tcp://core2:61616, tcp://core3:61616, tcp://core4:61616),其余类推。

因为我们网络配置的问题,多播可能会有问题(具体见论坛中校长的一个jgroup的故障分析),所以我们测试的集群采用静态ip的方法。

一个复杂的例子:

具体参考https://www.360docs.net/doc/e510972161.html,/networks-of-brokers.html

存储配置:

amq 可以使用文件系统或者数据库存储累积的消息,文件系统存储使用的是其自有的kaha 存储系统,数据库可以使用内嵌的Derby ,也可以使用mysql 、oracle 或者pg ,只要在xml 配置文件中配置正确的数据库就可以了

kaha 文件系统实际上上是一个文件索引系统,有两部分组成,一个是数据文件系统,由一个个独立的文件组成,缺省文件大小是32M 大(可配置),另外一个是索引文件系统,记录消息在数据文件中的位置信息以及数据文件中的空闲块信息。数据文件是存储到硬盘上的,索引文件是缓存在内存中的。所以这个存储系统对大消息存储有利,象我们的memberId 之类的文本消息,实际上是浪费,索引比消息还大,哈。具体参考:https://www.360docs.net/doc/e510972161.html,/amq-message-store.html

数据库存储系统是使用jdbc 连接数据库存储消息,amq 只要配置数据源就可以了。数据库存储配置有两种,一种是使用amq 自身的高性能的journey 日志来记录消息日志,另外一种是完全由数据库系统保存消息包括日志,但是性能较低。

如果使用jdbc 存储,数据源

配置:

因为jdbc性能较差,大概和kaha相比吞吐量相差一个数量级,所以我们使用kaha存储,实际配置:

具体参考:https://www.360docs.net/doc/e510972161.html,/amq-message-store.html

SystemUsage配置:

SystemUsage配置设置了一些系统内存和硬盘容量,当系统消耗超过这些容量设置时,amq 会“slow down producer”,还是很重要的。

TransportConnector 配置:

这里配置broker 的监听端口,客户端和其它的broker 都通过这个端口连接到这个broker 上。这里设置broker 的监听地址和端口,需要注意的是,如果使用static uri 配置cluster ,不需

要配置discoveryUri ,另外也可以使用nio 协议。

具体参考:https://www.360docs.net/doc/e510972161.html,/configuring-transports.html

Jetty 配置:

配置一个jetty 服务器,提供web 形式的管理界面,生产环境中需要禁止。安全配置:

具体参考:https://www.360docs.net/doc/e510972161.html,/security.html

常用命令:

启动:bin/activemq xbean:file:cluster/conf/amq1.xml

停止:bin/activemq-admin stop --jmxurl service:jmx:rmi:///jndi/rmi://core3:1616/jmxrmi --jmxuser monitor --jmxpassword 1234 查询:bin/activemq-admin query –QQueue=”test*” --jmxurl service:jmx:rmi:///jndi/rmi://core3:1616/jmxrmi --jmxuser monitor

--jmxpassword 1234

bin/activemq-admin query --objname Type=Connect,BrokerName=amq* --jmxurl service:jmx:rmi:///jndi/rmi://core3:1616/jmxrmi --jmxuser monitor --jmxpassword 1234

具体参考:https://www.360docs.net/doc/e510972161.html,/activemq-command-line-tools-reference.html

2、单机测试

测试机器:core6,8个cpu ,amq 启动内存为1024M 启动和停机测试

1)正常启动在1分钟之内2)消息累积时启动

如果不设置forceRecoverReferenceStore ,recoverReferenceStore ,即使是正常开关机器,100W 消息以上也需要将近半个小时,设置这两个选项后,20W 数据重启大概在1分钟以内,100W 在3分钟之内,200W 需要约10分钟。

这里需要说明的是,恢复时间主要消耗在kaha 上,如果使用jdbc 存储,所有恢复时间都在1分钟之内。

3)amq 停机速度很快,基本没有出现过需要强制kill 的情况。

消息发送测试消息大小为2000字符Jvm 参数默认配置

一个Producer 与一个Broker 独立在不同的机器. 不同参数和消息数量对吞吐

量的影响

A.DeliveryMode=PERSISTENT

useAsyncSend= false

发送消息总量100W

速度保持在3200条/s左右,

发送速度比较平稳

Jconsole过程图

B.DeliveryMode=PERSISTENT

useAsyncSend= true时(broker挂机时会出现消息丢失),速度保持在4100条/s左右,

发送消息总量100W,

发送速度比较平稳。

C.DeliveryMode=PERSISTENT

useAsyncSend= false时,

发送消息总量400W,

发送完100W时平均速度3245条/s,

发送完200W时平均速度2689条/s,

发送完300W时平均速度2512条/s,

发送完350W时平均速度2064条/s,

发送完400W时平均速度1254条/s,

可以看出在使用AMQ Message Store持久化消息时,消息堆积对producer对发送速度又很大影响。

D.DeliveryMode= NON_PERSISTENT(不做消息持久化)

发送消息总量100W,

发送速度比较平稳,

速度10000条/s以上(client和broker同一台机器可达20000以上)

DeliveryMode=PERSISTENT

useAsyncSend= false

2个producer,分别在不同的机器,发送消息量每个为100W,总量200W

Top 的load average在5左右,最高时上到7.5。

2个producer在同一时段,发送速度基本一致。

发送速度比较不平稳。

发送完总量10W时每个producer平均速度1964条/s,总的平均速度为3928条/s 发送完总量50W时每个producer平均速度1852条/s,总的平均速度为3704条/s 发送完总量80W时每个producer平均速度1387条/s, 总的平均速度为2774条/s 发送完总量100W时每个producer发送速度为1288条/s,总的平均速度为2576条/ s

E.DeliveryMode=PERSISTENT

useAsyncSend= false

没有consumer,

有4个producer,在2台机器上,每台机器有2个produer,每个producer同时发送50W,消息总量有200W。

发送速度不太稳定。

发送完总量10W时总的平均速度为4000条/s左右,

发送完总量50W时总的平均速度为3680条/s左右,

发送完总量80W时总的平均速度为3552条/s左右,

发送完总量100W时总的平均速度为3400条/s左右,

发送完总量200W时总的平均速度为2500条/s左右,

load average 最高达到10.07

F.DeliveryMode=PERSISTENT

useAsyncSend= false

没有consumer,

有8个producer,在2台机器上,每台机器有4个produer,每个producer同时发送25W,消息总量有200W。

发送速度不太稳定。

发送完总量10W时总的平均速度为4000条/s左右,

发送完总量50W时总的平均速度为3450条/s左右,

发送完总量80W时总的平均速度为3400条/s左右,

发送完总量100W时总的平均速度为3300条/s左右,

发送完总量200W时总的平均速度为2200条/s左右.

load average 最高达到7.5

G.DeliveryMode=PERSISTENT

useAsyncSend= false

没有consumer,

有20个producer,在2台机器上,每台机器有10个produer,每个producer同时发送10W,消息总量有200W。

发送速度相对稳定。

发送完总量50W时总的平均速度为3400条/s左右,

发送完总量80W时总的平均速度为3500条/s左右,

发送完总量100W时总的平均速度为3400条/s左右,

发送完总量160W时总的平均速度为3100条/s左右,

发送完总量200W时总的平均速度为2200条/s左右.

H.DeliveryMode=PERSISTENT

useAsyncSend= false

没有consumer,

有40个producer,在2台机器上,每台机器有20个produer,每个producer同时发送5W,消息总量有200W。

发送速度相对稳定。

发送完总量10W时总的平均速度为4000条/s左右,

发送完总量50W时总的平均速度为3800条/s左右,

发送完总量80W时总的平均速度为3800条/s左右,

发送完总量100W时总的平均速度为3800条/s左右,

发送完总量160W时总的平均速度为3500条/s左右,

发送完总量200W时总的平均速度为2700条/s左右.

I.DeliveryMode=PERSISTENT

useAsyncSend= false

没有consumer,

有40个producer,在2台机器上,每台机器有40个produer,每个producer同时发送2.5W,消息总量有200W。

发送速度相对稳定。

发送完总量50W时总的平均速度为3800条/s左右,

发送完总量80W时总的平均速度为3950条/s左右,

发送完总量100W时总的平均速度为3950条/s左右,

发送完总量160W时总的平均速度为3300条/s左右,

发送完总量200W时总的平均速度为2300条/s左右.

load average最高值9.28

分析:

1)消息是否persist对吞吐量影响很大。

2)随着消息累积数的增加,吞吐量逐步下降,但是最终会稳定在2000/s左右。

3)随着累积数量的增加,系统load会大幅度增加。

连接数不同对吞吐量的影响

测试方法:

采用不同连接数发送32w消息的平均速度和服务器load,每次发送前都清空队列,保证没

分析:

4)连接数并非越多越好,在4~16个连接时可以达到最大吞吐量,太大或者太小都会影响

速度。

5)大尺寸消息对速度影响非常大,在2000B以下区间,性能影响较小,我们目前的消息

基本集中在这个区间。

6)大尺寸消息会大大增加服务器load,而连接数对服务器load影响较小,由此可以说明

amq的主要性能瓶颈在io部分,cpu操作并不密集。

测试中发现问题:

1)发送32w消息,但是有事会发现队列中消息数量多于32W,大概误差在3~7个之间,

需要进一步确认是否是amq统计错误还是真正产生重复消息。

2)每次kaha存储的hash bin调整会完全阻塞amq,长达几秒不能响应,但是因为这个值

是动态调整,单纯增长这个值并不能完全解决这个问题,需要进一步寻找解决办法。

消息接收测试

连接数对吞吐量的影响:

测试方法:

采用不同连接数发送16w消息的平均速度和服务器load,每次发送前都清空队列,保证没有消息累积。

分析:

1)消费时连接数较小时速度较高。

2)同样,消息20k大小时load很高,说明kaha性能还是整体瓶颈。

3)kaha在清理文件存储时会锁定,导致短期的服务停止,可以设置

amqPersistenceAdapter 的 cleanupInterval时间控制,缺省是30s,可以设置为10分钟。

同时发送和接收测试

A.Producer、Broker、consumer独立在不同的机器

1个producer发送消息总量100W ,5个consumer

发送3058条/s左右,

发送速度比较平稳。

由于consumer接收消息没有复杂处理,所以broker没有任何消息堆积。

B.Producer、Broker、consumer独立在不同的机器,

消息总量不限制,

30个producer,60个consumer,

跑了一个晚上出现内存泄漏

C.Producer、Broker、consumer独立在不同的机器,消息总量300W,50个

producer,100个consumer,

消息堆积量对producer的影响:

100w消息堆积时,load average: 3.39, 3.90, 3.86,当时的发送速度比较平衡,3300

条/s左右,

150W消息堆积时,系统load average: 8.32, 8.09, 6.16, 当时的发送速度3000条/s左

右,

200w消息堆积时,系统load average下降到5左右,当时的发送速度只有800条/s

左右,

300w消息堆积时,系统load average下降到4左右,当时的发送速度只有150条/s

左右,

消息堆积量对consumer的影响:

如果在没有producer情况下,300w消息堆积时,系统load average在4左右,当

时的分发速度1000条/s左右。

如果有producer也在发送的情况,300w消息堆积时出现producer与consumer抢

占IO的使用,所以出现producer高时consumer低或producer低时consumer高,

但两者相加不会超过1000,但在50w消息堆积时,两者相加有较好的表现,能达

到2000-2500。在少量的消息堆积(5W以内)时,两者相加能达到5000以上。在此看

来,消息堆积数量对吞吐能力有比较大的影响。

D.Producer、Broker、consumer独立在不同的机器,

消息总量300W,

使用64位的JDK和新的JVM配置参数,

50个producer,100个consumer,

消息堆积量对producer的影响:

100w消息堆积时,load average: 3.39, 3.90, 3.86,当时的发送速度比较平衡,3800

条/s左右,

150W消息堆积时,系统load average: 8.32, 8.09, 6.16, 当时的发送速度3200条/s左

右,

200w消息堆积时,系统load average下降到5左右,当时的发送速度只有1300条/

s左右,

300w消息堆积时,系统load average下降到4左右,当时的发送速度只有200条/s

左右。

问题:

1)单纯在压力测试下,很难达到一个消费和生产的平衡,不是说有一个简单的生产/消费

的一个连接数比例可以达到不累积的效果。

2)在压力测试下,消费速度大大小于生成速度,很容易产生消息累积,分析后认为主要

是io吞吐量基本一定的情况下,而生产者好像有一定优先。(?)

3)消费端被阻塞的频率和时间都远大于生产端,分析可能是消费端更容易产生kaha文件

碎片,收空间收集线程的影响更大。

4)生产环境下应该打开流量控制开关,以避免生成端占用大部分io能力,阻塞消费端

的情况。

消息正确性和完整性测试

测试方法:

发送端对消息进行编号并进行md5编码,接受端使用md5校验消息正确性,另外对使用hashmap校验是否有消息重复。

测试结果:

1、md5校验完全正确,说明消息正确性可以保证。

2、在1个consumer时,没有重复消息产生,在多个consumer时,有重复消息产生,而且

重复数量和连接数有线形关系,可以断定amq在消费时有线程问题,会参数重复消息。

3、集群测试

因为amq集群稳定性很差,所以没有产生有效的数据,在测试过程中可以观察到以下几个问题:

1)M/S和Network集群都会频繁产生节点同步异常,amq集群实现方式目前还不是

很稳定。

2)在M/S和Network集群情况下,吞吐量都会下降到单节点配置的1/2和1/3,应该

是节点间状态同步和消息复制的开销。

3)节点间的负载均衡坐的还是不够,经常会发现单一节点连接过多或者消息过多累

积的情况。

4、测试结论

1)连接数对性能影响较小,主要影响因素为io,在每个连接发送或者接收频率较低

的情况下,amq可以支持更多的连接数,另外,每新增一个连接,amq需要增加

两个线程处理。nio协议在5.2中还不够稳定,对减低系统负载的作用也不够明显。

2)超过10K的大消息对吞吐量和服务器load都影响很大,但是对大消息可以使用

amq的流协议处理,这次没有测试。对我们系统中的消息基本都不会超过2k,这

种情况下性能差别不是很大。

3)数据存储配置,jdbc的性能远比kaha低,jdbc单节点流量大概是500~600条,

kaha单节点处理可达4000~5000,相差一个数量级,但是jdbc的稳定性很好,发

送和接收非常稳定,kaha只因为文件存储的原因,当文件存储hash bin扩展或者

文件碎片管理的时候经常会全部阻塞,导致短时间(1s~几秒)不可访问。

4)生产端流量控制还是有必要的,避免高峰时阻塞消费。(?)

5)高级特性(Master/Slave,Networkconnector,Virtual Destination,Composite

Destination)等5.2都还不够稳定,目前建议部署为客户端负载均衡,类似

memcached的部署方式,这样也可以屏蔽mq,做到mq无关,另外这样性能也最

好,基本可以做到线形扩充。

6)目前主要问题为消息重复消费问题,需要定位问题代码所在。具体表现为消息丢失

(发现过1、2次),消费数多于发送数,消息可能有重复消费。(注:这个问题提

交到amq后,答复在5.3已经解决,在5.2上关闭cache后也可以避免这个,useCache=false,经过测试,5.2上使用这个选项后问题解决,性能有所下降但是

并不严重,在10%以内)。

7)每一个producer或consumer连接,broker会产生2个线程来提供服务,看来过多

Apache ActiveMQ技术讲解文档

Apache ActiveMQ技术文档 说明:本文档在我们最大努力范围之内确保其正确性、实效性和可观性,但并不代表所有的观点都是正确的,而仅代表个人看法。如发现不当之处,请多指教,谢谢! 联系方式: 1、技术概述 JMS是指java消息服务(Java Message Service) 应用程序接口是一个java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。 ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范,是消息驱动中间软件,为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议,因此任何人都可以使用和修改它而不必反馈任何改变。ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。ActiveMQ实现JMS规范并在此之上提供大量额外的特性。 2、A ctiveMQ特性 1.遵循JMS规范:包括同步和异步消息传递,对于预订者的持久消息等等。依附于JMS 意味着不论JMS消息提供者是谁,同样的基本特性都是有效的 2.连接:ActiveMQ提供各种连接选择,包括HTTP、HTTPS、IP多点传送,SSL,STOMP,TCP,UDP,XMPP等。大量的连接协议支持使之具有更好的灵活性。很多现有的系统使用一种特定协议并且不能改变,所以一个支持多种协议的消息平台降低了使用的门槛。 3.可插拔的持久性和安全:ActivemQ提供多种持久性方案可供选择,也可以完全按自己需求定制验证和授权。 4.用java建立消息驱动应用:ActiveMQ最常用在java应用中,用于发送和接收消息。 5.与应用服务器集成:ActiveMQ与java应用服务器集成是很常见的。 6.客户端APIs:ActiveMQ对多种语言提供客户端API,除了Java之外还有C/C++,.NET,Perl,PHP,Python,Ruby等。这使得ActiveMQ能用在Java之外的其它语言中。很多其它语言都可以通过ActiveMQ提供的客户端API使用ActiveMQ的全部特性。当然,ActiveMQ 代理器(broker)仍然是运行在java虚拟机上,但是客户端能够使用其它的被支持的语言。 7.代理器集群(Broker clustering):为了利于扩展,多个ActiveMQ broker能够联合工作。这个方式就是network of brokers并且能支持多种拓扑结构。 8.高级代理器特性和客户端选项:ActiveMQ为代理器和客户端连接提供很多高级的特性。ActiveMQ也可以通过代理器的XML配置文件支持Apache Camel。 9.简单的管理:ActiveMQ是为开发者设计的。它并不需要专门的管理工具,因为它提

ActiveMQ实践入门指南

ActiveMQ 实践入门指南

ActiveMQ 实践入门指南
ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 JMS 规范出台已经是很久的 事情了,但是 JMS 在当今的 J2EE 应用中间仍然扮演着特殊的地位。下面我们将分四部分来 介绍 ActiveMQ 的相关内容。
ActiveMQ 实践:松耦合和 ActiveMQ
回到 2003 年,一群开源开发者聚在一起组成了 Apache Geronimo。他们发现没有一个 很好的使用 BSD 风格许可证的消息中间件可用。因为 Geronimo 需要一个 JMS 实现 J2EE 兼 容性,所以一些开发者开始探讨这种可能性。
? ActiveMQ 实践:松耦合和 ActiveMQ
ActiveMQ 实践:特性列表和安装
这一部分,我们将介绍 ActiveMQ 的特性列表和如何进行安装和如何对其进行测试。
? ActiveMQ 实践:特性列表和安装
ActiveMQ 实践:使用场景
在系统架构中,有很多场景 ActiveMQ 和异步消息都会产生深远的影响。这部分中, 我们将介绍一些使用 ActiveMQ 的场景实例。
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 2 of 19

? ActiveMQ 实践:使用场景
ActiveMQ 实践:ActiveMQ 使用入门
开始使用 ActiveMQ 并不是很难,你只需要启动代理,确保它能够接受连接和发送消 息。这部分中,我们将介绍如何开始使用 ActiveMQ。
? ActiveMQ 实践:ActiveMQ 使用入门
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 3 of 19

ActiveMQ面试题及答案

ActiveMQ面试题及答案 1、什么是ActiveMQ? activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 2、Activemq的瓶颈值 根据网上一般评测文档上来看,每秒的消息吞吐在2000以上, acticemq 也可以集群化部署,也是使用zookeeper来搭建。 3、ActiveMQ服务器宕机怎么办? 这得从ActiveMQ的储存机制说起。在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的节点中配置。 但是,在非持久化消息堆积到一定程度,内存告急的时候,ActiveMQ会将内存中的非持久化消息写入临时文件中,以腾出内存。虽然都保存到了文件里,但它和持久化消息的区别是,重启后持久化消息会从文件中恢复,非持久化的临时文件会直接删除。 那如果文件增大到达了配置中的最大限制的时候会发生什么?我做了以下实验: 设置2G左右的持久化文件限制,大量生产持久化消息直到文件达到最大限制,此时生产者阻塞,但消费者可正常连接并消费消息,等消息消费掉一部分,文件删除又腾出空间之后,生产者又可继续发送消息,服务自动恢复正常。 设置2G左右的临时文件限制,大量生产非持久化消息并写入临时文件,在达到最大限制时,生产者阻塞,消费者可正常连接但不能消费消息,或者原本慢速消费的消费者,消费突然停止。整个系统可连接,但是无法提供服务,就这样挂了。 具体原因不详,解决方案:尽量不要用非持久化消息,非要用的话,将临时文件限制尽可能的调大。 4、AcitveMQ的作用、原理?(生产者、消费者。p2p、订阅实现流程) Activemq的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用Activemq的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给activemq。Activemq 接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中生产者无需参与。消费者接收到消息后做相应的处理和生产者没有任何关系 5、activemq在项目中如何应用的

ActiveMQ配置参考手册

ActiveMQ配置参考手册1ActiveMQ Server端配置 1.1 设置Broker名字 修改%activemq%/conf/activemq.xml文件 1.2设置persistenceAdapter 修改%activemq%/conf/activemq.xml文件 1.3 设置destinationPolicy 打开%activemq%/conf/activemq.xml文件,添加如下红色配置属性:

1.4设置networkConnectors 修改%activemq%/conf/activemq.xml文件 1.5 设置transportConnectors 修改%activemq%/conf/activemq.xml文件

2ActiveMQ Client端连接配置 目前Client端使用Failover协议组合TCP协议的方式连接broker,示例如下: 可以看到,tcp协议和failover协议分别支持一些不同的连接配置参数。如示例URL中的soTimeout和randomize。 下面就TCP协议和Failover协议的连接配置参数分别进行详细介绍。 2.1TCP连接参数配置 2.1.1The TCP Transport Options

2.1.2The OpenWire Wire Format Options OpenWire is the default Wire Format that ActiveMQ uses. It provides a highly efficent binary format for high speed messaging. OpenWire options can be configured on a JMS client's

activemq master-slave集群安装文档

ActiveMQ master slave集群安装手册1.简介 在一个网络内运行多个brokers或者stand alone brokers时存在一个问题,这就是消息在物理上只被一个broker持有,因此当某个broker失效,那么你只能等待直到它重启后,这个broker上的消息才能够被继续发送(如果没有设置持久化,那么在这种情况下,消息将会丢失)。Master Slave 背后的想法是,消息被复制到slave broker,因此即使master broker遇到了像硬件故障之类的错误,你也可以立即切换到slave broker而不丢失任何消息。 Master Slave是目前ActiveMQ推荐的高可靠性和容错的解决方案。主要有Pure Master Slave、Shared File System Master Slave、JDBC Master Slave三种。Master Broker和Slave Broker可以部署在同一台机器上,也不可部署在不同的机器上。本文档介绍JDBC Master Slave的安装和验证步骤,为了保证高可用性Master Broker和Slave Broker部署在不用的服务器上。Master Broker和Slave Broker的配置基本一致,谁先启动获得数据库的锁谁就是Master Broker。

2.安装前准备 安装环境 操作系统:Red Hat Enterprise Linux 5 JDK版本:JRockit JDK 1.5.0_12-b04 activemq版本:apache-activemq-5.4.2 数据库:oracle 10 服务器:需要两台服务器。文档中以HOST01和HOST02标示这两台服务器软件准备 1.安装JDK,并设置JAVA_HOME、PATH等环境变量。使用java –version验证 java安装和环境变量设置 2.下载apache-activemq-5.4.2,下载地址为: https://www.360docs.net/doc/e510972161.html,/dyn/closer.cgi?path=%2Factivemq%2Fapache-active mq%2F5.4.2%2Factivemq-parent-5.4.2-source-release.tar.gz 3.准备oracle 10的JDBC驱动程序ojdbc1 4.jar 3.安装步骤 Master broker的安装 将Master broker安装在HOST01主机上,以下步骤均在HOST01主机上进行1.将apache-activemq-5.4.2-bin.tar.gz和ojdbc14.jar上传到linux下active的 安装目录。后续以$ACTIVEMQ_WORK_DIR代表active的安装目录 2.在$ACTIVEMQ_WORK_DIR目录下解压缩apache-activemq-5.4.2-bin.tar.gz文件, 解压缩后activeMQ相关文件放在$ACTIVEMQ_WORK_DIR/apache-activemq-5.4.2目录下

apache简介

apache简介 Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache 的特点是简单、速度快、性能稳定,并可做代理服务器来使用。 本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache 有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如https://www.360docs.net/doc/e510972161.html,、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。 Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。 Apache web服务器软件拥有以下特性: 支持最新的HTTP/1.1通信协议 拥有简单而强有力的基于文件的配置过程 支持通用网关接口 支持基于IP和基于域名的虚拟主机 支持多种方式的HTTP认证 集成Perl处理模块 集成代理服务器模块 支持实时监视服务器状态和定制服务器日志 支持服务器端包含指令(SSI) 支持安全Socket层(SSL) 提供用户会话过程的跟踪 支持FastCGI 通过第三方模块可以支持Java Servlets 如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。 Apache有名的几个项目介绍 HTTP Server 这个在前面的段落介绍过了,Apache已经是他的代号了 ActiveMQ 免费开源由java编写符合JMS1.1标准的消息中间件。 另外,它也支持通过除java语言外的语言的使用 Ant

RocketMq消息队列实施方案-完整版

消息队列实施方案 1、背景 异步解耦合、给前端系统提供最高效的反应 2、常见消息队列对比 2、1 ActiveMq ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现 优点: Java语言 支持集群模式 缺点: 性能在消息中间件中处于下游 2、2 Rabbitmq Rabbitmq是基于AMQP使用erlang语言实现的消息队列系统 优点: 1、完整的消息队列系统,支持多种消息队列模式,包括竞争消费; 2、支持集群模式,扩展集群容量和性能比较方便,集成了集群的监控和管理; 3、支持消息的持久化; 缺点: 1、需要学习比较复杂的接口和协议,比较耗费时间; 2、性能不是特别理想大概在1wqps左右; 3、使用Erlang语言,语言基础; 2、3 Kafka Kafka 是LinkedIn 开发的一个高性能、分布式的消息发布订阅系统。 优点: 1、分布式集群可以透明的扩展,增加新的服务器进集群。 2、高性能。单机写入TPS约在百万条/秒 3、容错。数据都会复制到几台服务器上。 缺点: 1、复杂性。Kafka需要zookeeper 集群的支持,T opic通常需要人工来创建,部署和维护较一般消息队列成本更高

定位于日志传输、存在消息丢失的肯能、消息乱序 3、消息发送错误无重试 2、4 RocketMQ RockerMq 是阿里公司中间件团队参考Kafka思想,用Java语言实现的消息传输系统 优点: 1、较高性能,单机写入TPS单实例约7万条/秒 2、容错,多种集群模式、可以解决容错问题 3、消息重试发送 4、顺序消息可以严格执行 缺点: 1、消息重复、消费端需要做去重操作 2、5 选用结论 从项目业务与团队技术偏向考虑,我们应该需要一种数据安全性比较高,保证每个消息都会被执行;有容错机制、支持集群模式高可用;性能不错,可以在毫秒级处理消息;支持顺序消息的消息中间件,RockerMq 可以满足这些要求。 3、RockerMq简介 3、1 RockerMq 产品介绍 参考阿里公司提供的《RocketMQ 开发指南》,最新版针对v3.2.4 3、2 RockerMq集群 3、2、1 部署方式 Rockermq共有四种部署方式,分别是: 1、单个Master 一旦Broker 重启或者宕机时,会导致整个服务不可用 2、多Master 模式 一个集群无Slave,全是Master,例如2 个Master 戒者3 个Master 优点: 1、配置简单, 2、容错,单个Master 宕机或重启维护对应用无影响,在磁盘配置为RAID10 时,即使机器宕机不可恢复情况下,由于RAID10 磁盘非常可靠,在同步刷盘时消息不会丢,异步刷盘丢失少量消息, 3、性能最高。

java项目经理自我介绍

java项目经理自我介绍 在面试时Java项目经理岗位时,我们会面对形形色色的问题,而最令人哑口无言的,往往是一些最简单和最常见的题目,比如"请你自我介绍一下"。大多数应征者的反应是--我应该如何作答呢?以下是小编为你整理的java项目经理自我介绍,希望大家喜欢。 java项目经理自我介绍篇1 尊敬的XX领导: 您好! 我是20XX年毕业于XX计算机科学技术专业的学生。昨天晚上,在贵公司的官方网站上看到公司在招聘手机软件开发工程师这一职位,于是我写了这封求职信,希望贵公司能给我一次工作的机会。 大学四年时间,我主要学习的是关于C语言、C++、JAVA等编程书籍以及软件,熟悉JAVA的Struts框架。曾经在某电子科技公司完成了手机刷卡器的开发工作,主要完成了注册、应用等一系列流程。

随着触摸屏手机的普及,苹果、三星、HTC手机越来越流行。手机应用开发越来越手欢迎,很多手机游戏、应用造就了一大批软件开发公司的出现。至于为什么读这个专业呢,就是因为这些手机游戏与应用吸引了我,所以大学四年,我一直钻研手机的软件开发,最自豪的是,曾经开发过一款手机游戏,一个月的下载量达到几十万。而正是如此,因为自己所做的东西,受到了别人的肯定,一直鼓励着喔,不断开发新的吸引人的软件。 最后,希望经理看完的这封求职信后能给我一次学习的机会,到贵公司工作,继续满足我这份为自己理想奋斗的心。 java项目经理自我介绍篇2 有三年以上项目经理经验,技术与管理能力俱佳。在JAVA/J2EE方面有深厚的经验,包括javascript, Ajax, jsp, Servlet, JDBC, JSTL, JAVA MAIL and JMS等。在以下主流框架上有深厚的经验,包括Struts,Spring,Hibernate,iBatis,FLEX,另外也熟悉ExtJS。对WEB服务器Tomcat有深厚的经验。对数据库MySQL有深厚的经验,另外也熟悉Oracle。熟悉Windows,Linux操作系统。 在xx公司任职期间,于20xx.12-20xx.06期间带领研发团队进行了人才测评系统的项目研发工作。在xx公司时,于 20xx.02-20xx.09期间带领研发团队进行了Panta FX的项目研发工作,但由于当时日方consulting人员的调研不足,使得我方在系统架构设计方面存在了缺陷,最终导致在性能测试上没有达到客

ActiveMQ in Action_中文

1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范。 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。 1.1.2 连接 JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。 1.1.3 会话 JMS Session是生产和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息 (message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。 1.1.4 目的地 目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。JMS1.0.2规范中定义了两种消息传递域:点对点 (PTP)消息传递域和发布/订阅消息传递域。 点对点消息传递域的特点如下: 每个消息只能有一个消费者。 消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。 发布/订阅消息传递域的特点如下: 每个消息可以有多个消费者。

生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。 在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。 1.1.5 消息生产者 消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。 1.1.6 消息消费者 消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。消息的消费可以采用以下两种方法之一: 同步消费。通过调用 消费者的receive方法从目的地中显式提取消息。 receive方法可以一直阻塞到消息到达。 异步消费。客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。 1.1.7 消息 JMS消息由以下三部分组成: 消息头。每个消息头字段都有相应的getter和setter方法。 消息属性。如果需要除消息头字段以外的值,那么可以使用消息属性。 消息体。JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和 ObjectMessage。 1.2 JMS的可靠性机制 1.2.1 确认 JMS消息只有在被确认之后,才认为已经被成功地消费了。消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。 在事务性会话中,当一个事务被提交的时候,确认自动发生。在非事务性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement mode)。该参数有以下三个可选值:

ActiveMQ部署方案分析对比-精选版-精心整理

ActiveMQ集群部署方式对比

构建高可用的ActiveMQ系统在生产环境中是非常重要的,单点的ActiveMQ作为企业应用无法满足高可用和集群的需求,所以ActiveMQ提供了master-slave、broker cluster等多种部署方式,但通过分析多种部署方式之后我认为需要将两种部署方式相结合才能满足我们公司分布式和高可用的需求。 自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Pure Master Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。 1、Master-Slave部署方式 1)、Shared Filesystem Master-Slave方式 2)、Shared Database Master-Slave方式 3)、Replicated LevelDB Store方式 第一种方案同样支持N个AMQ实例组网,但由于他是基于kahadb存储策略,亦可以部署在分布式文件系统上,应用灵活、高效且安全。(如果不需要考虑负载问题,则可用考虑用分布式文件系统模式部署) 第二种方案与shared filesystem方式类似,只是共享的存储介质由文件系统改成了数据库而已,支持N个AMQ实例组网,但他的性能会受限于数据库; 第三种方案是ActiveMQ5.9以后才新增的特性,使用ZooKeeper协调选择一个node作为master。被选择的master broker node开启并接受客户端连接。 其他node转入slave模式,连接master并同步他们的存储状态。slave不接受客户端连接。所有的存储操作都将被复制到连接至Master的slaves。 如果master死了,得到了最新更新的slave被允许成为master。fialed node能够重新加入到网络中并连接master进入slave mode。所有需要同步的disk的消息操作都将等待存储状态

基于Netty+ActiveMQ的农村生活污水处理设施监测数据通信管理平台设计

Technology Analysis 技术分析 DCW 117 数字通信世界 2019.07 1 系统架构图 本系统建立在J2EE 平台上,将 Netty ,ActiveMQ 消息中间件,MySQL 数据库、redis 、json 等技术相结合,构建更加智能、更加稳定和并发更好的的通信管理平台。通信管理服务系统搭建在云平台之上,充分利用现代化信息技术手段实现农村生活污水处理设施终端数据采集的信息化、集约化,依托云平台的理念和优势,将已有的专业系统纳入其中,为主管部门、运维企业、其他相关部门提供统一的数据服务。系统架构图如图1 所示。 图1 系统架构图 本系统最大的亮点在于使用Netty 作为通信框架,支持海量并发的同时,通过其预制的编码和解码器,实现对不同通信协议的解析后,将数据统一成通用json 格式推送到消息中间件。这样对于监管、运维等应用平台而言,数据格式统一、规范,便于使用。 本文通过对比分析国内现有的数据采集和通信管理解决方案,采用Netty+ActiveMQ 相结合的方式,降低技术难度的同时,实现农村生活污水治理设施终端数据采集、传输管理和及时推送。 2 数采和控制实现 平台可实现系统用户的需求,如查看农村生活污水处理设施的流量计、多功能电表、在线水质检测仪等实时数据,并根据设计好的指令对上述设备进行控制操作。Netty 与消息中间件的结合完美解决了通信链路和消息推送问题,为实现平台的通信管理和数据的实时推送奠定了基础。详细设计图如图2所示:2.1 数采的设计与实现 平台的服务器分为Netty 通信服务与消息中间件两个部分。(1)Netty 通信服务包括平台通用功能和通用接口,用来实现与各下位机(数采仪)的数据传送并将数据按照统一json 格式送入消息中间件,Netty 通信服务在初始化时与消息中间件(ActiceMQ )建立通信连接; (2)消息中间件(ActiveMQ )实现消息的订阅和推送,主 要负责将数据推送给监管平台、企业运维平台、其他授权接入的 第三方平台,实现了数据的实时交互。 图2 通信管理详细设计图 通信管理平台将农村生活污水处理设施终端数据推送到应用平台的流程描述: 下位机(PLC 、单片机、智能网关等)采集各传感器的实时数据,将这些数据上传到Netty 服务器,当与Netty 服务器第一次建立连接时,触发channelActive 方法建立通道,该通道在断开之前一直存在,此后下位机定时发送数据,并直接触发channelRead 方法接收,接收到的数据由平台统一处理,按照事先设计好的数据格式组成通用json 数据包,再按照设计的主题推送至消息中间件(ActiveMQ ),监管平台、运维平台订阅相应主题即可获取推送消息(数据)。 Netty 服务器采用多线程服务器,对于每一个连接请求,dispatcher 都会为其创建并分配一个线程,该线程负责这个请求的处理,优点是执行粒度是完整的处理流程,处理逻辑清晰,易于开发。通信过程中,可通过心跳包实现长连接,通过线程池控制服务端线程数的快速增长。 除了消息中间件(ActiveMQ )以外,平台实现了一组restful 风格的通用数据接口。监管平台、企业运维平台等可以在获取授权后,通过这些接口获取历史数据、终端信息,下达控制指令等。 平台实现了对TCP 字节流(数据帧)、MQTT 的数据解析。2.1.1 T CP 字节流(数据帧) 下位机(数采仪)可以按照约定的数据包格式,将终端监测数据打包,以TCP 字节流(数据帧,字符集为utf-8)的方式上传。数据包格式可做如下设计:服务端收到数据包以后,按照通信协议解包以后,再将数据组合成通用格式的json 数据包,送到消息中间件。 Netty 对于TCP 字节流(数据帧)有多种解码方式,可以采用定长数据或者固定结尾字符(比如以回车换行作为结尾符)等方式,可以有效解决半包、粘包等问题。 基于Netty+ActiveMQ 的农村生活污水处理设施监测 数据通信管理平台设计 刘祥宏1,潘泉涌1,方 宽2 (1.浙江省建筑科学设计研究院有限公司,杭州 310000;2. 衢州市住建局,衢州 324000) 摘要:随着浙江省农村生活污水运维和监管工作的持续推进和规范,以及物联网技术的推广和成熟,针对农村生活污水处理设施 点多、面广、分散的特点,基于Netty 和消息中间件(ActiveMQ)技术,设计并实现了一款既能使用TCP 字节流(数据帧)方式又能满足物联网MQTT 协议(JSON 数据格式)的泛物联网通信管理系统进行数据采集和传输管理,并利用消息中间件(ActiveMQ)技术,可近实时向各级主管部门的监管平台、企业运维平台、授权接入的第三方平台推送监测数据的同时,提供了统一数据接口服务。文中主要介绍了该通信管理平台的设计原理。 关键词:Netty+ActiveMQ 的农村生活污水处理设施监测数据通信管理平台设计;分析基于Netty+ActiveMQ 的农村生活污水处理设施监测数据通信管理平台设计 doi :10.3969/J.ISSN.1672-7274.2019.07.090中图分类号:X799.3 文献标示码:A 文章编码:1672-7274(2019)06-0117-02

ActiveMQ入门

ActiveMQ入门 作者:一路向北摘要:本文主要讲述ActiveMQ的基本知识和使用方法,并简单结合spring 使用ActiveMQ。 一、ActiveMQ特性和使用总览 企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格。因此,消息传递可以满足应用间的通知和互相操作。但是开源的解决方案是到最近10年才出现的。Apache ActiveMQ就是其中一种。它使应用间能以异步,松耦合方式交流。本章将向您介绍ActiveMQ。 ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范(Ja va Message Service),是消息驱动中间件软件(MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议。因此,任何人都可以使用和修改它而不必反馈任何改变。这对于商业上将Activ eMQ用在重要用途的人尤为关键。MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。所以高可用,高性能,高可扩展性尤为关键。 ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。ActiveMQ实现JMS规范并在此之上提供大量额外的特性。 下面是一个高层次的特性列表。 ·遵循JMS规范----理解ActiveMQ的起始点是明白ActiveMQ的各种特性是JMS1.1规范的实现。本章后面将讨论JMS规范提供的好处和保证。它们包括同步和异步消息传递,一次和只有一次的消息传递,对于预订者的持久消息等等。依附于JMS规范意味着,不论JMS消息提供者是谁,同样的基本特性都是有效的。 ·连接----ActiveMQ提供各种连接选择,包括HTTP,HTTPS,IP多点传送,

[MQ]关于ActiveMQ的配置

[MQ]关于ActiveMQ的配置 转自: https://www.360docs.net/doc/e510972161.html,/CopyPaster/archive/2012/04/27/24731 79.html 目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于他们的异同,这里不想做过多的比较。简单来说,MSMQ 内置于微软操作系统之中,在部署上包含一个隐性条件:Server需要是微软操作系统。(对于这点我并去调研过MSMQ 是否可以部署在非微软系统,比如:Linux,只是拍脑袋想了想,感觉上是不可以)。对于ActiveMQ,微软系统和Linux 都是可以部署的。从功能方面来说,一般最常用的就是:消息的收/发,感觉差异不大。从性能上来说,一般的说法是ActiveMQ略高。在稳定性上,个人感觉MSMQ更好。如果这两种常用队列都用过的同学,应该来说最大的差异在于:MSMQ如果要访问远程队列(比如机器A上的程序访问机器B上的队列),会比较恶心。在数据量比较大的情况之下,一般来说队列服务器会专门的一台或者多台(多台的话,用程序去做热备+负载比较方便,也不需要额外的硬件成本。简单来说做法可以这样:消息发送的时候随机向着多台队列服务器上发送消息;接受的时候开多个线程去分别监听;热备方面,可以维护一个带状态的队列连接池,如果消息收发

失败那么将状态置为不可用,然后起一个线程去定时监测坏的连接是否可用,这个过程一般情况下可以不用加锁,为什么,大家根据各自需要去取舍吧)。最近搞完了短彩信的网关连接服务,这两种队列我均使用了。大致的过程是这样的:上层应用如果要发端彩信,那么将消息直接发送至ActiveMQ (目前用的就是上面说的多台热备+负载,因为实际中下行量非常大5千万条/天以上),然后端彩信网关连接服务部署多套,每套均依赖本机的MSMQ。为什么呢?用ActiveMQ 的原因是:上层应用程序和网关连接服务彼此独立,消息需要跨机访问。用MSMQ的原因是:ActiveMQ中的数据是一条不分省的大队列,网关连接服务需要按省流控,所以端彩信网关连接服务:首先把消息从ActiveMQ取出来,然后存至本机上的分省MSMQ,这样做另外的一个好处就是:ActiveMQ不至于过多挤压,他的数据会分摊到N台短彩信网关连接服务所部署的机器上的MSMQ之中,也就说MSMQ可以起到分摊数据和缓冲的作用。 在之前的随笔中,已经介绍过MSMQ,现在先介绍一下ActiveMQ一些配置,目前好像ActiveMQ配置上的介绍还比较少。以下是自己总结一些相关资料,贴出来给大家共享

Apache_ActiveMQ教程

一、特性及优势 1、实现JMS1.1规范,支持J2EE1.4以上 2、可运行于任何jvm和大部分web容器(ActiveMQ works great in any JVM) 3、支持多种语言客户端(java, C, C++, AJAX, ACTIONSCRIPT等等) 4、支持多种协议(stomp,openwire,REST) 5、良好的spring支持(ActiveMQ has great Spring Support) 6、速度很快,JBossMQ的十倍(ActiveMQ is very fast; often 10x faster than JBossMQ.) 7、与OpenJMS、JbossMQ等开源jms provider相比,ActiveMQ有Apache的支持,持续发展的优势明显。 二、下载部署 1、下载 https://www.360docs.net/doc/e510972161.html,/activemq-510-release.html,下载5.1.0 Windows Distribution版本 2、安装 直接解压至任意目录(如:d:\ apache-activemq-5.1.0) 3、启动ActiveMQ服务器 方法1: 直接运行bin\activemq.bat 方法2(在JVM中嵌套启动): cd example antembedBroker 4、ActiveMQ消息管理后台系统: http://localhost:8161/admin

三、运行附带的示例程序 1、Queue消息示例: * 启动Queue消息消费者 cd example ant consumer * 启动Queue消息生产者 cd example ant producer 简要说明:生产者(producer)发消息,消费者(consumer)接消息,发送/接收2000个消息后自动关闭 2、Topic消息示例: * 启动Topic消息消费者 cd example ant topic-listener * 启动Topic消息生产者 cd example ant topic-publisher 简要说明:重复10轮,publisher每轮发送2000个消息,并等待获取listener 的处理结果报告,然后进入下一轮发送,最后统计全局发送时间。 四、Queue与Topic的比较 1、JMS Queue执行load balancer语义: 一条消息仅能被一个consumer收到。如果在message发送的时候没有可用的consumer,那么它将被保存一直到能处理该message的consumer可用。如果一个consumer收到一条message后却不响应它,那么这条消息将被转到另一个

小实验-ActiveMQ实现jms监听队列

JMS: JMS基本概念: JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。 1)点对点方式(point-to-point) 点对点的消息发送方式主要建立在 Message Queue,Sender,Receiver上,Message Queue 存贮消息,Sender发送消息,Receiver接收消息.具体点就是Sender Client发送Message 到Queue中 ,而Receiver Client从Queue中接收消息和"发送消息已接受"到Quere,确认消息接收。消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到Queue,而不需要知道接收客户端是不是在运行 2)发布/订阅方式(publish / subscribe) 发布/订阅方式用于多接收客户端的方式.作为发布订阅的方式,可能存在多个接收客户端,并且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他创建以后发送客户端发送的信息。作为subscriber ,在接收消息时有两种方法,destination的receive 方法,和实现message listener 接口的onMessage 方法。 几个重要概念: Destination:消息发送的目的地,也就是所谓的Queue和Topic。创建好一个消息之后,只需要把这个消息发送到目的地,消息的发送者就可以继续做自己的事情,而不用等待消息被处理完成。至于这个消息什么时候,会被哪个消费者消费,完全取决于消息的接受者。Message:从字面上就可以看出是被发送的消息。它有下面几种类型: StreamMessage:Java 数据流消息,用标准流操作来顺序的填充和读取。 MapMessage:一个Map类型的消息;名称为 string 类型,而值为 Java 的基本类型。 TextMessage:普通字符串消息,包含一个String。 ObjectMessage:对象消息,包含一个可序列化的Java 对象 BytesMessage:二进制数组消息,包含一个byte[]。 XMLMessage: 一个XML类型的消息。 最常用的是TextMessage和ObjectMessage。 Session:与JMS提供者所建立的会话,通过Session我们才可以创建一个Message。Connection:与JMS提供者建立的一个连接。可以从这个连接创建一个会话,即Session。ConnectionFactory:那如何创建一个Connection呢?这就需要下面讲到的ConnectionFactory了。通过这个工厂类就可以得到一个与JMS提供者的 连接,即Conection。 Producer:消息的生产者,要发送一个消息,必须通过这个生产者来发送。MessageConsumer:与生产者相对应,这是消息的消费者或接收者,通过它来接收一个消息。 ActiveMQ: ActiveMQ 是Apache出品,能力强劲的开源的消息总线。ActiveMQ 是一个完全支持JMS 和J2EE规范的 JMS Provider实现。 在官方地址: https://www.360docs.net/doc/e510972161.html,/上可以下载到ActiveMQ,我们使用的是ActiveMQ5.2版本,下载apache-activemq-5.2.0-bin.zip到本地,解压缩之后即可使用。在相对应解压目录下的apache-activemq-5.2.0\bin\中找到activemq.bat运行它,ActiveMQ就运行起来了。需要注意的是,在运行ActiveMQ之前需要在环境变量中配置好

activeMQ的源码分析

activeMQ的源码分析-开篇 以前对JMS尤其是activeMQ不了解,一看到什么地方需要使用消息中间件,就比较反感。主要原因是感觉JMS的实现都比较复杂,怕在真实使用过程中出现什么问题时会比较被动。所以,我们基本上是自己写类似的消息中间件,当然功能非常简单。但其实我们自己写出来的中间件,随着功能的不断增加、人员和时间的种种问题,导致最终我们自己做出来的所谓消息中间件越来越不能维护。在吸取了一次一次这种重复发明"轮子"的事情中,我们觉得也许一开始就采用成熟开源的产品也许是条更好的方式。 感觉到现在或将来我们对JMS的使用会更加深入,为了适应这种的需要,作为软件研发人员,需要对在我们工作中占有重要地位的开源产品有源代码级别的熟悉,尤其对我们这些英语不太好的,因为目前用的多的开源产品基本上是以英语作为基础的,那么我们想要提交一个bug 或讨论一个什么用法的时候,就比较被动,而且眼巴巴的等着其他人来解决,自己一点都使不上劲的感觉真的很不舒服。 我们选择activeMQ来分析它的核心架构、源代码,就是希望能尽量少的发生上面的情况,尤其在我们分析activeMQ的过程中,发现其源代码中确实存在不少小问题。消息中间件在许多项目或产品中占有非常重要的地位,虽然我们目前还不是activeMQ的代码提交人员,但希望通过对activeMQ的源码分析这种方式,同样为使用activeMQ的同行们提供一点帮助,也算是间接为开源做点事情。 在后面的一系列文章中,我们将主要从如下几个方面来分析: 一、activeMQ的核心线程的功能和生命周期 二、消息存储的kaha实现的分析 三、消息队列(Queue)实现的分析 作为开篇,首先我们非常尊重activeMQ的所有committer,它是个不错的软件作品,我们的分析是基于5.1版本的代码,就象任何事情一样,尤其是软件产品它的成熟是需要较长时间的过程,我们也会把分析中发现的5.1版本的bug于大家分享,下面我就以一个小bug作为整个activeMQ分析的开篇。 为了表述的方便,我们把这个bug叫做bug_1,为了讲清楚该bug,首先我会把相关的背景做一个介绍: 消息指针(Message cursor)是activeMQ里一个非常重要的核心类,它是提供某种优化消息存储的方法。消息中间件的实现一般都是当消息消费者准备好消费消息的时候,它会从持久化存储中一批一批的读

相关主题
相关文档
最新文档