我所在项目选用了ActiveMq
相关两篇文章
spring整合JMS一同步收发消息(基于ActiveMQ的实现)
LINUX安装ActiveMQ
比较简单,下载后解压,进入到bin/linux-x86-64 目录,启动命令 ./activemq start,查看lsof -i:61616 端口是否监听
activemq.xml配置文件
配置1
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
配置2
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
配置3
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
jetty.xml配置文件,8161端口,对应的是activemq的web管理界面,http://127.0.0.1:8161/admin
<property name="port" value="8161"/>
activemq的web管理界面
http://127.0.0.1:8161/admin
Number Of Consumers 消费者 “这个是消费者端的消费者数量”
Number Of Pending Messages 等待消费的消息 “这个是当前未出队列的数量。可以理解为总接收数-总出队列数”
Messages Enqueued 进入队列的消息 “进入队列的总数量,包括出队列的。 这个数量只增不减”
Messages Dequeued 出了队列的消息 “可以理解为是消费这消费掉的数量”
MQ双修之(ActiveMq & RabbitMQ)
1. 简单介绍
双方都是鼎鼎有名的免费开源MQ项目,ActiveMq是Java,RabbitMQ是Erlang,理论上,RabbitMQ的性能比ActiveMq更强,是非Java系统的首选,ActiveMq是Java的,整套系统如果本来就是Java的,配合的默契更佳。虽然目前项目是java的,所以使用ActiveMq,但是出于参考学习的态度,把RabbitMq一起搭建学习了更好。
2. 下载地址
ActiveMQ http://activemq.apache.org/ 5.3.0
RabbitMQ http://www.rabbitmq.com/ 1.7.0 (Server, Java ;Client, Erlang distribution)
3. 基本介绍
RabbitMQ:基于AMQP协议(Advanced Message Queue Protocol)
ActiveMQ:基于STOMP协议
http://swingchen.javaeye.com/blog/173658 RabbitMQ/AMQP所描绘的美好前景(转)
rabbitMQ 是 AMQP 用 Erlang 实现的 MQ 。之前不是很理解,为什么要用 Erlang 来“又实现一个中间件”呢?这么做能发挥 Erlang 的优势么?机缘巧合,最近了解了一下 AMQP ,有了一点新的认识。
AMQP 主要是由金融领域的软件专家们贡献的创意,而联合了通讯和软件方面的力量,一起打造出来的规范。【Contributors: JPMorgan Chase Bank & Co., Cisco Systems, Inc., Credit Suisse, Envoy Technologies Inc., iMatix Corporation, IONA Technologies, Rabbit Technologies Ltd., Red Hat, Inc., TWIST Process Innovations Ltd, and 29West, Inc.】粗略的从概念上来讲 AMQP 首先满足的是金融系统的消息通讯业务需求。这是一个可以和 JMS 进行类比的消息中间件开放规范,所不同的是 AMQP 同时定义了消息中间件的语意层面和协议层面;另外一个不同是 AMQP 是语言中立的,而 JMS 仅和 Java 相关。AMQP 在“语意层面的定义”,这就意味着,它并不仅仅是象 JMS 或者其他的 MQ 一样,仅能按照预定义的方式工作,而是“可编程”的消息中间件。而“语言中立”则意味着只要遵循 AMQP 的协议,任何一种语言都可以开发消息组件乃至中间件本身。比如说这样的场景:“Java 写的消息端(新的前端)通过 Erlang 写的消息中间件(基础设施)与 C 写的另外一个消息端(遗留系统)进行消息交互”。AMQP 是一个开放标准,目前还在 0.9 版本。尚未成熟,但市场上已经出现了很多这个标准的实现产品。在 AMQP 所描绘的美好前景下,我们可以这么设想将来构建在成熟之后构建在 AMQP 之上的金融系统。前端程序员用他们熟悉的“工业语言”来构建系统中新的应用模块。后端程序员则继续用“老旧语言”在“遗产系统”上慢慢改进。当然,金融系统需要他们赖以沟通消息互相调用的“基础设施”必须坚若磐石。为业界提供“高并发,易扩容”的产品,这似乎正是 Erlang 的强项。之前听说“ Erlang 进入金融系统”,具体的事例,大概就是这件事了。
ActiveMQ和RabbitMQ的区别
1. ActiveMQ/ApolloMQ
优点:老牌的消息队列,使用Java语言编写。对JMS支持最好,采用多线程并发,资源消耗比较大。如果你的主语言是Java,可以重点考虑。
缺点:由于历史悠久,历史包袱较多,版本更新很缓慢。集群模式需要依赖Zookeeper实现。最新架构的产品被命名为Apollo,号称下一代ActiveMQ,目前案例较少。
2. RocketMQ/Kafka
优点:专为海量消息传递打造,主张使用拉模式,天然的集群、HA、负载均衡支持。话说还是那句话,适合不适合看你有没有那么大的量。
缺点:所谓鱼和熊掌不可兼得,放弃了一些消息中间件的灵活性,使用的场景较窄,需关注你的业务模式是否契合,否则山寨变相使用很别扭。除此之外,RocketMQ没有.NET下的客户端可用。RocketMQ身出名门,但使用者不多,生态较小,毕竟消息量能达到这种体量的公司不多,你也可以直接去购买阿里云的消息服务。Kafka生态完善,其代码是用Scala语言写成,可靠性比RocketMQ低一些。
3. RabbitMQ
优点:生态丰富,使用者众,有很多人在前面踩坑。AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。
缺点:Erlang代码你Hold得住不? 虽然Erlang是天然集群化的,但RabbitMQ在高可用方面做起来还不是特别得心应手,别相信广告。
--------------------- 本文来自 从放弃到开始 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_30764991/article/details/80574483?utm_source=copy
RabbitMq、ActiveMq、ZeroMq、kafka之间的比较
MQ框架非常之多,比较流行的有RabbitMq、ActiveMq、ZeroMq、kafka。这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求。下面我列出这些MQ之间的对比数据和资料。
第一部分:RabbitMQ,ActiveMq,ZeroMq比较
1、 TPS比较 一
ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。这个结论来自于以下这篇文章。
测试环境:
Model: Dell Studio 1749
CPU: Intel Core i3 @ 2.40 GHz
RAM: 4 Gb
OS: Windows 7 64 bits
其中包括持久化消息和瞬时消息的测试。注意这篇文章里面提到的MQ,都是采用默认配置的,并无调优。
更多的统计图请参看我提供的文章url。
2、TPS比较二
ZeroMq 最好,RabbitMq次之, ActiveMq最差。这个结论来自于一下这篇文章。http://www.cnblogs.com/amityat/archive/2011/08/31/2160293.html
显示的是发送和接受的每秒钟的消息数。整个过程共产生1百万条1K的消息。测试的执行是在一个Windows Vista上进行的。
3、持久化消息比较
zeroMq不支持,activeMq和rabbitMq都支持。持久化消息主要是指:MQ down或者MQ所在的服务器down了,消息不会丢失的机制。
4、技术点:可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统、社区
RabbitMq最好,ActiveMq次之,ZeroMq最差。当然ZeroMq也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。
所以在可靠性和可用性上,RabbitMQ是首选,虽然ActiveMQ也具备,但是它性能不及RabbitMQ。
5、高并发
从实现语言来看,RabbitMQ最高,原因是它的实现语言是天生具备高并发高可用的erlang语言。
总结:
按照目前网络上的资料,RabbitMQ、activeM、zeroMQ三者中,综合来看,RabbitMQ是首选。下面提供一篇文章,是淘宝使用RabbitMQ的心得,可以参看一些业务场景。
http://www.docin.com/p-462677246.html
第二部分:kafka和RabbitMQ的比较
关于这两种MQ的比较,网上的资料并不多,最权威的的是kafka的提交者写一篇文章。http://www.quora.com/What-are-the-differences-between-Apache-Kafka-and-RabbitMQ
里面提到的要点:
1、 RabbitMq比kafka成熟,在可用性上,稳定性上,可靠性上,RabbitMq超过kafka
2、 Kafka设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性
3、 Kafka的性能(吞吐量、tps)比RabbitMq要强,这篇文章的作者认为,两者在这方面没有可比性。
这里在附上两篇文章,也是关于kafka和RabbitMq之间的比较的:
1、http://www.mrhaoting.com/?p=139
2、http://www.liaoqiqi.com/post/227
总结:
两者对比后,我仍然是选择RabbitMq,性能其实是很强劲的,同时具备了一个成熟的MQ应该具有的特性,我们无需重新发明轮子。
好资料推荐:
1、最全最给力的kafka博客:http://blog.csdn.net/lizhitao/article/category/2194509
2、淘宝对rabbitmq的使用:http://www.docin.com/p-462677246.html
--------------------- 本文来自 我就想起个通过的名字 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_35873847/article/details/78737796?utm_source=copy