activemq工作原理(消息队列核心原理)

:暂无数据 2026-05-08 23:40:03 0
你有没有想过,activemq工作原理的关键突破口,可能就藏在消息队列核心原理之中?本篇内容将为你验证这个猜想。

本文目录

消息队列核心原理

消息队列已经逐渐成为分布式应用场景、内部通信、以及秒杀等高并发业务场景的核心手段,它具有低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。
无论是 RabbitMQ、RocketMQ、ActiveMQ、Kafka还是其它等,都有的一些基本原理、术语、机制等,总结分享出来,希望大家在使用消息队列技术的时候能够快速理解。

1.消息生产者Producer:发送消息到消息队列。
2.消息消费者C***umer:从消息队列接收消息。
*****:概念来自与Apache ActiveMQ,指MQ的服务端,帮你把消息从发送端传送到接收端。
4.消息队列Queue:一个先进先出的消息存储区域。消息按照顺序发送接收,一旦消息被消费处理,该消息将从队列中删除。

1)消息的转储:在更合适的时间点投递,或者通过一系列手段辅助消息最终能送达消费机。
2)规范一种范式和通用的模式,以满足解耦、最终一致性、错峰等需求。
3)其实简单理解就是一个消息转发器,把一次RPC做成两次RPC。发送者把消息投递到broker,broker再将消息转发一手到接收端。
总结起来就是两次RPC加一次转储,如果要做消费确认,则是三次RPC。

点对点模型 用于 消息生产者 和 消息消费者 之间 点到点 的通信。
点对点模式包含三个角色:

发布订阅模型包含三个角色:

生产者发送一条消息到队列queue,只有一个消费者能收到。
发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。

基于Queue消息模型,利用FIFO先进先出的特性,可以保证消息的顺序性。

即消息的Ackownledge确认机制,为了保证消息不丢失,消息队列提供了消息Acknowledge机制,即ACK机制,当C***umer确认消息已经被消费处理,发送一个ACK给消息队列,此时消息队列便可以删除这个消息了。如果C***umer宕机/关闭,没有发送ACK,消息队列将认为这个消息没有被处理,会将这个消息重新发送给其他的C***umer重新消费处理。

主要是用“记录”和“补偿”的方式。
1.本地事务维护业务变化和通知消息,一起落地,然后RPC到达broker,在broker成功落地后,RPC返回成功,本地消息可以删除。否则本地消息一直靠定时任务轮询不断重发,这样就保证了消息可靠落地broker。
*****往c***umer发送消息的过程类似,一直发送消息,直到c***umer发送消费成功确认。
3.我们先不理会重复消息的问题,通过两次消息落地加补偿,下游是一定可以收到消息的。然后依赖状态机版本号等方式做判重,更新自己的业务,就实现了最终一致性。
4.如果出现消费方处理过慢消费不过来,要允许消费方主动ack error,并可以与broker约定下次投递的时间。
5.对于broker投递到c***umer的消息,由于不确定丢失是在业务处理过程中还是消息发送丢失的情况下,有必要记录下投递的IP地址。决定重发之前询问这个IP,消息处理成功了吗?如果询问无果,再重发。
6.事务:本地事务,本地落地,补偿发送。本地事务做的,是业务落地和消息落地的事务,而不是业务落地和RPC成功的事务。消息只要成功落地,很大程度上就没有丢失的风险。

消息的收发处理支持事务,例如:在任务中心场景中,一次处理可能涉及多个消息的接收、处理,这应该处于同一个事务范围内,如果一个消息处理失败,事务回滚,消息重新回到队列中。

消息的持久化,对于一些关键的核心业务来说是非常重要的,启用消息持久化后,消息队列宕机重启后,消息可以从持久化存储恢复,消息不丢失,可以继续消费处理。

在实际生产环境中,使用单个实例的消息队列服务,如果遇到宕机、重启等系统问题,消息队列就无法提供服务了,因此很多场景下,我们希望消息队列有高可用性支持,例如RabbitMQ的镜像集群模式的高可用性方案,ActiveMQ也有基于LevelDB+ZooKeeper的高可用性方案,以及Kafka的Replication机制等。

activemq用spring怎么配置messagec***umer

首先,如果知道了activemq的工作原理,以及spring是如何来调用activemq,估计你就知道怎么配置了,这里我先说一下,amq的工作原理和spring在调用amq时的工作流程,然后再给出配置文件,相信你会更加明白。

工作的时候,部署结构如下(图有点大,使用右键-》在新标签页打开):

针对上面的produce message,详细的过程如下(图有点大,使用右键-》在新标签页打开):

针对c***ume message,详细过程如下:

spring的配置文件其实,很简单:

生产:

《?xml version="***" encoding="UTF-8"?》
《beans xmlns="
xmlns:xsi="
xsi:schemaLocation="
《bean id="connf" class="*****"》
《property name="brokerURL" value="tcp://localhost:61616"》《/property》
《/bean》
《bean id="mydest" class="*****"》
《c***tructor-arg index="0" value="*****"》《/c***tructor-arg》
《/bean》
《bean id="jmsTemplate" class="*****"》
《property name="connectionFactory" ref="connf"》《/property》
《/bean》
《/beans》

消费:

《?xml version="***" encoding="UTF-8"?》

《beans xmlns="
xmlns:xsi="
xsi:schemaLocation="
《bean id="connf" class="*****"》
《property name="brokerURL" value="tcp://localhost:61616"》《/property》
《/bean》
《bean id="mydest" class="*****"》
《c***tructor-arg index="0" value="*****"》《/c***tructor-arg》
《/bean》
《bean id="jmsTemplate" class="*****"》
《property name="connectionFactory" ref="connf"》《/property》
《property name="defaultDestination" ref="mydest"》《/property》
《/bean》
《/beans》

综上所述,activemq工作原理是一个涉及多方面知识的领域,其中消息队列核心原理是一个基础且重要的概念。理解两者有助于构建完整的知识框架。
本文编辑:admin

更多文章:


google商店(什么手机自带谷歌商店)

google商店(什么手机自带谷歌商店)

今天给各位分享什么手机自带谷歌商店的知识,其中也会对什么手机自带谷歌商店进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年5月9日 00:20

gecko引擎(Gecko的内核有什么优点吗)

gecko引擎(Gecko的内核有什么优点吗)

老铁们,关于gecko引擎,你可能听过不少说法。今天,咱们就坐下来好好聊聊Gecko的内核有什么优点吗,保证让你豁然开朗。

2026年5月9日 00:00

activemq工作原理(消息队列核心原理)

activemq工作原理(消息队列核心原理)

你有没有想过,activemq工作原理的关键突破口,可能就藏在消息队列核心原理之中?本篇内容将为你验证这个猜想。

2026年5月8日 23:40

string转json数组(java String字符串怎么转换成List,还是说先转换成json,再由json转换成list)

string转json数组(java String字符串怎么转换成List,还是说先转换成json,再由json转换成list)

其实string转json数组的问题并不复杂,但是又很多的朋友都不太了解java String字符串怎么转换成List,还是说先转换成json,再由json转换成list,因此呢,今天小编就来为大家分享string转json数组的一些知识,

2026年5月8日 23:20

python爬虫兼职靠谱吗(python爬虫怎样赚外快)

python爬虫兼职靠谱吗(python爬虫怎样赚外快)

在了解python爬虫兼职靠谱吗的过程中,您是否也曾对python爬虫怎样赚外**到困惑?别担心,接下来我将结合常见场景,带您一步步理清其中的关键点。

2026年5月8日 23:00

位与运算符是&还是|?位运算符

位与运算符是&还是|?位运算符

今天给各位分享位与运算符是&还是|的知识,其中也会对位与运算符是&还是|进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年5月8日 22:40

梦幻西游官方网站是?梦幻西游官方网是什么

梦幻西游官方网站是?梦幻西游官方网是什么

从一个常见的误区说起:很多人学梦幻建站网,却忽略了梦幻西游官方网站是。结果事倍功半。希望你不会再犯这个错误。

2026年5月8日 22:20

手机直播原生源码可以搭建哪些直播app当中的功能?备忘录版李峋爱心代码 李峋爱心代码可复制链接

手机直播原生源码可以搭建哪些直播app当中的功能?备忘录版李峋爱心代码 李峋爱心代码可复制链接

我们注意到,那些在独爱源码上表现突出的人,往往都对手机直播原生源码可以搭建哪些直播app当中的功能有独到的见解。这并非巧合。

2026年5月8日 22:00

javaurl解码(在java中%c0%ae经过url解码为什么会变成)

javaurl解码(在java中%c0%ae经过url解码为什么会变成)

本篇内容旨在成为您理解javaurl解码的实用手册,其中在java中%c0%ae经过url解码为什么会变成将是我们要重点打磨的章节。

2026年5月8日 21:40

mysql查看索引(如何查看mysql数据库的引擎)

mysql查看索引(如何查看mysql数据库的引擎)

当我们讨论mysql查看索引时,我们真正需要关注的是什么?很多高手的答案都指向了:如何查看mysql数据库的引擎。为什么?

2026年5月8日 21:20

最近更新

上样buffer(wb上样前需要把loading buffer与样品混匀吗)
2026-05-09 00:40:02 浏览:0
google商店(什么手机自带谷歌商店)
2026-05-09 00:20:03 浏览:0
gecko引擎(Gecko的内核有什么优点吗)
2026-05-09 00:00:03 浏览:0
string转json数组(java String字符串怎么转换成List,还是说先转换成json,再由json转换成list)
2026-05-08 23:20:03 浏览:0
位与运算符是&还是|?位运算符
2026-05-08 22:40:04 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
标签列表