您的位置:首页 > 女性

ActiveMQ · 基础篇

时间:2019-07-15
立即博备用

作者:cyfonly

春节过后,回到公司的胖乎乎的胖子。但是不要以为他的大肚子里装满了肥肉,里面的墨水也更模糊了。毕竟,小胖使用半个月的中国新年专注于研究和研究ActiveMQ,哦.

这不是,为了测试自己学习的结果,第一天工作变成胖乎乎的去建筑师老兵交流ActiveMQ的相关知识,还要老王讨论一个红包,可胖乎乎的快乐是的。

“根据你的理解,来吧,什么是ActiveMQ?”

“这很简单,ActiveMQ是一个MOM,特别是一个消息代理,它实现了用于系统间远程通信的JMS规范。它.”

“等等,让我解释一下什么是妈妈。”

“好.MOM是面向消息的中间件,一种用于分布式应用程序或系统中的异步,松散耦合,可靠,可扩展和安全通信的软件.MOM的一般概念是它作为消息之间的消息代理发送者和消息接收者,这个中介提供了一个全新的松散耦合水平。“

“JMS怎么样?”

程小鹏是一个追求终极的人。为了更容易和更容易地解释它,他只是放了一块白板说。

“JMS称为Java消息服务,是Java平台上MOM的技术规范,旨在通过提供用于生成,发送,接收和处理消息的标准API来简化企业应用程序的开发,类似于JDBC和关系。数据库通信的方式。“

0b4bb2d5617a4b179936b7d8a7e99e2e

“嗯,这很好。你需要理解下面的这些概念”:

Provider:用纯Java语言编写的JMS接口实现(如ActiveMQ)。域:消息传递方法,包括对等(P2P),发布/订阅(发布/订阅)连接工厂:客户端使用连接工厂创建和JMS提供者连接目的地:消息被发送,发送的对象,并收到了

“你说的是P2P和Pub/Sub之间的区别。”法老向胖乎乎的人提出了一个问题。

小胖不是素食主义者。毕竟,如果他是素食者,他就不能吃那么多.这些基本概念对他来说是一件小事:

P2P(对等)消息域使用队列作为目的地,可以同步或异步地发送和接收消息,并且每个消息仅被发送一次到一个消费者。

Consumer可以使用MessageConsumer.receive()同步接收消息,也可以通过向MessageConsumer.setMessageListener()注册MessageListener来异步接收消息。

多个消费者可以注册到同一个队列,但消息只能由一个消费者接收,然后消费者确认该消息。在这种情况下,提供商以轮询方式向所有注册的消费者发送消息。

c5c6e790a6fd4732bf99f03479192020

发布/订阅(发布/订阅)消息域使用主题作为目标,发布者向主题发送消息,订阅者注册以从主题接收消息。发送给主题的任何消息都将自动发送给所有订阅者。接收模式(同步和异步)与P2P域相同。

除非明确指定,否则Tope不会为订阅者保留消息。当然,这可以通过持久(持久)订阅来完成。在这种情况下,当订户与提供商断开连接时,提供商为其存储消息。当持久订户重新连接时,它将接收在断开连接期间未消耗的所有消息。

6f77f3b732fd4f009649f8088702aafc

“好吧,总结非常好。上述知识是学习ActiveMQ的理论基础。必须掌握它。”

“由于JMS是一般规范,使用它来创建应用程序是否有一般性步骤?”法老问道。

“有一些。你想说这个一般步骤吗?就在我测试你的时候,哈哈!”成为一个胖乎乎的聪明人,认为法老作为建筑师不会注意这些太具体的实施细节。

然而,老王亲自参与了工作日。他仍然经常对代码发誓。他怎么能被这个小案子难住呢?所以老国王在几分钟内给出了答案:

获取连接工厂使用连接工厂创建连接启动连接从连接创建会话连接连接创建会话,或创建生成器以创建消息以创建使用者,或发送或接收消息以发送或接收消息创建消费者注册消息监听器(可选)以发送或接收消息关闭资源(连接,会话,生产者,消费者等)

“66666,太棒了我的兄弟!”小聪明的小精明被老国王压垮了!

“你的嘴就足够了,让我们移动它。现在你可以编写与上述步骤相对应的代码来实现它。”法老给了一个胖乎乎的样子,让他慢慢意识到.

变得胖乎乎的不是省油灯,立即擦拭白板,场景被粉碎(这是撸代码,撸代码,撸代码,重要的事情说三次):

8fc687a8bec140d882c93eadda1e065c

老王满意地点了点头:“这还不错.JMS General的规格都已经完成了。让我们谈谈ActiveMQ更具体的事情。”

“好的。很好。或者我会根据自己的学习来讨论ActiveMQ存储。你可以看到我错在哪里或丢失,是不是很好?”当然,程小鹏扮演了他一贯的主动风格。我仍然想得到法老的批准。

“好吧,让我们开始。”

在将消息存储在队列中时,ActiveMQ使用先进先出(FIFO)存储。同时将消息分派给单个使用者,并且只有在消息和确认消息时才能从存储中删除该消息。

ee48365f6a0345bc9a24f59c6b5ab55b

对于持久订阅者,每个使用者都会获得Message的副本。为节省存储空间,提供程序仅存储消息的一个副本。持久订阅者维护指向下一个Message的指针,并将副本分派给使用者。消息存储以这种方式实现,因为每个持久订阅者可以以不同的速率消费消息,或者它们可能不是全部同时运行。此外,由于每个Message可能有多个使用者,因此在成功传递给所有持久订阅者之前,不能将其从商店中删除。

e9e51b00d9494208bae2373d61f0a0ef

“很好,上述知识非常重要。事实上,我们可以通过表格更清楚地表明,“法老补充说,并在白板上绘制了以下表格:

9ac2a75fe55f43efaa4cd76cacd0d108

尽管程小鹏已经对上述特征进行了实际比较,但他没想到会有一个表格来使比较更加清晰易懂。特别是当他看到法老随时抽出形式时,他惊讶地大声喊道:“法老,你太牛了,真的爱你!”

在我周围的同事听到之后,他们都刷了过来,看了看这里。

这种情况,老王也不好意思:“嘿,说说要注意,不要让人觉得我们在做基础。回到话题,你谈谈ActiveMQ常用的存储方法。”

小鹏害羞地点点头,迅速回到了原来的状态,一百五十分地说。

1.KahaDB

ActiveMQ 5.3件。

要启用KahaDB存储,您需要在activemq.xml中执行以下操作:

43ce1d69a4534fb3827557784145af78

2.AMQ

与KahaDB存储一样,AMQ存储使用户能够快速启动和运行,因为它不依赖于第三方数据库。 AMQ消息存储是可靠持久性和高性能索引的事务日志的组合,当消息吞吐量是应用程序的主要要求时,这是最佳选择。但是因为它为每个索引使用两个单独的文件,并且每个Destination都有一个索引,所以当您计划在代理中使用数千个队列时,不应该使用它。

9da8d1d7221c4e8aa6e2f2ebac923126

3.JDBC

选择关系数据库的原因是企业已经拥有管理关系数据的专业知识,但它在性能方面肯定不比上述消息存储实现更优越。事实是,许多公司使用关系数据库作为存储,因为他们更喜欢利用这些数据库资源。

bee3d8bde2bf4bdcb31531a98608ee7c

4.内存存储

内存消息存储将所有持久消息保留在内存中。当仅存储有限数量的消息时,存储器消息存储可能是有用的,因为消息通常被快速消耗。在activema.xml中将broker元素的persistent属性设置为false。

听完老国王后,他微笑着笑着说:“即使是配置也可以写得如此细致,看来你做了很多功课,给你一个恭维。”法老不会责怪他的赞美,他也明白这些恭维对于胖乎乎的意味着什么。

程小胖得到了法老的赏识,他也在心里吃了蜜。

不要等待胖乎乎的说话,法老拿起笔走到白板上说:“以下是根据我的工作经验,告诉你ActiveMQ的部署模式。”

1.单身模式

这不尴尬,跳过它。

2.没有共享的主从模式

这是最简单的提供程序高可用性方案,其中主节点和从属节点分别存储消息。需要将从节点配置为连接到主节点,并且需要对其状态进行特殊配置。

所有消息命令(消息,确认,订阅,事务等)都从主节点复制到辅助节点,并且此复制在主节点对其接收的任何命令生效之前发生。此外,当主服务器收到持久消息时,它等待从服务器完成消息的处理(通常持久存储到存储),然后在返回收据之前完成消息本身的处理(例如持久存储到存储)制片人。

除非主节点发生故障,否则从节点不会启动任何传输,也不能接受任何客户端或网络连接。当主节点发生故障时,辅助节点自动成为主节点,并且打开传输并接受连接。这是使用故障转移传输的客户端连接到新主节点的位置。

代理连接配置如下:

()?随机=假

但是,此部署模型存在一些限制,

当从节点连接到主节点时,主节点仅复制其活动状态,因此在主节点在从节点连接到主节点之前失败之后,主节点处理的任何消息或消息确认将丢失。但是,您可以通过在主节点上设置waitForSlave来避免这种情况,这会强制主节点接受没有任何从属连接的连接。也就是说,主节点只能有一个从节点,而从节点不允许其他从节点。将正在运行的单例配置为无共享主从或配置新从服务器时,必须先停止当前服务并在重新启动之前修改配置。e66ac6d83de54b37aa452472d77ce89e

当某些停机时间可以接受时,可以使用此模式。

从节点配置:

此外,您可以配置shutdownOnMasterFailure条目以指示主节点在发生故障后安全关闭,确保没有消息丢失,从而允许管理员维护新的辅助节点。

3.共享存储主从模式

允许多个代理共享存储,但任何时候只有一个处于活动状态。在这种情况下,当主节点发生故障时,不需要手动干预来维护应用程序的完整性。另一个好处是节点数量没有限制。

有两种细分模式:

(1)基于数据库

它获取表上的独占锁,以确保没有其他ActiveMQ代理可以同时访问数据库。未锁定的其他代理处于轮询状态,将被视为从属。他们不会打开转移,也不会接受连接。

6c9645ec88c844248da51bf5aa2ac51d

(2)基于文件的系统

需要获取分布式共享文件锁,建议在Linux系统下使用GFS2。

d32a2f07c52d42b799630176fb488580

当我看到这些干货的时候,我一边欣喜若狂,一边欣赏着,在公主说完之后他没有完成录音。老王趁机喝了一杯铁观音润润子。

记录了法老所说的部署模式后,程小鹏也不好意思让法老继续谈论它。毕竟,他知道法老的加班工作是突出的,他不能长久站立。

“王哥,你坐下休息,我会告诉你我理解的ActiveMQ的网络连接。它不在中间吗?”

“中等。没什么,我身体健康”法老知道胖乎乎的担心他的腰,但他还是很温和。程小胖不敢耽误时间,立刻说话。

1.代理网络

支持将ActiveMQ消息代理链接到不同的拓扑结构称为代理网络。

ActiveMQ网络使用存储转发的概念,其中消息始终存储在本地代理中,然后通过网络转发到另一个代理。

f2b8106bd92c48fdb772858386918c03

建立连接后,远程代理会将包含其所有持久和活动使用者目标的信息传递给本地代理,本地代理根据该信息确定远程代理感兴趣的消息并将其发送给远程代理。

如果希望网络是双向的,则可以使用网络连接器将远程代理配置为指向本地代理,或将网络连接器配置为双工以在两个方向上发送消息。

e60c4035baac42fbaabcce9b047842f8

请注意,配置顺序很重要:

网络连接需要在消息存储之前建立连接,对应于networkConnectors元素消息存储需要在传输之前配置,对应于persistenceAdapter元素消息传输最终配置,对应于transportConnectors元素

2.网络发现

(1)动态发现

使用多播来支持动态网络发现。配置如下:

默认名称in表示代理所属的组。因此,在使用此方法时,强烈建议您使用唯一的组名来阻止代理连接到其他不相关的代理。

(2)静态发现

静态发现接受代理URI列表,并尝试按列表中确定的顺序连接到远程代理。

相关配置如下:

initialReconnectDelay:默认值为1000,表示尝试连接之前的延迟。 maxReconnectDelay:默认值为30000,表示连接失败和重新建立连接之间的延迟。它仅在启用useExponentialBackOff时生效。 useExponentialBackOff:默认值true,如果启用,则表示每次失败后重建连接的延迟。 backOffMultiplier:默认值2表示每次在useExponentialBackOff之后启用延迟增量时,请务必注意网络连接将始终尝试建立与远程代理的连接。

请务必注意,网络连接始终会尝试建立与远程代理的连接。

(3)多连接场景

75e6074f68ae45cb8eadf00c48491171

当网络负载很高时,使用多个连接是有意义的。但是您需要确保不会重复传递消息,这可以通过过滤器完成。

6190dc54e48f4bcf92ea543bcd891344

演讲结束后,他变得胖乎乎的,松了一口气。由于上述知识点似乎很少,他花了很多时间阅读大量的英文材料,并通过反复练习来理解它。

在他成为胖乎乎的时候,法老坐在转椅上,腰部更加舒适。法老站了起来,把它拍成一个胖乎乎的肩膀:“这个知识点有点难以理解,但你解释得很好。通过今天的沟通,你可以看到你对ActiveMQ的基本知识是好的。师父,将来,有必要更深入地练习,以便它可以用来提供高质量的服务。“

法老的手机突然响了,他要去参加会议:“今天来这里,我要开会。”

“好的,谢谢你的耐心指导。我希望你能更多地关注你的身体。”

老王鬼笑道:“好吧,放心吧,还有一个刚刚在隔壁结婚的年轻人,听Ta说我最近想要一个小宝宝,所以我一定会保养自己的身体。”

程小庞:“.”

“哈哈,开个玩笑!”

“.”

日期归档
  • 友情链接:
  • 立即博备用网址 版权所有© www.andrepsicologia.com 技术支持:立即博备用网址| 网站地图