基本介绍
ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的、面向消息的、能够跨越多语言和多系统的应用集成消息通信中间件。
它为企业应用中消息传递提供高可用、出色性能、可扩展、稳定和安全保障。
ActiveMQ实现JMS规范并在此之上提供大量额外的特性。ActiveMQ支持队列和订阅两种模式的消息发送。
AcitveMQ的数据传送流程如下图:
ActiveMQ的两种消息传递类型:
(1)点对点传输,即一个生产者对应一个消费者,生产者向broke推送数据,数据存储在broke的一个队列中,当消费者接受该条队列里的数据。
(2)基于发布/订阅模式的传输,即根据订阅话题来接收相应数据,一个生产者可向多个消费者推送数据,与MQTT协议的实现是类似的。
两种消息传递类型的不同,点对点传输消费者可以接收到在连接之前生产者所推送的数据,而基于发布/订阅模式的传输方式消费者只能接收到连接之后生产者推送的数据。
ActiveMQ的应用场景
ActiveMQ的优势在于安装简单、学习成本较低,而且内置管理界面。有种即插即用的感觉
缺点是对大数据量的支持比较差,数据量越大,消费和查找的速度越慢。
ActiveMQ适合对吞吐量要求较低的场景,如果是大数据场景下建议使用RocketMQ、kafka等消息队列
activemq和rabbitmq的区别是:
1、ActiveMQ/ApolloMQ
优点:老牌的消息队列,使用Java语言编写。对JMS支持最好,采用多线程并发,资源消耗比较大。如果你的主语言是Java,可以重点考虑。
缺点:由于历史悠久,历史包袱较多,版本更新很缓慢。集群模式需要依赖Zookeeper实现。最新架构的产品被命名为Apollo,号称下一代ActiveMQ,目前案例较少。
2、RabbitMQ
优点:生态丰富,使用者众,有很多人在前面踩坑。AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。
缺点:Erlang代码你Hold得住不? 虽然Erlang是天然集群化的,但RabbitMQ在高可用方面做起来还不是特别得心应手,别相信广告。
补充:RocketMQ/Kafka
优点:专为海量消息传递打造,主张使用拉模式,天然的集群、HA、负载均衡支持。话说还是那句话,适合不适合看你有没有那么大的量。
缺点:所谓鱼和熊掌不可兼得,放弃了一些消息中间件的灵活性,使用的场景较窄,需关注你的业务模式是否契合,否则山寨变相使用很别扭。除此之外,RocketMQ没有.NET下的客户端可用。RocketMQ身出名门,但使用者不多,生态较小,毕竟消息量能达到这种体量的公司不多,你也可以直接去购买阿里云的消息服务。Kafka生态完善,其代码是用Scala语言写成,可靠性比RocketMQ低一些。
实战
SpringBoot集成 ActiveMQ —— 队列模型实战
spring:
# activemq的配置
activemq:
# 服务器地址
broker-url: tcp://localhost:61616
# 账户名、密码
user: admin
password: admin
pool:
# 连接池最大连接数
max-connections: 50
# 是否启动连接池
enabled: true
# jms的规范
jms:
# false为队列模式(默认)、true是发布订阅模式
pub-sub-domain: false
# 自定义队列
tohandle-queue: tohandle-queue
handled_queue: handled_queue
ActiveMQ 入门实战(3)–SpringBoot 整合 ActiveMQ
JmsTemplate
SpringBoot 整合ActiveMQ_企业实战
没进行配置连接
SpringBoot集成ActiveMQ的实战全过程
yaml配置和config两种方式配置