如何强制 ActiveMQ 客户端设置客户端 ID 和订阅名称

How to force ActiveMQ client to set client id and subscription name

我的 MQ 服务器是用 ActiveMQ Artemis 2.17.0 构建的。

最近我发现有些客户端连接到我的 ActiveMQ Artemis 时没有设置客户端 ID 和订阅以及订阅某些主题。他们的队列变成了 UUID,如下所示:

所以,我想知道如何强制 ActiveMQ 客户端设置客户端 ID 和订阅名称?如果他们不配置客户端 ID 和订阅名称,ActiveMQ Artemis 可以将他们踢出去。

您不能完全强制 客户端设置其客户端 ID 和订阅名称,但您可以更改安全授权配置以防止客户端创建非持久订阅。

非持久订阅者创建非持久队列,它使用网络控制台屏幕截图中显示的 UUID 命名约定。如果你想阻止这种情况,请修改 broker.xml 中的 security-settings 并删除 typecreateNonDurableQueuepermission。这是默认值 security-settings:

      <security-settings>
         <security-setting match="#">
            <permission type="createNonDurableQueue" roles="amq"/>
            <permission type="deleteNonDurableQueue" roles="amq"/>
            <permission type="createDurableQueue" roles="amq"/>
            <permission type="deleteDurableQueue" roles="amq"/>
            <permission type="createAddress" roles="amq"/>
            <permission type="deleteAddress" roles="amq"/>
            <permission type="consume" roles="amq"/>
            <permission type="browse" roles="amq"/>
            <permission type="send" roles="amq"/>
            <!-- we need this otherwise ./artemis data imp wouldn't work -->
            <permission type="manage" roles="amq"/>
         </security-setting>
      </security-settings>

这是我指的权限:

<permission type="createNonDurableQueue" roles="amq"/>

如果您删除 permission permission 中删除用户角色,则该用户将无法再创建非持久性在匹配的地址上排队。但是,只要他们拥有 createDurableQueuedeleteDurableQueue 权限,他们就能够创建和删除持久订阅。