ActiveMQ Artemis

Artemis版本作为Classic版本的替代品而诞生,相较的提升点有:

高性能与低延迟:Artemis通过改进的设计实现了更高的吞吐量和更低的消息处理延迟。
存储机制:使用了不同的持久化策略和日志结构Journal文件系统,以获得更好的写性能和恢复速度。
内存管理:内存使用效率更高,尤其是在处理大量小消息时表现更好。
集群和HA:提供了更先进的高可用性解决方案和更灵活的集群模式。
协议支持:除了原有的JMS之外,对AMQP 1.0的支持更加成熟和完善,并且也支持STOMP等多种协议。
架构更新:整体架构更为现代化,为云原生环境和大规模分布式部署进行了优化。

Artemis消息默认会持久化到journal目录下,journal单个日志文件默认10MB,默认会预分配2个日志文件。当数量超过10个日志文件并且实时消息占到30%时,会启动压缩日志文件。
默认所有队列能保存的消息总数为jvm启动内存的一半。当队列占用jvm内存一半时,接收到的消息默认会paging到paging目录下,每个paging日志文件默认也是10MB。
默认的max-disk-usage为90%,即artemis会监测数据目录所在的文件系统,使用率超过90%时,不再接收生产者发送的消息。

当修改了broker.xml配置文件,artemis会自动reload配置而无须重启进程。默认artemis每隔5秒检测一次broker.xml配置文件是否被修改。

page-sync-timeout,journal-buffer-timeout为artemis自身评估生成的值。

#号表示匹配除管理队列之外的所有队列

此命令可以查看队列状态,也可以应用于自定义监控,如zabbix中自定义的队列积压监控告警

1
2
3
4
5
6
7
8
9
10
11
12
13
./artemis queue stat --user xxxx  --password xxxx
stat
prints out basic stats associated with queues. Output includes
CONSUMER_COUNT (number of consumers), MESSAGE_COUNT (current message
count on the queue, including scheduled, paged and in-delivery
messages), MESSAGES_ADDED (messages added to the queue),
DELIVERING_COUNT (messages broker is currently delivering to
consumer(s)), MESSAGES_ACKED (messages acknowledged from the
consumer(s)). Queues can be filtered using EITHER '--queueName X'
where X is contained in the queue name OR using a full filter
'--field NAME --operation EQUALS --value X'.


在主节点进行操作
1.将安装包放入解压至data目录

1
2
tar xvf apache-artemis-2.19.1-bin.tar.gz -C /data/
cd apache-artemis-2.19.1

2.创建一个broker实例:

1
bin/artemis create --user admin --password admin --require-login --clustered --cluster-user admin --cluster-password admin --encoding UTF-8 --replicated --host 10.8.1.54 --staticCluster "tcp://10.8.1.54:61616,tcp://10.8.1.55:61616,tcp://10.8.1.56:61616" brokers

3.修改配置文件:

1
2
3
4
5
6
cd brokers/etc
cp artemis.profile artemis.profile_bak
artemis.profile
-Xms512M -Xmx2G 修改为 -Xms6G -Xmx6G
修改bootstrap.xml
bind="http://localhost:8161" 改成bind="http://10.8.1.54:8161"

4.修改broke.yaml

1
2
3
4
5
cp broke.yaml broke.yaml_bak
<expiry-delay>172800000</expiry-delay>
<global-max-size>5000Mb</global-max-size>
vi jolokia-access.xml
<allow-origin>*://localhost*</allow-origin> 改成<allow-origin>*://*</allow-origin>

在从节点进行操作(添加–slave参数,表示该节点为从节点),其它操作与主节点一致

1
bin/artemis create --user admin --password admin --require-login --clustered --cluster-user admin --cluster-password admin --encoding UTF-8 --replicated --host 10.8.1.55 --staticCluster "tcp://10.8.1.54:61616,tcp://10.8.1.55:61616,tcp://10.8.1.56:61616"  --slave brokers

部署完成后默认为1主1从1仲裁,界面中只有主从能获取队列信息,仲裁节点负责主从节点的心跳监控和接管,当主节点故障时,从节点升级为主节点,仲裁节点接管为从节点。

在artemis界面operations中的resetUser可以修改artemis界面的登录用户密码,

username: 用户名
role:可以通过broke安装目录的artemis-roles.properties配置文件中查看
password: 密码
plaintext:勾选时密码会在artemis-users.properties配置文件中以明文保存,不勾选则会进行hash加密保存。
执行成功后文件会进行更新,修改只会影响当前主机artemis登录密码,其它节点artemis登录密码不会进行同步
注:artemis有页面登录用户和访问控制用户,修改后者时需慎重,修改后需要重启生产者程序与消费组程序,否则程序报错(用户认证失败)无法连接mq。