ActiveMQ Artemis如何通过JMX/Jolokia获取已配置acceptors列表
ActiveMQ Artemis通过Jolokia批量获取acceptor并重载TLS证书方案
问题根因
直接查询broker根MBean的请求仅返回broker核心属性,acceptor属于独立子组件MBean,需要指定对应的组件路径才能查询到相关信息。另外注意原请求中的broker名称拼写为
borker-primary-0,请先确认是否和实际部署的broker名称一致,拼写错误也会导致查询结果不符合预期。
1. 获取所有已配置的acceptor名称
使用如下curl请求可直接查询所有acceptor的MBean信息:
curl -s -f -u username:password -H 'Origin: localhost' 'http://127.0.0.1:8161/console/jolokia/read/org.apache.activemq.artemis:broker="broker-primary-0",component=acceptors,name=*'
结合jq工具可以直接提取所有acceptor的名称列表:
curl -s -f -u username:password -H 'Origin: localhost' 'http://127.0.0.1:8161/console/jolokia/read/org.apache.activemq.artemis:broker="broker-primary-0",component=acceptors,name=*' | jq -r '.value | keys[]'
2. 批量重载所有acceptor的TLS证书
可通过如下shell脚本实现自动获取acceptor列表并批量执行重载操作,无需跟随配置变更修改代码:
# 自定义配置项 BROKER_NAME="broker-primary-0" JOLOKIA_ENDPOINT="http://127.0.0.1:8161/console/jolokia" AUTH_CRED="username:password" # 拉取所有acceptor名称 ACCEPTOR_LIST=$(curl -s -f -u "$AUTH_CRED" -H 'Origin: localhost' "$JOLOKIA_ENDPOINT/read/org.apache.activemq.artemis:broker=\"$BROKER_NAME\",component=acceptors,name=*" | jq -r '.value | keys[]') # 循环执行重载 for ACCEPTOR_NAME in $ACCEPTOR_LIST; do echo "正在重载acceptor:$ACCEPTOR_NAME" curl -s -f -u "$AUTH_CRED" -H 'Origin: localhost' -H 'Content-Type: application/json' \ "$JOLOKIA_ENDPOINT/exec/org.apache.activemq.artemis:broker=\"$BROKER_NAME\",component=acceptors,name=\"$ACCEPTOR_NAME\"/reload()" done
版本适配说明
- 该方案仅支持ActiveMQ Artemis v2.18.0及以上版本,该版本开始正式支持acceptor的TLS证书热重载能力
- 仅配置了TLS参数的acceptor执行重载操作会生效,未配置TLS的acceptor执行该操作无额外影响
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

