当前位置: 首页 > 后端技术 > Java

ActiveMQ

时间:2023-04-02 00:49:48 Java

之消息中间件一、JMS(JavaMessageService,Java消息服务)1.1定义Java消息服务(JavaMessageService,即JMS)应用程序接口是Java平台API中面向消息的中间件(MOM),用于在两个应用程序之间或在分布式系统中发送消息以进行异步通信。Java消息服务是一个与具体平台无关的API。1.2JMS对象模型名称描述ConnectionFactory连接工厂连接连接会话目的MessageProducerProducerMessageConsumerConsumer消息代理消息中间件实例(ActiveMQ)1.3JMS消息模型点对点(P2P)/点对点发布/订阅(Pub/sub)/topic(发布和订阅)1.4JMS消息结构消息头、消息属性、消息体消息头消息属性:可以理解为消息的附加消息头,属性名可以自定义消息体2.ActiveMQ概念2.1定义ActiveMQ是由Apache出品的最流行、功能最强大的开源消息总线。ActiveMQ是完全支持JMS1.1和J2EE1.4规范的JMSProvider实现。尽管JMS规范已经发布了很长时间,但JMS在今天的J2EE应用程序中仍然扮演着特殊的角色。2.2特性支持多种编程语言支持多种传输协议有多种持久化方式2.3ActiveMQ支持哪些协议ActiveMQ支持多种协议传输和传输方式,允许客户端使用多种协议进行连接。ActiveMQ支持的协议:AUTO、OpenWire、AMQP、Stomp、MQTT等ActiveMQ支持的基本传输方式:VM、TCP、SSL、UDP、Peer、Multicast、HTTP(S)等,以及更高级的Failover、Fanout,Discovery,ZeroConf方法。2.4OpenWire协议2.4.1什么是OpenWire协议OpenWire是Apache的跨语言协议,允许不同语言和平台访问ActiveMQ,是ActiveMQ4.x以后版本的默认传输协议。2.4.2如何使用OpenWire协议OpenWire支持TCP、SSL、NIO、UDP、VM等多种传输方式。直接配置这些连接,就是使用的OpenWire协议。OpenWire有自己的配置参数。由前缀“wireFormat”表示。示例OpenWire配置参数描述属性默认值描述stackTraceEnabledtrue已经发生并被跟踪的堆栈异常是否应该通过Broker发送给客户端reducemarshalling(comingsoon)send)发生tightEncodingEnabledtrue根据CPU使用率,自动调整传输内容的大小(压缩比)prefixPacketSizetrue在每个数据包分组前(立即发送),是否应该使用每个数据包的大小作为前缀连接的最大空闲时间,以毫秒为单位。maxInactivityDuration30000代理服务将根据配置关闭超时连接。同时也可以通过心跳机制保持连接。值<=0将禁用对活动连接的监视。maxlnactivityDurationInitalDelay10000连接建立后,多久开始超时检测?cacheSize1024如果可以缓存,那么这个指定最大缓存个数。在该属性中,在ActiveMQ4.1中增加了可以发送的最大帧大小maxFrameSizeMAX_LONG,可以帮助防止OOMDOS攻击。2.5为什么使用MQTT协议MQTT结构简单,比其他消息协议更轻量。适用于计算能力有限、带宽较低、网络条件不可靠的网络环境中使用。2.5.1MQTT的发布-订阅模型2.5.2MQTT服务质量服务质量(QoS)级别是关于发送方和接收方之间信息传递的保证协议。MQTT中有三个QoS级别:atmostonce(0)atleastonce(1)onlyonce(2)QoS是MQTT的一个主要功能,它可以更轻松地在不可靠的网络下进行通信,因为即使在非常不可靠的网络中网络,协议还可以控制是否重发消息,保证消息到达。它还可以帮助客户端根据网络环境和程序逻辑自由选择QoS。2.5.3ActiveMQ如何使用MQTT协议ActiveMQ服务器配置MQTT配置参数说明属性默认值说明maxFrameSize268435456(v5.12.0)可以发送的最大帧大小。协议限制为256MB,不能设置更高的值。可以帮助防止OOMDOS攻击配置示例+nio://localhost:1883"/>MQTT使用NIO+SSL2.5.4Spring使用MQTTSpring集成提供MQTT协议可以通过Maven添加依赖项来使用支持。org.springframework.integrationspring-integration-mqtt5.1.1.RELEASE2.6什么是AUTO协议?检测协议从ActiveMQ5.13.0开始,ActiveMQ开始支持协议格式检测,可以自动检测OpenWire、STOMP、AMQP和MQTT。允许这4种类型的客户端共享一个传输自动使用TCP自动使用SSLAUTO使用NIOAUTO使用NIO+SSL3.ActiveMQ高可用集群方案3.1ActiveMQ有哪些集群部署方式?Master-Slave部署方式Broker-Cluster部署方式Master-Slave结合Broker-Cluster3.2Master-Slave部署方式共享同一个文件系统,共享同一个数据库3.3Broker-Cluster部署方式3.4Master-Slave和Broker-Cluster组合部署方法4.ActiveMQ持久化机制4.1Queue类型的持久化机制4.2Topic类型的持久化机制4.3存储方式4.3.1JDBC方式将消息存储在数据库中,例如:Mysql、SQLServer、Oracle、DB2等优缺点管理方便且性能低可支持强一致性/4.3.2AMQ方式基于文件存储方式,具有写入速度快,易恢复等特点,但不推荐使用,重建索引耗时太长,并且索引文件占用太多磁盘空间。优缺点性能比JDBC索引高占用磁盘空间大/重建索引很慢4.3.3LevelDB方法LevelDB是Google开发的用于持久化数据的高性能类库。LevelDB不是一个服务,用户需要自己实现Server。单进程服务,可处理亿级Key-Value数据,占用内存小。特性基于K-V存储Keyvalue有序存储操作接口简单支持数据快照支持数据压缩LevelDB结构ActiveMQ配置LevelDB:修改配置文件${ACTIVEMQ_HOME}/conf/activemq.xml5、ActiveMQ事务实现机制ActiveMQ事务实现最终一致性。生产者端的实现机制如下:消费者端的实现机制如下: