[ 
https://issues.apache.org/jira/browse/ARTEMIS-3952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17583374#comment-17583374
 ] 

gongping.zhu edited comment on ARTEMIS-3952 at 8/23/22 5:50 AM:
----------------------------------------------------------------

broker.xml

 

<?xml version='1.0'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

[http://www.apache.org/licenses/LICENSE-2.0]

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->

<configuration xmlns="urn:activemq"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xi="http://www.w3.org/2001/XInclude";
xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">

<core xmlns="urn:activemq:core" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="urn:activemq:core ">

<name>brokernode</name>

<persistence-enabled>false</persistence-enabled>

<!-- this could be ASYNCIO, MAPPED, NIO
ASYNCIO: Linux Libaio
MAPPED: mmap files
NIO: Plain Java Files
-->
<journal-type>NIO</journal-type>

<paging-directory>data/paging</paging-directory>

<bindings-directory>data/bindings</bindings-directory>

<journal-directory>data/journal</journal-directory>

<large-messages-directory>data/large-messages</large-messages-directory>

<!-- if you want to retain your journal uncomment this following configuration.

This will allow your system to keep 7 days of your data, up to 10G. Tweak it 
accordingly to your use case and capacity.

it is recommended to use a separate storage unit from the journal for 
performance considerations.

<journal-retention-directory period="7" unit="DAYS" 
storage-limit="10G">data/retention</journal-retention-directory>

You can also enable retention by using the argument journal-retention on the 
`artemis create` command -->

<journal-datasync>true</journal-datasync>

<journal-min-files>2</journal-min-files>

<journal-pool-files>10</journal-pool-files>

<journal-device-block-size>4096</journal-device-block-size>

<journal-file-size>10M</journal-file-size>

<!--
This value was determined through a calculation.
Your system could perform 0.07 writes per millisecond
on the current journal configuration.
That translates as a sync write every 13596000 nanoseconds.

Note: If you specify 0 the system will perform writes directly to the disk.
We recommend this to be 0 if you are using journalType=MAPPED and 
journal-datasync=false.
-->
<journal-buffer-timeout>13596000</journal-buffer-timeout>

<!--
When using ASYNCIO, this will determine the writing queue depth for libaio.
-->
<journal-max-io>1</journal-max-io>
<!--
You can verify the network health of a particular NIC by specifying the 
<network-check-NIC> element.
<network-check-NIC>theNicName</network-check-NIC>
-->

<!--
Use this to use an HTTP server to validate the network
<network-check-URL-list>[http://www.apache.org|http://www.apache.org/]</network-check-URL-list>
 -->

<!-- <network-check-period>10000</network-check-period> -->
<!-- <network-check-timeout>1000</network-check-timeout> -->

<!-- this is a comma separated list, no spaces, just DNS or IPs
it should accept IPV6

Warning: Make sure you understand your network topology as this is meant to 
validate if your network is valid.
Using IPs that could eventually disappear or be partially visible may defeat 
the purpose.
You can use a list of multiple IPs, and if any successful ping will make the 
server OK to continue running -->
<!-- <network-check-list>10.0.0.1</network-check-list> -->

<!-- use this to customize the ping used for ipv4 addresses -->
<!-- <network-check-ping-command>ping -c 1 -t %d 
%s</network-check-ping-command> -->

<!-- use this to customize the ping used for ipv6 addresses -->
<!-- <network-check-ping6-command>ping6 -c 1 %2$s</network-check-ping6-command> 
-->

<!-- how often we are looking for how many bytes are being used on the disk in 
ms -->
<disk-scan-period>5000</disk-scan-period>

<!-- once the disk hits this limit the system will block, or close the 
connection in certain protocols
that won't support flow control. -->
<max-disk-usage>90</max-disk-usage>

<!-- should the broker detect dead locks and other issues -->
<critical-analyzer>true</critical-analyzer>

<critical-analyzer-timeout>120000</critical-analyzer-timeout>

<critical-analyzer-check-period>60000</critical-analyzer-check-period>

<critical-analyzer-policy>HALT</critical-analyzer-policy>

<page-sync-timeout>13596000</page-sync-timeout>

<!-- the system will enter into page mode once you hit this limit. This is an 
estimate in bytes of how much the messages are using in memory

The system will use half of the available memory (-Xmx) by default for the 
global-max-size.
You may specify a different value here if you need to customize it to your 
needs.

<global-max-size>100Mb</global-max-size> -->

<!-- the maximum number of messages accepted before entering full address mode.
if global-max-size is specified the full address mode will be specified by 
whatever hits it first. -->
<global-max-messages>-1</global-max-messages>

<acceptors>

<!-- useEpoll means: it will use Netty epoll if you are on a system (Linux) 
that supports it -->
<!-- amqpCredits: The number of credits sent to AMQP producers -->
<!-- amqpLowCredits: The server will send the # credits specified at 
amqpCredits at this low mark -->
<!-- amqpDuplicateDetection: If you are not using duplicate detection, set this 
to false
as duplicate detection requires applicationProperties to be parsed on the 
server. -->
<!-- amqpMinLargeMessageSize: Determines how many bytes are considered large, 
so we start using files to hold their data.
default: 102400, -1 would mean to disable large mesasge control -->

<!-- Note: If an acceptor needs to be compatible with HornetQ and/or Artemis 
1.x clients add
"anycastPrefix=jms.queue.;multicastPrefix=jms.topic." to the acceptor url.
See https://issues.apache.org/jira/browse/ARTEMIS-1644 for more information. -->

<!-- Acceptor for every supported protocol -->
<acceptor 
name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>

<!-- AMQP Acceptor. Listens on default AMQP port for AMQP traffic.-->
<acceptor 
name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true</acceptor>

<!-- STOMP Acceptor. -->
<acceptor 
name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</acceptor>

<!-- HornetQ Compatibility Acceptor. Enables HornetQ Core and STOMP for legacy 
HornetQ clients. -->
<acceptor 
name="hornetq">tcp://0.0.0.0:5445?anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;protocols=HORNETQ,STOMP;useEpoll=true</acceptor>

<!-- MQTT Acceptor -->
<acceptor 
name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true;directDeliver=false;anycastPrefix=$share/;</acceptor>

</acceptors>

<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>

<address-settings>
<!-- if you define auto-create on certain queues, management has to be 
auto-create -->
<address-setting match="activemq.management#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
</address-setting>
<!-{-}default for catch all{-}->
<address-setting match="#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>

<!-- if max-size-bytes and max-size-messages were both enabled, the system will 
enter into paging
based on the first attribute to hits the maximum value -->
<!-- limit for the address in bytes, -1 means unlimited -->
<max-size-bytes>-1</max-size-bytes>
<!-- limit for the address in messages, -1 means unlimited -->
<max-size-messages>-1</max-size-messages>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-addresses>false</auto-delete-addresses>
</address-setting>
</address-settings>

<addresses>
<!-{-}设备管理{-}->
<address name="msg.req.devinfo">
<multicast />
</address>
<address name="msg.req.status">
<multicast />
</address>
<address name="msg.req.stat">
<multicast />
</address>
<address name="msg.req.connect">
<multicast />
</address>
<address name="msg.req.disconnect">
<multicast />
</address>
<address name="msg.req.lwt">
<multicast />
</address>
<address name="rmsg.res.reboot">
<multicast />
</address>
<address name="rmsg.res.hibrate">
<multicast />
</address>
<address name="rmsg.res.awaken">
<multicast />
</address>
<address name="rmsg.res.firmware">
<multicast />
</address>
<address name="rmsg.res.firmwareresume">
<multicast />
</address>
<address name="rrpc.res.alog">
<multicast />
</address>
<address name="rrpc.res.debug">
<multicast />
</address>
<address name="upld.req.rlog">
<multicast />
</address>
<address name="rrpc.res.qlog">
<multicast />
</address>
<address name="rrpc.res.reset">
<multicast />
</address>
<address name="rrpc.res.shell">
<multicast />
</address>
<!-{-}todolist{-}->
<address name="rrpc.res.todolist">
<multicast />
</address>
<address name="rrpc.res.btodolist">
<multicast />
</address>
<!-{-}文件服务{-}->
<address name="rrpc.res.file">
<multicast />
</address>
<address name="rrpc.res.batchfile">
<multicast />
</address>
<!-{-}设备绑定{-}->
<address name="rrpc.res.binding">
<multicast />
</address>
<!-{-}广告分发响应{-}->
<address name="rrpc.res.advert">
<multicast />
</address>
<!-{-}广告播放、点击数据上报{-}->
<address name="upld.req.advert">
<multicast />
</address>
<!-{-}广告投放推送{-}->
<address name="svc.req.advert">
<multicast />
</address>
<!-{-}门禁服务&客流统计{-}->
<address name="upld.req.faceinfo">
<multicast />
</address>
<!-{-}系统自带{-}->
<address name="DLQ">
<anycast>
<queue name="DLQ" />
</anycast>
</address>
<address name="ExpiryQueue">
<anycast>
<queue name="ExpiryQueue" />
</anycast>
</address>
</addresses>

<!-- Uncomment the following if you want to use the Standard 
LoggingActiveMQServerPlugin pluging to log in events-->
<broker-plugins>
<!--
<broker-plugin 
class-name="org.apache.activemq.artemis.core.server.plugin.impl.LoggingActiveMQServerPlugin">
<property key="LOG_ALL_EVENTS" value="true"/>
<property key="LOG_CONNECTION_EVENTS" value="true"/>
<property key="LOG_SESSION_EVENTS" value="true"/>
<property key="LOG_CONSUMER_EVENTS" value="true"/>
<property key="LOG_DELIVERING_EVENTS" value="true"/>
<property key="LOG_SENDING_EVENTS" value="true"/>
<property key="LOG_INTERNAL_EVENTS" value="true"/>
</broker-plugin>
-->
<broker-plugin 
class-name="com.yeker.iot.broker.plugin.impl.ArtemisBrokerPlugin">

<property key="deviceDriver" value="com.mysql.cj.jdbc.Driver" />
<property key="deviceUrl" 
value="jdbc:mysql://d:d/d?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai"
 />
<property key="deviceUsername" value="xxx" />
<property key="devicePassword" value="xxx" />

<property key="accountDriver" value="com.mysql.cj.jdbc.Driver" />
<property key="accountUrl" 
value="jdbc:mysql://d:d/d?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai"
 />
<property key="accountUsername" value="xxx" />
<property key="accountPassword" value="xxxxx" />

<property key="accountAuthEnabled" value="false"/>
<property key="accountAuthQuerySQL" value="select id, scope_id as 
scopeId,user_id as userId,access_key_id as accessKeyId,access_key_secret as 
accessKeySecret from user_device_access_key where access_key_id = ? and 
access_key_secret = ? and status = 0"/>

<property key="deviceDriver" value="com.mysql.cj.jdbc.Driver" />
<property key="deviceUrl" 
value="jdbc:mysql://d:e/e?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai"
 />
<property key="deviceUsername" value="xxxx" />
<property key="devicePassword" value="xxxx" />

<!-{-}设备授权检查&状态同步{-}->
<!-{-}设备授权检查{-}->
<property key="deviceAuthEnabled" value="true"/>
<property key="deviceAuthCheckSQL" value="select id,scope_id,lic_id,dev_id from 
device_auth where lic_id = ?"/>
<property key="deviceAuthLockerSQL" value="update device_auth set dev_id = ? 
where lic_id = ? and dev_id =''"/>
<!-{-}设备授状态同步{-}->
<property key="deviceStatusSyncabled" value="true"/>
<!-{-}在线状态{-}->
<property key="connectUpdateSQL" value="update device_auth set status = 
1,conn_id = ?,client_ip = ?,broker_ip = ? where lic_id = ? and dev_id = ? "/>

<!-{-}设备授状态同步{-}->
<property key="deviceStatusSyncabled" value="true"/>
<!-{-}网络异常状态{-}->
<property key="lwtUpdateSQL" value="update device_auth set status = -1,conn_id 
= null,client_ip = null,broker_ip = '' where lic_id = ? and conn_id = ?"/>
<!-{-}离线状态{-}->
<property key="disconnectUpdateSQL" value="update device_auth set status = 
0,conn_id = null,client_ip = null,broker_ip = '' where lic_id = ? and conn_id = 
?"/>
<!-{-}unregistered{-}->
<property key="resetUpdateSQL" value="update device_auth set status = 0,conn_id 
= null,client_ip = null,broker_ip = '' where broker_ip = ?"/>
</broker-plugin>
</broker-plugins>
</core>
</configuration>


was (Author: JIRAUSER293605):
<?xml version='1.0'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->

<configuration xmlns="urn:activemq"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xi="http://www.w3.org/2001/XInclude";
xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">

<core xmlns="urn:activemq:core" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="urn:activemq:core ">

<name>brokernode</name>


<persistence-enabled>false</persistence-enabled>

<!-- this could be ASYNCIO, MAPPED, NIO
ASYNCIO: Linux Libaio
MAPPED: mmap files
NIO: Plain Java Files
-->
<journal-type>NIO</journal-type>

<paging-directory>data/paging</paging-directory>

<bindings-directory>data/bindings</bindings-directory>

<journal-directory>data/journal</journal-directory>

<large-messages-directory>data/large-messages</large-messages-directory>


<!-- if you want to retain your journal uncomment this following configuration.

This will allow your system to keep 7 days of your data, up to 10G. Tweak it 
accordingly to your use case and capacity.

it is recommended to use a separate storage unit from the journal for 
performance considerations.

<journal-retention-directory period="7" unit="DAYS" 
storage-limit="10G">data/retention</journal-retention-directory>

You can also enable retention by using the argument journal-retention on the 
`artemis create` command -->



<journal-datasync>true</journal-datasync>

<journal-min-files>2</journal-min-files>

<journal-pool-files>10</journal-pool-files>

<journal-device-block-size>4096</journal-device-block-size>

<journal-file-size>10M</journal-file-size>

<!--
This value was determined through a calculation.
Your system could perform 0.07 writes per millisecond
on the current journal configuration.
That translates as a sync write every 13596000 nanoseconds.

Note: If you specify 0 the system will perform writes directly to the disk.
We recommend this to be 0 if you are using journalType=MAPPED and 
journal-datasync=false.
-->
<journal-buffer-timeout>13596000</journal-buffer-timeout>


<!--
When using ASYNCIO, this will determine the writing queue depth for libaio.
-->
<journal-max-io>1</journal-max-io>
<!--
You can verify the network health of a particular NIC by specifying the 
<network-check-NIC> element.
<network-check-NIC>theNicName</network-check-NIC>
-->

<!--
Use this to use an HTTP server to validate the network
<network-check-URL-list>http://www.apache.org</network-check-URL-list> -->

<!-- <network-check-period>10000</network-check-period> -->
<!-- <network-check-timeout>1000</network-check-timeout> -->

<!-- this is a comma separated list, no spaces, just DNS or IPs
it should accept IPV6

Warning: Make sure you understand your network topology as this is meant to 
validate if your network is valid.
Using IPs that could eventually disappear or be partially visible may defeat 
the purpose.
You can use a list of multiple IPs, and if any successful ping will make the 
server OK to continue running -->
<!-- <network-check-list>10.0.0.1</network-check-list> -->

<!-- use this to customize the ping used for ipv4 addresses -->
<!-- <network-check-ping-command>ping -c 1 -t %d 
%s</network-check-ping-command> -->

<!-- use this to customize the ping used for ipv6 addresses -->
<!-- <network-check-ping6-command>ping6 -c 1 %2$s</network-check-ping6-command> 
-->




<!-- how often we are looking for how many bytes are being used on the disk in 
ms -->
<disk-scan-period>5000</disk-scan-period>

<!-- once the disk hits this limit the system will block, or close the 
connection in certain protocols
that won't support flow control. -->
<max-disk-usage>90</max-disk-usage>

<!-- should the broker detect dead locks and other issues -->
<critical-analyzer>true</critical-analyzer>

<critical-analyzer-timeout>120000</critical-analyzer-timeout>

<critical-analyzer-check-period>60000</critical-analyzer-check-period>

<critical-analyzer-policy>HALT</critical-analyzer-policy>


<page-sync-timeout>13596000</page-sync-timeout>


<!-- the system will enter into page mode once you hit this limit. This is an 
estimate in bytes of how much the messages are using in memory

The system will use half of the available memory (-Xmx) by default for the 
global-max-size.
You may specify a different value here if you need to customize it to your 
needs.

<global-max-size>100Mb</global-max-size> -->

<!-- the maximum number of messages accepted before entering full address mode.
if global-max-size is specified the full address mode will be specified by 
whatever hits it first. -->
<global-max-messages>-1</global-max-messages>

<acceptors>

<!-- useEpoll means: it will use Netty epoll if you are on a system (Linux) 
that supports it -->
<!-- amqpCredits: The number of credits sent to AMQP producers -->
<!-- amqpLowCredits: The server will send the # credits specified at 
amqpCredits at this low mark -->
<!-- amqpDuplicateDetection: If you are not using duplicate detection, set this 
to false
as duplicate detection requires applicationProperties to be parsed on the 
server. -->
<!-- amqpMinLargeMessageSize: Determines how many bytes are considered large, 
so we start using files to hold their data.
default: 102400, -1 would mean to disable large mesasge control -->

<!-- Note: If an acceptor needs to be compatible with HornetQ and/or Artemis 
1.x clients add
"anycastPrefix=jms.queue.;multicastPrefix=jms.topic." to the acceptor url.
See https://issues.apache.org/jira/browse/ARTEMIS-1644 for more information. -->


<!-- Acceptor for every supported protocol -->
<acceptor 
name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>

<!-- AMQP Acceptor. Listens on default AMQP port for AMQP traffic.-->
<acceptor 
name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true</acceptor>

<!-- STOMP Acceptor. -->
<acceptor 
name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</acceptor>

<!-- HornetQ Compatibility Acceptor. Enables HornetQ Core and STOMP for legacy 
HornetQ clients. -->
<acceptor 
name="hornetq">tcp://0.0.0.0:5445?anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;protocols=HORNETQ,STOMP;useEpoll=true</acceptor>

<!-- MQTT Acceptor -->
<acceptor 
name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true;directDeliver=false;anycastPrefix=$share/;</acceptor>

</acceptors>


<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>

<address-settings>
<!-- if you define auto-create on certain queues, management has to be 
auto-create -->
<address-setting match="activemq.management#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
</address-setting>
<!--default for catch all-->
<address-setting match="#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>


<!-- if max-size-bytes and max-size-messages were both enabled, the system will 
enter into paging
based on the first attribute to hits the maximum value -->
<!-- limit for the address in bytes, -1 means unlimited -->
<max-size-bytes>-1</max-size-bytes>
<!-- limit for the address in messages, -1 means unlimited -->
<max-size-messages>-1</max-size-messages>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-addresses>false</auto-delete-addresses>
</address-setting>
</address-settings>

<addresses>
<!--设备管理-->
<address name="msg.req.devinfo">
<multicast />
</address>
<address name="msg.req.status">
<multicast />
</address>
<address name="msg.req.stat">
<multicast />
</address>
<address name="msg.req.connect">
<multicast />
</address>
<address name="msg.req.disconnect">
<multicast />
</address>
<address name="msg.req.lwt">
<multicast />
</address>
<address name="rmsg.res.reboot">
<multicast />
</address>
<address name="rmsg.res.hibrate">
<multicast />
</address>
<address name="rmsg.res.awaken">
<multicast />
</address>
<address name="rmsg.res.firmware">
<multicast />
</address>
<address name="rmsg.res.firmwareresume">
<multicast />
</address>
<address name="rrpc.res.alog">
<multicast />
</address>
<address name="rrpc.res.debug">
<multicast />
</address>
<address name="upld.req.rlog">
<multicast />
</address>
<address name="rrpc.res.qlog">
<multicast />
</address>
<address name="rrpc.res.reset">
<multicast />
</address>
<address name="rrpc.res.shell">
<multicast />
</address>
<!--todolist-->
<address name="rrpc.res.todolist">
<multicast />
</address>
<address name="rrpc.res.btodolist">
<multicast />
</address>
<!--文件服务-->
<address name="rrpc.res.file">
<multicast />
</address>
<address name="rrpc.res.batchfile">
<multicast />
</address>
<!--设备绑定-->
<address name="rrpc.res.binding">
<multicast />
</address>
<!--广告分发响应-->
<address name="rrpc.res.advert">
<multicast />
</address>
<!--广告播放、点击数据上报-->
<address name="upld.req.advert">
<multicast />
</address>
<!--广告投放推送-->
<address name="svc.req.advert">
<multicast />
</address>
<!--门禁服务&客流统计-->
<address name="upld.req.faceinfo">
<multicast />
</address>
<!--系统自带-->
<address name="DLQ">
<anycast>
<queue name="DLQ" />
</anycast>
</address>
<address name="ExpiryQueue">
<anycast>
<queue name="ExpiryQueue" />
</anycast>
</address>
</addresses>

<!-- Uncomment the following if you want to use the Standard 
LoggingActiveMQServerPlugin pluging to log in events-->
<broker-plugins>
<!--
<broker-plugin 
class-name="org.apache.activemq.artemis.core.server.plugin.impl.LoggingActiveMQServerPlugin">
<property key="LOG_ALL_EVENTS" value="true"/>
<property key="LOG_CONNECTION_EVENTS" value="true"/>
<property key="LOG_SESSION_EVENTS" value="true"/>
<property key="LOG_CONSUMER_EVENTS" value="true"/>
<property key="LOG_DELIVERING_EVENTS" value="true"/>
<property key="LOG_SENDING_EVENTS" value="true"/>
<property key="LOG_INTERNAL_EVENTS" value="true"/>
</broker-plugin>
-->
<broker-plugin 
class-name="com.yeker.iot.broker.plugin.impl.ArtemisBrokerPlugin">

<property key="deviceDriver" value="com.mysql.cj.jdbc.Driver" />
<property key="deviceUrl" 
value="jdbc:mysql://d:d/d?allowPublicKeyRetrieval=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=Asia/Shanghai"
 />
<property key="deviceUsername" value="xxx" />
<property key="devicePassword" value="xxx" />

<property key="accountDriver" value="com.mysql.cj.jdbc.Driver" />
<property key="accountUrl" 
value="jdbc:mysql://d:d/d?allowPublicKeyRetrieval=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=Asia/Shanghai"
 />
<property key="accountUsername" value="xxx" />
<property key="accountPassword" value="xxxxx" />

<property key="accountAuthEnabled" value="false"/>
<property key="accountAuthQuerySQL" value="select id, scope_id as 
scopeId,user_id as userId,access_key_id as accessKeyId,access_key_secret as 
accessKeySecret from user_device_access_key where access_key_id = ? and 
access_key_secret = ? and status = 0"/>

<property key="deviceDriver" value="com.mysql.cj.jdbc.Driver" />
<property key="deviceUrl" 
value="jdbc:mysql://d:e/e?allowPublicKeyRetrieval=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=Asia/Shanghai"
 />
<property key="deviceUsername" value="xxxx" />
<property key="devicePassword" value="xxxx" />

<!--设备授权检查&状态同步-->
<!--设备授权检查-->
<property key="deviceAuthEnabled" value="true"/>
<property key="deviceAuthCheckSQL" value="select id,scope_id,lic_id,dev_id from 
device_auth where lic_id = ?"/>
<property key="deviceAuthLockerSQL" value="update device_auth set dev_id = ? 
where lic_id = ? and dev_id =''"/>
<!--设备授状态同步-->
<property key="deviceStatusSyncabled" value="true"/>
<!--在线状态-->
<property key="connectUpdateSQL" value="update device_auth set status = 
1,conn_id = ?,client_ip = ?,broker_ip = ? where lic_id = ? and dev_id = ? "/>

<!--设备授状态同步-->
<property key="deviceStatusSyncabled" value="true"/>
<!--网络异常状态-->
<property key="lwtUpdateSQL" value="update device_auth set status = -1,conn_id 
= null,client_ip = null,broker_ip = '' where lic_id = ? and conn_id = ?"/>
<!--离线状态-->
<property key="disconnectUpdateSQL" value="update device_auth set status = 
0,conn_id = null,client_ip = null,broker_ip = '' where lic_id = ? and conn_id = 
?"/>
<!--unregistered-->
<property key="resetUpdateSQL" value="update device_auth set status = 0,conn_id 
= null,client_ip = null,broker_ip = '' where broker_ip = ?"/>
</broker-plugin>
</broker-plugins>
</core>
</configuration>

> when auth plugin called, beforeCreateSession method will be call twice time
> ---------------------------------------------------------------------------
>
>                 Key: ARTEMIS-3952
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3952
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>    Affects Versions: 2.25.0
>            Reporter: gongping.zhu
>            Priority: Major
>         Attachments: ArtemisBrokerPlugin.java, JAASSecurityManagerWrapper.java
>
>
> 1, when auth plugin called,the beforeCreateSession method will be call twice 
> times
> 2,ActiveMQSecurityManager5 authenticate method will call more then one times



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to