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

news2024/11/22 19:42:19

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 queue

dtsat就是显示图形化中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.coloradmin.cn/o/1457935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况: 可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找,最终明白了原因…

使用静态CRLSP配置MPLS TE隧道

正文共:1591 字 13 图,预估阅读时间:4 分钟 静态CRLSP(Constraint-based Routed Label Switched Paths,基于约束路由的LSP)是指在报文经过的每一跳设备上(包括Ingress、Transit和Egress&#xf…

DBeaver通用数据库管理 连接DM8 数据库及其配置

一.工具版本说明 DBeaver版本: 21.0.202106012023, 推荐官网下载。 DM8/达梦数据库: DM 8 Windows 官网安装手册 如果想深入了解DM8 数据库操作请参考:DM8/达梦 数据库管理员使用手册详解 二.DM8/达梦驱动下载 下载渠道/官方文档 DM 8/达梦技术…

LeetCode JS专栏刷题笔记(一)

一、前言 LeetCode 在前不久出了一个 JavaScript 专栏,这个专栏一个目的是为了非前端工程师学习 JS,另一个是为了前端工程师提升 JS 能力。 因此在这个专栏中,基本不涉及什么具体算法问题,都是一些 JS 的入门语法与常见的 JS 面…

Maven(基础)、MyBatis

简介 Apache Maven是一个项目管理和构建工具,它基于项目对象模型 (POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档 官网: http://maven.apache.org/ Maven作用 Maven是专门用于管理和构建Java项目的工具,它的主要功能有&#x…

Elasticsearch查询报错 Result window is too large

一现象: es数据分页查询前端提示系统异常,后端报错日志 二根本原因: 默认情况下,Elasticsearch 限制了 from size 参数的组合不能超过 10,000 条记录,用于防止查询大数据集时对系统资源的过度消耗 三解决办法&#…

JavaSE——面向对象基础(1/4)-面向对象编程、程序中的对象、对象的产生、对象的执行原理、类和对象的一些注意事项

目录 面向对象编程 程序中的对象 对象的产生 对象的执行原理 类和对象的一些注意事项 面向对象编程 开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。 例如设计一个学生的对象,其中有姓名和成绩等&#xff0c…

可视化视频监控平台EasyCVR如何配置服务参数以免getbaseconfig接口信息泄露?

可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,平台支持高清视频的接入和传输、分发,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集…

【.NET Core】C#编程规范

【.NET Core】C#编程规范 文章目录 【.NET Core】C#编程规范一、概述1.1 结构清晰第一1.2 简洁之风1.3 代码风格保持一致性 二、命名约定三、类型参数命名指南3.1 请使用描述性名称命名泛型类型参数,除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用…

Redis(03)——发布订阅

基础命令 基于频道 publish channel message:将信号发送到指定的频道pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态subscribe channel [channel]:订阅一个或多个频道的信息unsubscribe [channel [channel]]:退…

CSS:BFC

BFC,Block Formatting Context,块级格式化上下文,是一个独立的渲染区域或隔离的独立容器,它决定了其子元素如何布局,并且与这个区域外部的元素无关。 形成 BFC 的条件 float 的值不为 none(left、right&a…

【Node.js和Appium server的下载安装步骤】

Node.js 是JavaScript的运行环境,是 JS 语言的解释器,之中集成了npm库。 npm 是世界上最大软件包仓库,可用于Appium server安装。 1、Node.js官方安装包及源码下载地址:Node.js 选择相应系统的安装包进行下载(.msi用…

c编译器学习02:chibicc文档翻译

目的 先粗略地看一遍作者的书籍。 原文档地址 https://www.sigbus.info/compilerbook# “低レイヤを知りたい人のためのCコンパイラ作成入門” 为想了解底层的人准备的C编译器制作入门 Rui Ueyama ruiucs.stanford.edu 2020-03-16 作者简介 https://www.sigbus.info/ 植山…

知识蒸馏实战代码教学二(代码实战部分)

一、上章原理回顾 具体过程: (1)首先我们要先训练出较大模型既teacher模型。(在图中没有出现) (2)再对teacher模型进行蒸馏,此时我们已经有一个训练好的teacher模型,所以…

C++ 二分模版 数的范围

给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式 第一行包含整数 n 和 q &…

QT串口通讯上位机_数据超时接收功能及定时发送功能设计

目录 1.概述2.本次内容最终实现3.代码部分4.完整工程文件下载 1.概述 基于《串口开发基础》 在该基础上增加超时时间接收功能,加入定时器循环; 例如,接收数据开始后,在100ms内未接收到任何数据,视作本次数据接收结束&…

数据结构第3章 串

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图1、基本概念1)主…

Java+SpringBoot:农业疾病防治新选择

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue

项目是fork的Naccl大佬NBlog项目,页面做的相当漂亮,所以选择了这个。可以参考2.3的效果图 惭愧,工作两年了也没个自己的博客系统,趁着过年时间,开始搭建一下. NBlog原项目的github链接:Naccl/NBlog: &#…

leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 提示 2.解答思…