ActiveMQ笔记:一个高稳定,可扩展的的部署方案

简介:

本文介绍一个笔者在实际工作中的实施的基于ActiveMQ的一个高稳定,可扩展的异步消息系统。

ActiveMQ是一个成熟的基于Java语言的开源消息系统,在实际应用中被大量使用。ActiveMQ在系统稳定性,系统的容错和扩展等方面都有很多成熟的方案,也有很多开源的管理工具,是部署异步消息系统的一个很好的选择。

ActiveMQ工作机制

ActiveMQ有两种消息使用方式:

l  Queue模式:Producer发出到Queue里的消息,只能由一个Consumer来使用。

l  Topic模式:Producer发送到Topic里的消息,会传送到Subscribe这个Topic的每一个Consumer。

 

Producer发出的消息有两种Delivery模式。

l  Persistent:Broker需要保存消息,然后把消息发送到Consumer。如果Broker崩溃后,重新启动后保存的消息可以重新发送给Consumer。

l  NonPersistent:Broker不需要保存消息,直接把消息发送到Consumer。

 

ActiveMQ可以通过Networks of Brokers方式将多个Broker组成一个Cluster。Producer和Consumer可以任意的连接到该Cluster中的任意一个Broker。Producer发送的消息可以通过Cluser传送到需要的Consumer。

 

ActiveMQ提供了Master Slave机制实现Broker的HA,有以下几种方式:

l  JDBC Master Slave

l  Shared File System Master Slave

l  KahaDB Replication(ZooKeeper experimental)

同一个Broker,只能有一个Master来传送消息。当Master崩溃后,其他的一个Slave可以作为Master。采用HA的模式,会增加系统的复杂性,也会影响系统的性能。

方案

实际部署中,ActiveMQ采用Queue的消息使用模式。Producer发送的消息使用Persistent的Delivery模式。

 

在两个node上部署ActiveMQ的Broker,通过ActiveMQ的Networks of Brokers方式来组成Cluster。

 

系统里的消息应用Instance通过ActiveMQ提供的client类库采用failover TCP的方式随机的接入到ActiveMQ的cluster中。正常情况下,消息应用Instance可以通过ActiveMQ的cluster机制正常通信。如果某个ActiveMQ的node崩溃后,client会自动检测到该情况,切换到另一个ActiveMQ的node。

 

由于本系统只采用Queue的消息工作方式,而且消息的传送采用persistent的模式。如果一个node崩溃后,重新启动后,保存的消息还可以重新发送到Consumer。对Broker,就不采用Master/Slave的HA模式,避免增加系统的复杂性和降低系统的性能。

 

配置

ActiveMQ的Broker的配置如下。

 

#Broker 1:

<!-- The transport connectors ActiveMQ will listen to -->

<transportConnectors>

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>

</transportConnectors>

 

<!--

The store and forward broker networks ActiveMQ will listen to.

We'll leave it empty as duplex network will be configured by another broker.

-->

<networkConnectors>

</networkConnectors>

 

#Broker 2:

<!-- The transport connectors ActiveMQ will listen to -->

<transportConnectors>

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>

</transportConnectors>

 

<!--

The store and forward broker networks ActiveMQ will listen to

Create a duplex connector to the first broker

-->

<networkConnectors>

<networkConnector uri="static:(tcp://{Broker1Ip}:61616)" duplex="true"/>

</networkConnectors>

目录
相关文章
|
XML 搜索推荐 API
通义千问API:让大模型使用各种工具
本章我们将通过一个简单的例子,揭示基于LangChain的Agent开发的秘密,从而了解如何扩展大模型的能力。
通义千问API:让大模型使用各种工具
|
编解码 Linux iOS开发
openEuler系统下neofetch工具的安装与基本使用
【10月更文挑战第2天】openEuler系统下neofetch工具的安装与基本使用
301 1
openEuler系统下neofetch工具的安装与基本使用
|
11月前
|
传感器 XML IDE
探索安卓应用开发:从基础到进阶
【10月更文挑战第23天】在数字化时代的浪潮中,移动应用已成为人们日常生活的延伸。本文以安卓平台为例,深入浅出地介绍了如何从零开始构建一个安卓应用,涵盖了开发环境搭建、基本组件使用、界面设计原则以及进阶技巧等关键步骤。通过实例演示和代码片段,引导读者逐步掌握安卓应用开发的核心技能,旨在激发更多开发者对安卓平台的探索热情,并为初学者提供一条清晰的学习路径。
|
数据安全/隐私保护
STM32F103C8T6实现简易密码锁(CubeMax配置)(一),Oled显示。
项目功能:实现设置密码,登陆密码,后期还可以通过E2PROM实现掉电不丢失数据。通过Oled的显示去判断我们是否设置或者登陆成功。
435 0
|
Kubernetes Cloud Native 持续交付
云原生技术的演变与未来趋势
在数字化转型的浪潮中,云原生技术成为推动现代软件开发、部署和运营的关键力量。本文将深入探讨云原生技术从诞生到成熟的过程,分析其在当前企业中的应用现状,并预测未来的发展趋势。通过引用最新的行业报告和科学研究,文章旨在为读者提供对云原生技术演进的深刻见解,并揭示其对企业IT架构的长远影响。
|
监控 前端开发 应用服务中间件
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
996 0
|
移动开发 人工智能 文字识别
如何在H5中实现OCR拍照识别身份证功能
如何在H5中实现OCR拍照识别身份证功能
864 0
|
消息中间件 监控 网络协议
Kafka 监听器详解
在这篇文章中,我将谈论为什么这是有必要的配置 `listeners` 和 `advertised.listeners`,然后展示如何基于几个场景--Docker和AWS来做。
1301 1
VScode个人开发常用的键盘快捷键(Mac版)
VScode个人开发常用的键盘快捷键(Mac版)
VScode个人开发常用的键盘快捷键(Mac版)
|
Java API 开发者
JSR 269插件化注解处理实践(以模拟Lombok自动生成getter/setter为例)
JSR 269是jdk1.6中引入的,在此之前,开发者只能在运行期对注解进行处理,而JSR 269允许开发这在编译期对注解进行处理,以此可以完成很多java不支持的特性,甚至创造新的语法糖。大名鼎鼎的lombok就是基于JSR 269来实现的。1. 原理介绍javac的编译过程如下图所示:可以看到JSR 269,也就是注解处理在编译产生抽象语法树AST之后,在此处插入一些逻辑,并且可以对AST进行
1045 0
JSR 269插件化注解处理实践(以模拟Lombok自动生成getter/setter为例)