ActiveMQ高可用架构涉及常用功能整理

ActiveMQ高可用架构涉及常用功能整理

  • 1. activemq的集群模式
  • 2. 镜像模式高可用系统架构和相关组件
    • 2.1 架构说明
    • 2.2 相关概念说明
    • 2.3 消息模型
      • 2.3.1 点对点
      • 2.3.2 发布订阅
  • 3. activemq常用命令
  • 4. activemq配置集群
  • 5. 疑问和思考
    • 5.1 activemq的数据删除策略是怎样的?
    • 5.2 activemq希望一个数据能够被多个消费者消费,该如何实现?
  • 6. 参考文档

探讨activemq的系统架构以及以及整体常用的命令和系统分析,本文主要探讨高可用版本的activemq集群,并基于日常工作中的沉淀进行思考和整理。更多关于分布式系统的架构思考请参考文档关于常见分布式组件高可用设计原理的理解和思考


1. activemq的集群模式

activemq通常只有2种模式架构

  • 单机模式
    通常activemq只是支持单机模式,进行数据存储和提供服务,这种模式下,activemq不支持HA能力。

  • 主从模式
    为了解决单机模式下的高可用问题,activemq能够搭建主从模式,但是由于activemq本身不支持不同节点直接同步数据,因此这种模式下,activemq将数据保存在了远端的数据库。常用的架构如下
    在这里插入图片描述

在这里插入图片描述

2. 镜像模式高可用系统架构和相关组件

2.1 架构说明

activemq的整体架构如下
在这里插入图片描述

相关核心的组件和角色作用如下

组件部署模式组件作用备注
producer客户端部署生产者创建消息消息一般可以包含 2 个部分: 消息体和标签
broker多机部署它负责接收、存储和管理消息数据接收和存储消息数据:activemq broker接收来自producer发送的消息,并将这些消息存储在自己的磁盘上。
consumer客户端部署消费者连接到 ActiveMQ 服务器,订阅到队列。消费者消费一条消息时,只消费消息的消息体(payload)在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者只会消费到消息体,也就不知道消息的生产者是谁,当然消费者也不需要知道

镜像镜像队列本质上是一个HA模式的集群

  • Leader提供读写服务,数据写入需要从Leader开始,而后同步到Follower节点
  • Follower提供读服务

普通模式配置镜像模式,只需要进行如下配置即可。

# 所有队列exchangess都为镜像模式
activemqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...# # 所有队列queue都为镜像模式
activemqctl set_policy --priority 0 --apply-to queues mirror_queue "^" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

在这里插入图片描述

2.2 相关概念说明

角色说明角色作用备注
channel消息通道,在客户端的每个连接里,可建立多个 channel,每个 channel 代表一个会话任务
exchange消息交换机,它指定消息按什么规则,路由到哪个队列交换机提供了消息的路由能力,根据不同的消息特性提供不同的路由策略
routing key路由关键字,exchange 根据这个关键字进行消息投递
binding绑定,它的作用就是把 exchange 和 queue 按照路由规则绑定起来
vhost虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离消息和权限设计都是基于vhost,可以通过vhost配置多租户进行数据和权限隔离

2.3 消息模型

activemq的消息发布模型只有2种

  • 点对点: 一条消息只能被消费一次,消费后就会被删除,发布者和消费者能够解耦
  • 发布/订阅: 一条消息能够被多个消费者订阅,消费者只能订阅到后续的消息(不会维护消费位点,因此消费者订阅的消息是可能会出现丢失的)

2.3.1 点对点

在这里插入图片描述
在点对点通信模式中,应用程序由消息队列,发送方,接收方组成,每个消息队列都被发送到一个特定的队列, 接收者从队列中获取消息,队列保留这消息,直到他们被消费或者超时.

特点

  • 每个消息只要一个消费者.
  • 发送者和接收者在时间上是没有时间的约束,即发送者在发送完消息后,不管接收者有没有接收消息,都不会影响发送方发送消息到消息队列中.
  • 发送方不管是否在发送消息,接收方都可以从消息队列中去到消息.
  • 接收方在接收完消息之后,需要向消息队列应答成功.### 2.3.2 发布订阅

2.3.2 发布订阅

在这里插入图片描述

在发布/订阅消息模型中,发布者发布一个消息,该消息是topic传递给所有的客户端。在该模式下,发布者和订阅者都是匿名的,即发布者与订阅者都不知道对方是谁.并且可以动态的发布和订阅Topic。Topic主要用于保存和传递消息,且会一直保存消息直到消息被传递给客户端.

特点

  • 一个消息可以传递多个订阅者
  • 发布者和订阅者具有时间约束,这一点和上面的点对点模式是相反的. 针对某个主题(Topic)的订阅者.它必须创建一个订阅者之后,才能消费发布者的消息.而且是为了消费消息,订阅者必须保持运行的状态.
  • 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅,这样,即使订阅者没有被激活(运行),他也能接收到发布者的消息.

3. activemq常用命令

#启动
activemq start#停止
activemq stop# 删除队列中的所有消息,队列名称是FOO.BAR
activemq purge FOO.BAR# 显示默认broker的所有主题和队列统计信息
activemq dstat# 显示的主题统计信息
activemq dstat topics# 显示队列的统计信息
activemq dstat queuedtsat就是显示图形化中query的图。
Queue Size 表示queue的大小。 Producer表示生产者
Consumer 消费者
Enqueue 一共进入了多少队列
Dequeue 一共消费的多少队列

4. activemq配置集群

参考文档 ActiveMQ高可用集群部署方案

5. 疑问和思考

5.1 activemq的数据删除策略是怎样的?

ActiveMQ 提供了两种清除策略,用于清理过期的消息:

  • 消费删除:1个队列中的消息,被消费后就会被主动删除
  • 删除策略(Delete Policy):该策略会直接删除过期的消息,释放存储空间。可以通过设置 expiryDelay 参数来配置消息的过期时间。默认情况下,消息在没有消费者消费的情况下会一直保留,直到达到过期时间。
  • 移动策略(Move Policy):该策略会将过期的消息移动到一个指定的目标队列,而不是直接删除。可以通过设置 deadLetterStrategy 参数来指定目标队列。移动策略可以用于日志记录和审计等需求,以便在稍后分析过期消息。

这些清除策略可以单独或同时使用,根据需要进行配置。请注意,配置清除策略可能会影响 ActiveMQ 的性能和存储空间使用情况,所以需要根据具体情况进行权衡和调整。

5.2 activemq希望一个数据能够被多个消费者消费,该如何实现?

只能使用发布订阅模式,但是也通常要求消费者实时在线,否则消费者可能无法消费到完整的数据。

6. 参考文档

暂无

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医学生物化学与生物分子学试题及答案,分享几个实用搜题和学习工具 #经验分享#学习方法#其他

大学生的学习生活离不开一些实用的工具,它们能够帮助我们更高效地学习和管理时间。 1.大鱼搜题 这是一个公众号 包括教材课后习题,连冷门网课习题也能找到标准答案,日常练习和备考刷真题都离不开、 下方附上一些测试的试题及答案 1、仓储…

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车

常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能,如果不采用红外避障的方案,那么想要完全满足以上这些功能,摄像头、电机、传感器这类关键部件缺一不可,由此一来小车成本也就难以控制了。 但如果&a…

JavaWeb学习(1)数据库相关概念,mysql数据库管理系统,SQL语句

数据库相关概念 数据库: 存储数据的仓库,数据是有组织的进行存储 英文:DataBase 简称DB 数据库管理系统: 管理数据库的大型软件 英文:DataBase Management System,简称DBMS SQL 英文:Stry…

Java项目,营销抽奖系统设计实现

作者:小傅哥 博客:https://bugstack.cn 项目:https://gaga.plus 沉淀、分享、成长,让自己和他人都能有所收获!😄 大家好,我是技术UP主,小傅哥。 经过这个假期的嘎嘎卷🧨…

你真的了解—————NumPy吗

🌈个人主页:小田爱学编程 🔥 系列专栏:opencv 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ 😁 喜欢的…

深入探讨JMeter中不为人知的JSONPath用法

在jmeter使用过程中,我们经常会看到接口返回数据类型为application/json,也就时我们常说的json格式。 而在功能测试时,我们经常会要对它的结果进行断言,确认结果是否与预期一致,有时候还会想从结果中提取某个值&#…

VMware还原Windows11 ghost镜像

文章目录 环境步骤准备制作启动iso文件创建虚拟机启动虚拟机还原Windows 参考 环境 Windows 11 家庭中文版VMware Workstation 17 Pro石大师装机大师Windows 11 ghost系统镜像 步骤 准备 下载好Windows 11 ghost系统镜像,我下载的文件是 FQ_WIN11_X64_VDL_V2080…

sentinel的资源数据指标是如何采集

资源数据采集 之前的NodeSelectorSlot和ClusterBuilderSlot已经完成了对资源调用树的构建, 现在则是要对资源进行收集, 核心点就是这些资源数据是如何统计 LogSlot 作用: 记录异常请求日志, 用于故障排查 public class LogSlot extends AbstractLinkedProcessorSlot<Def…

Keepalived实现Nginx的高可用集群案例

服务器规划: serverb(nginx2):192.168.233.144 serverc(客户端):192.168.233.140 serverd(nginx1):192.168.233.141 结构图: serverd(nginx1): # 安装nginx yum install nginx -y# 进入nginx配置目录 cd /e…

爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)

1.终端运行scrapy startproject movie,创建项目 2.接口查找 3.终端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,运行 scrapy genspider mv https://dy2018.com/ 4.打开mv,编写代码,爬取电影名和网址 5.用爬取的网址请求,使用meta属性传递name ,callback调用自定义的…

【2024软件测试面试必会技能】Unittest(3):unittest_断言操作

unittest断言 断言即进行预期结果和实际结果比对 unittest中常用的assert语句 assertEqual(a, b)    a b assertNotEqual(a, b)    a ! b assertTrue(x)        bool(x) is True assertFalse(x)       bool(x) is False assertIs(a, b)…

【教3妹学编程-算法题】相同分数的最大操作数目 II

3妹&#xff1a;2哥&#xff0c;干嘛呢&#xff0c;怎么又在吃泡面 2哥 : 这不是过年下血本&#xff0c;给小侄子买了一个ps5吗&#xff0c; 哎&#xff0c;我自己都舍不得用&#xff0c;不能让人说咱小气不是。 3妹&#xff1a;神马&#xff0c;他才6岁吧&#xff0c; 就这么喜…