ActiveMQ--介绍

1.特点

  • 支持多语言的客户端和协议。
  • 提供了像消息组通信、消息优先级、延迟接收消息、虚拟接受者、消息持久化之类的高级特性。
  • 完全支持JMS1.1和J2EE1.4规范(包括持久化、分布式事务消息、事务)。
  • 支持Spring框架。
  • 通过了常见的J2EE服务器测试。
  • 连接方式多样化。
  • 支持通过使用JDBC和Journal实现消息的快速持久化。
  • 为高性能集群、客户端-服务端、点对点通信等场景而设计。
  • 提供了技术和语言中立的REST API接口。
  • 支持一AJAX方式调用ActiveMQ
  • ActiveMQ可以轻松地Web Service技术整合
  • 可以被作为内存中的JMS提供者,非常适合JMD单元测试。

2.ActiveMQ基本概念

  1. 消息传送模型
  • 点对点模型:使用队列作为消息通信载体,满足生产者与消费者模式。一条消息只能被一个消费者所使用,违背消费的消息在队列中保留知道被消费者消费。
  • 发布、订阅模型:使用主题作为消息通信载体,类似于广播模式,发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一天消息被广播之后才订阅的用户是收不到该消息的。
  1. 基本组件
  • Broker消息代理:表示消息队列服务器实体,接口客户端连接,提供消息通信的核心服务
  • Producer(消息生产者):业务的发起方,负责生产消息并传递给Broker
  • Consumer(消息消费者):业务的处理方,负责从Broker获取消息并进行业务逻辑处理。
  • Topic(主题):在发布订阅模式下消息的统一汇集地,不同的生产者向Topic发送消息,由Broker分发给不同的订阅者,实现消息的广播。
  • Queue(队列):在点对点模式下特定生产者想特定队列发送消息,消费者订阅特定的队列接收消息并进行业务逻辑处理。
  • Message(消息):根据不同的通信协议定义的固定格式进行编码的数据包,封装业务数据,实现消息的传输。
  1. 连接器
  • 传输连接器:
    用于在消息代理服务器与客户端之间通信。
    在ActiveMQ示例的配置文件/examples/conf/activemq-demo.xml
    在这里插入图片描述
<!--
           The transport connectors expose ActiveMQ over a given protocol to
           clients and other brokers. For more information, see:

           http://activemq.apache.org/configuring-transports.html
       -->
       <transportConnectors>
           <!-- Create a TCP transport that is advertised on via an IP multicast
             group named default. -->
           <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
           <!-- Create a SSL transport. Make sure to configure the SSL options
             via the system properties or the sslContext element. -->
           <transportConnector name="ssl" uri="ssl://localhost:61617"/>
           <!-- Create a STOMP transport for STOMP clients. -->
           <transportConnector name="stomp" uri="stomp://localhost:61613"/>
           <!-- Create a Websocket transport for the websocket dmeo -->
           <transportConnector name="ws" uri="ws://localhost:61614/" />
       </transportConnectors>

传输连接器被定义在<transportConnectors>元素中,一个元素顶一个特定的连接器,一个连接器必须有自己唯一的名字和uri属性,但是discoveryUri属性是可选的。

  • VM:允许客户端和消息服务器直接在VM内部通信,采用的不是Socket连接,而是直接的虚拟机本地方法调用,从而避免网络传输开销。应用场景仅限于服务器和客户端在同一个JVM中。
  • TCP:客户端通过TCP连接到远程的消息服务器
  • UDP:客户端通过UDP连接到远程的消息服务器
  • Multicast:允许使用组播传输的方式连接到消息服务器
  • NIO:NIO和TCP的作用一样,只不过NIO使用了JAVA的NIO包,可能在某些场景下可以提高性能
  • SSL:SSL允许用户在TCP的基础上使用SSL
  • HTTP和HTTPS:允许客户端使用REST或AJAX的方式进行连接,意味着可以直接使用JavaScript向ActiveMQ发送消息
  • WebSocket:允许客户端通过HTML5中的WebSocketl连接到消息服务器
  • AMQP:从ActiveMQ5.8版本开始支持
  • MQTT、STOMP:从ActiveMQ5.6版本开始支持
    ActiveMQ还支持一些高级协议,也可以通过uri的方式进行配置:
  • Failover是一种重新连接的机制,工作于上面介绍的连接协议的上层,用于建立可靠的传输。其配置语法允许指定任意多个符合的uri,会自动选择其中一个尝试连接,如果没有连接成功,会继续选择其他的uri进行尝试。
  • Fanout是一种重新连接和复制的机制,工作于其他连接协议的上层,采用复制的方式把消息复制到多台消息服务器上。
  1. 网络连接器:
    网络连接器就是用来配置服务器之间的通信的。
<networkConnectors>
	<networkConnector uri="static:(tcp://192.168.1.1:61617)"/>
</networkConnectors>

在A中配B那么就是A->B
在B中配A就是B->A,都配置了就是双向的。

  • static(静态协议):用于为一个网络中的多个代理创建静态配置,这种配置协议支持符合的uri(即包含其他uri的uri)
  • multicast(多点传送协议):消息服务器会广播自己的服务,也会定位其他代理。这种方式用于在服务器之间实现动态识别,而不是配置静态的IP组。
  1. 消息存储
  • 存储到内存
  • 存储到文件
  • 存储到数据库
  1. AMQ基于文件并支持事务,以日志的形式进行持久化,实现了索引
  2. KahaDB基于文件支持事务,比AMQ更加好扩展和可恢复
  3. JDBC存储到数据库,建议结合Journal来存储,使用了快速的缓存写入技术,提高了性能
  4. 内存存储:需要设置消息服务器的JVM和内存大小
  5. LevelDB使用自定义索引代替常用的BTree索引,持久化性能高于KahaDB.
  6. 在ActiveMQ5.9中还提供了基于LevelDB和ZooKeeper的数据复制方式,作为主从方式的首选数据复制方案。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值