Commit e25bd4f0dcafee2c40361fc1d61f663d82f15815

Authored by Andrew Shvayka
Committed by GitHub
2 parents 1e6e8284 9721755d

Merge pull request #34 from volodymyr-babak/master

Moved stress test to different repo
... ... @@ -29,9 +29,9 @@ app-dispatcher {
29 29 executor = "fork-join-executor"
30 30 fork-join-executor {
31 31 # Min number of threads to cap factor-based parallelism number to
32   - parallelism-min = 2
  32 + parallelism-min = 1
33 33 # Max number of threads to cap factor-based parallelism number to
34   - parallelism-max = 12
  34 + parallelism-max = 1
35 35
36 36 # The parallelism factor is used to determine thread pool size using the
37 37 # following formula: ceil(available processors * factor). Resulting size
... ... @@ -54,7 +54,7 @@ rpc-dispatcher {
54 54 # Min number of threads to cap factor-based parallelism number to
55 55 parallelism-min = 2
56 56 # Max number of threads to cap factor-based parallelism number to
57   - parallelism-max = 12
  57 + parallelism-max = 8
58 58
59 59 # The parallelism factor is used to determine thread pool size using the
60 60 # following formula: ceil(available processors * factor). Resulting size
... ... @@ -82,7 +82,7 @@ core-dispatcher {
82 82 # The parallelism factor is used to determine thread pool size using the
83 83 # following formula: ceil(available processors * factor). Resulting size
84 84 # is then bounded by the parallelism-min and parallelism-max values.
85   - parallelism-factor = 1.0
  85 + parallelism-factor = 0.25
86 86 }
87 87 # How long time the dispatcher will wait for new actors until it shuts down
88 88 shutdown-timeout = 1s
... ... @@ -105,7 +105,7 @@ rule-dispatcher {
105 105 # The parallelism factor is used to determine thread pool size using the
106 106 # following formula: ceil(available processors * factor). Resulting size
107 107 # is then bounded by the parallelism-min and parallelism-max values.
108   - parallelism-factor = 1.0
  108 + parallelism-factor = 0.25
109 109 }
110 110 # How long time the dispatcher will wait for new actors until it shuts down
111 111 shutdown-timeout = 1s
... ... @@ -128,7 +128,7 @@ plugin-dispatcher {
128 128 # The parallelism factor is used to determine thread pool size using the
129 129 # following formula: ceil(available processors * factor). Resulting size
130 130 # is then bounded by the parallelism-min and parallelism-max values.
131   - parallelism-factor = 1.0
  131 + parallelism-factor = 0.25
132 132 }
133 133 # How long time the dispatcher will wait for new actors until it shuts down
134 134 shutdown-timeout = 1s
... ... @@ -152,7 +152,7 @@ session-dispatcher {
152 152 # The parallelism factor is used to determine thread pool size using the
153 153 # following formula: ceil(available processors * factor). Resulting size
154 154 # is then bounded by the parallelism-min and parallelism-max values.
155   - parallelism-factor = 1.0
  155 + parallelism-factor = 0.25
156 156 }
157 157 # How long time the dispatcher will wait for new actors until it shuts down
158 158 shutdown-timeout = 1s
... ...
... ... @@ -167,7 +167,7 @@ actors:
167 167 # Cache parameters
168 168 cache:
169 169 # Enable/disable cache functionality.
170   - enabled: "${CACHE_ENABLED:true}"
  170 + enabled: "${CACHE_ENABLED:false}"
171 171 device_credentials:
172 172 # Default time to store device credentials in cache, in seconds
173 173 time_to_live: "${CACHE_DEVICE_CREDENTIAL_TTL:3600}"
... ...
... ... @@ -32,7 +32,7 @@ do
32 32 done
33 33
34 34 # Copying env variables into conf files
35   -printenv | while read x; do echo export $x; done >> /usr/share/thingsboard/conf/thingsboard.conf
  35 +printenv | awk -F "=" '{print "export " $1 "='\''" $2 "'\''"}' >> /usr/share/thingsboard/conf/thingsboard.conf
36 36
37 37 cat /usr/share/thingsboard/conf/thingsboard.conf
38 38
... ...
... ... @@ -48,39 +48,8 @@
48 48 <groupId>org.eclipse.paho</groupId>
49 49 <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
50 50 </dependency>
51   - <dependency>
52   - <groupId>org.slf4j</groupId>
53   - <artifactId>slf4j-api</artifactId>
54   - </dependency>
55   - <dependency>
56   - <groupId>org.slf4j</groupId>
57   - <artifactId>log4j-over-slf4j</artifactId>
58   - </dependency>
59   - <dependency>
60   - <groupId>ch.qos.logback</groupId>
61   - <artifactId>logback-core</artifactId>
62   - </dependency>
63   - <dependency>
64   - <groupId>ch.qos.logback</groupId>
65   - <artifactId>logback-classic</artifactId>
66   - </dependency>
67   - <dependency>
68   - <groupId>org.springframework</groupId>
69   - <artifactId>spring-test</artifactId>
70   - </dependency>
71   - <dependency>
72   - <groupId>junit</groupId>
73   - <artifactId>junit</artifactId>
74   - <scope>test</scope>
75   - </dependency>
76   - <dependency>
77   - <groupId>org.mockito</groupId>
78   - <artifactId>mockito-all</artifactId>
79   - <scope>test</scope>
80   - </dependency>
81 51 </dependencies>
82 52
83   -
84 53 <build>
85 54 <plugins>
86 55 <plugin>
... ... @@ -105,7 +74,7 @@
105 74 </filters>
106 75 <transformers>
107 76 <transformer
108   - implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  77 + implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
109 78 <manifestEntries>
110 79 <Main-Class>org.thingsboard.client.tools.MqttStressTestTool</Main-Class>
111 80 </manifestEntries>
... ...
1   -/**
2   - * Copyright © 2016-2017 The Thingsboard Authors
3   - *
4   - * Licensed under the Apache License, Version 2.0 (the "License");
5   - * you may not use this file except in compliance with the License.
6   - * You may obtain a copy of the License at
7   - *
8   - * http://www.apache.org/licenses/LICENSE-2.0
9   - *
10   - * Unless required by applicable law or agreed to in writing, software
11   - * distributed under the License is distributed on an "AS IS" BASIS,
12   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   - * See the License for the specific language governing permissions and
14   - * limitations under the License.
15   - */
16   -package org.thingsboard.client.tools; /**
17   - * Copyright © 2016 The Thingsboard Authors
18   - *
19   - * Licensed under the Apache License, Version 2.0 (the "License");
20   - * you may not use this file except in compliance with the License.
21   - * You may obtain a copy of the License at
22   - *
23   - * http://www.apache.org/licenses/LICENSE-2.0
24   - *
25   - * Unless required by applicable law or agreed to in writing, software
26   - * distributed under the License is distributed on an "AS IS" BASIS,
27   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28   - * See the License for the specific language governing permissions and
29   - * limitations under the License.
30   - */
31   -import lombok.Getter;
32   -import lombok.extern.slf4j.Slf4j;
33   -import org.eclipse.paho.client.mqttv3.*;
34   -import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
35   -
36   -/**
37   - * @author Andrew Shvayka
38   - */
39   -@Slf4j
40   -public class MqttStressTestClient {
41   -
42   - @Getter
43   - private final String deviceToken;
44   - @Getter
45   - private final String clientId;
46   - private final MqttClientPersistence persistence;
47   - private final MqttAsyncClient client;
48   - private final ResultAccumulator results;
49   -
50   - public MqttStressTestClient(ResultAccumulator results, String brokerUri, String deviceToken) throws MqttException {
51   - this.results = results;
52   - this.clientId = MqttAsyncClient.generateClientId();
53   - this.deviceToken = deviceToken;
54   - this.persistence = new MemoryPersistence();
55   - this.client = new MqttAsyncClient(brokerUri, clientId, persistence);
56   - }
57   -
58   - public IMqttToken connect() throws MqttException {
59   - MqttConnectOptions options = new MqttConnectOptions();
60   - options.setUserName(deviceToken);
61   - return client.connect(options, null, new IMqttActionListener() {
62   - @Override
63   - public void onSuccess(IMqttToken iMqttToken) {
64   - log.info("OnSuccess");
65   - }
66   -
67   - @Override
68   - public void onFailure(IMqttToken iMqttToken, Throwable e) {
69   - log.info("OnFailure", e);
70   - }
71   - });
72   - }
73   -
74   - public void disconnect() throws MqttException {
75   - client.disconnect();
76   - }
77   -
78   -
79   -
80   - public void warmUp(byte[] data) throws MqttException {
81   - MqttMessage msg = new MqttMessage(data);
82   - client.publish("v1/devices/me/telemetry", msg, null, new IMqttActionListener() {
83   - @Override
84   - public void onSuccess(IMqttToken asyncActionToken) {
85   - }
86   -
87   - @Override
88   - public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
89   - }
90   - }).waitForCompletion();
91   - }
92   -
93   -
94   - public void publishTelemetry(byte[] data) throws MqttException {
95   - long sendTime = System.currentTimeMillis();
96   - MqttMessage msg = new MqttMessage(data);
97   - client.publish("v1/devices/me/telemetry", msg, null, new IMqttActionListener() {
98   - @Override
99   - public void onSuccess(IMqttToken asyncActionToken) {
100   - long ackTime = System.currentTimeMillis();
101   - results.onResult(true, ackTime - sendTime);
102   - }
103   -
104   - @Override
105   - public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
106   - long failTime = System.currentTimeMillis();
107   - results.onResult(false, failTime - sendTime);
108   - }
109   - });
110   - }
111   -}
1   -/**
2   - * Copyright © 2016-2017 The Thingsboard Authors
3   - *
4   - * Licensed under the Apache License, Version 2.0 (the "License");
5   - * you may not use this file except in compliance with the License.
6   - * You may obtain a copy of the License at
7   - *
8   - * http://www.apache.org/licenses/LICENSE-2.0
9   - *
10   - * Unless required by applicable law or agreed to in writing, software
11   - * distributed under the License is distributed on an "AS IS" BASIS,
12   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   - * See the License for the specific language governing permissions and
14   - * limitations under the License.
15   - */
16   -package org.thingsboard.client.tools; /**
17   - * Copyright © 2016 The Thingsboard Authors
18   - * <p>
19   - * Licensed under the Apache License, Version 2.0 (the "License");
20   - * you may not use this file except in compliance with the License.
21   - * You may obtain a copy of the License at
22   - * <p>
23   - * http://www.apache.org/licenses/LICENSE-2.0
24   - * <p>
25   - * Unless required by applicable law or agreed to in writing, software
26   - * distributed under the License is distributed on an "AS IS" BASIS,
27   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28   - * See the License for the specific language governing permissions and
29   - * limitations under the License.
30   - */
31   -
32   -import lombok.extern.slf4j.Slf4j;
33   -import org.eclipse.paho.client.mqttv3.IMqttToken;
34   -import org.thingsboard.server.common.data.Device;
35   -import org.thingsboard.server.common.data.security.DeviceCredentials;
36   -
37   -import java.nio.charset.StandardCharsets;
38   -import java.util.ArrayList;
39   -import java.util.List;
40   -import java.util.UUID;
41   -import java.util.concurrent.*;
42   -import java.util.concurrent.atomic.AtomicLong;
43   -
44   -/**
45   - * @author Andrew Shvayka
46   - */
47   -@Slf4j
48   -public class MqttStressTestTool {
49   -
50   - public static void main(String[] args) throws Exception {
51   - TestParams params = new TestParams();
52   - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);
53   -
54   -
55   - if (params.getDuration() % params.getIterationInterval() != 0) {
56   - throw new IllegalArgumentException("Test Duration % Iteration Interval != 0");
57   - }
58   -
59   - if ((params.getIterationInterval() * 1000) % params.getDeviceCount() != 0) {
60   - throw new IllegalArgumentException("Iteration Interval % Device Count != 0");
61   - }
62   -
63   - ResultAccumulator results = new ResultAccumulator();
64   -
65   - AtomicLong value = new AtomicLong(Long.MAX_VALUE);
66   - log.info("value: {} ", value.incrementAndGet());
67   -
68   - RestClient restClient = new RestClient(params.getRestApiUrl());
69   - restClient.login(params.getUsername(), params.getPassword());
70   -
71   - List<MqttStressTestClient> clients = new ArrayList<>();
72   - List<IMqttToken> connectTokens = new ArrayList<>();
73   - for (int i = 0; i < params.getDeviceCount(); i++) {
74   - Device device = restClient.createDevice("Device " + UUID.randomUUID());
75   - DeviceCredentials credentials = restClient.getCredentials(device.getId());
76   - String[] mqttUrls = params.getMqttUrls();
77   - String mqttURL = mqttUrls[i % mqttUrls.length];
78   - MqttStressTestClient client = new MqttStressTestClient(results, mqttURL, credentials.getCredentialsId());
79   - connectTokens.add(client.connect());
80   - clients.add(client);
81   - }
82   -
83   - for (IMqttToken tokens : connectTokens) {
84   - tokens.waitForCompletion();
85   - }
86   -
87   - byte[] data = "{\"longKey\":73}".getBytes(StandardCharsets.UTF_8);
88   -
89   - for (MqttStressTestClient client : clients) {
90   - client.warmUp(data);
91   - }
92   -
93   - Thread.sleep(1000);
94   -
95   - long startTime = System.currentTimeMillis();
96   - int iterationsCount = (int) (params.getDuration() / params.getIterationInterval());
97   - int subIterationMicroSeconds = (int) ((params.getIterationInterval() * 1000) / params.getDeviceCount());
98   -
99   - List<ScheduledFuture<Void>> iterationFutures = new ArrayList<>();
100   - for (int i = 0; i < iterationsCount; i++) {
101   - long delay = i * params.getIterationInterval();
102   - iterationFutures.add(scheduler.schedule((Callable<Void>) () -> {
103   - long sleepMicroSeconds = 0L;
104   - for (MqttStressTestClient client : clients) {
105   - client.publishTelemetry(data);
106   - sleepMicroSeconds += subIterationMicroSeconds;
107   - if (sleepMicroSeconds > 1000) {
108   - Thread.sleep(sleepMicroSeconds / 1000);
109   - sleepMicroSeconds = sleepMicroSeconds % 1000;
110   - }
111   - }
112   - return null;
113   - }, delay, TimeUnit.MILLISECONDS));
114   - }
115   -
116   - for (ScheduledFuture<Void> future : iterationFutures) {
117   - future.get();
118   - }
119   -
120   - Thread.sleep(1000);
121   -
122   - for (MqttStressTestClient client : clients) {
123   - client.disconnect();
124   - }
125   - log.info("Results: {} took {}ms", results, System.currentTimeMillis() - startTime);
126   - scheduler.shutdownNow();
127   - }
128   -
129   -}
... ... @@ -13,25 +13,10 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.client.tools; /**
17   - * Copyright © 2016 The Thingsboard Authors
18   - *
19   - * Licensed under the Apache License, Version 2.0 (the "License");
20   - * you may not use this file except in compliance with the License.
21   - * You may obtain a copy of the License at
22   - *
23   - * http://www.apache.org/licenses/LICENSE-2.0
24   - *
25   - * Unless required by applicable law or agreed to in writing, software
26   - * distributed under the License is distributed on an "AS IS" BASIS,
27   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28   - * See the License for the specific language governing permissions and
29   - * limitations under the License.
30   - */
  16 +package org.thingsboard.client.tools;
  17 +
31 18 import com.fasterxml.jackson.databind.JsonNode;
32 19 import lombok.RequiredArgsConstructor;
33   -import org.springframework.http.HttpEntity;
34   -import org.springframework.http.HttpHeaders;
35 20 import org.springframework.http.HttpRequest;
36 21 import org.springframework.http.ResponseEntity;
37 22 import org.springframework.http.client.ClientHttpRequestExecution;
... ...
1   -/**
2   - * Copyright © 2016-2017 The Thingsboard Authors
3   - *
4   - * Licensed under the Apache License, Version 2.0 (the "License");
5   - * you may not use this file except in compliance with the License.
6   - * You may obtain a copy of the License at
7   - *
8   - * http://www.apache.org/licenses/LICENSE-2.0
9   - *
10   - * Unless required by applicable law or agreed to in writing, software
11   - * distributed under the License is distributed on an "AS IS" BASIS,
12   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   - * See the License for the specific language governing permissions and
14   - * limitations under the License.
15   - */
16   -package org.thingsboard.client.tools; /**
17   - * Copyright © 2016 The Thingsboard Authors
18   - *
19   - * Licensed under the Apache License, Version 2.0 (the "License");
20   - * you may not use this file except in compliance with the License.
21   - * You may obtain a copy of the License at
22   - *
23   - * http://www.apache.org/licenses/LICENSE-2.0
24   - *
25   - * Unless required by applicable law or agreed to in writing, software
26   - * distributed under the License is distributed on an "AS IS" BASIS,
27   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28   - * See the License for the specific language governing permissions and
29   - * limitations under the License.
30   - */
31   -import lombok.extern.slf4j.Slf4j;
32   -
33   -import java.util.concurrent.atomic.AtomicInteger;
34   -import java.util.concurrent.atomic.AtomicLong;
35   -
36   -/**
37   - * @author Andrew Shvayka
38   - */
39   -@Slf4j
40   -public class ResultAccumulator {
41   -
42   - private AtomicLong minTime = new AtomicLong(Long.MAX_VALUE);
43   - private AtomicLong maxTime = new AtomicLong(Long.MIN_VALUE);
44   - private AtomicLong timeSpentCount = new AtomicLong();
45   - private AtomicInteger successCount = new AtomicInteger();
46   - private AtomicInteger errorCount = new AtomicInteger();
47   -
48   - public void onResult(boolean success, long timeSpent) {
49   - if (success) {
50   - successCount.incrementAndGet();
51   - } else {
52   - errorCount.incrementAndGet();
53   - }
54   - timeSpentCount.addAndGet(timeSpent);
55   -
56   - while (!setMax(timeSpent)) ;
57   - while (!setMin(timeSpent)) ;
58   - }
59   -
60   - private boolean setMax(long timeSpent) {
61   - long curMax = maxTime.get();
62   - long newMax = Math.max(curMax, timeSpent);
63   - return maxTime.compareAndSet(curMax, newMax);
64   - }
65   -
66   - private boolean setMin(long timeSpent) {
67   - long curMin = minTime.get();
68   - long newMin = Math.min(curMin, timeSpent);
69   - return minTime.compareAndSet(curMin, newMin);
70   - }
71   -
72   -
73   - public int getSuccessCount() {
74   - return successCount.get();
75   - }
76   -
77   - public int getErrorCount() {
78   - return errorCount.get();
79   - }
80   -
81   - public long getTimeSpent() {
82   - return timeSpentCount.get();
83   - }
84   -
85   - public double getAvgTimeSpent() {
86   - return ((double) getTimeSpent()) / (getSuccessCount() + getErrorCount());
87   - }
88   -
89   - @Override
90   - public String toString() {
91   - return "Result {" +
92   - "successCount=" + getSuccessCount() +
93   - ", errorCount=" + getErrorCount() +
94   - ", totalTime=" + getTimeSpent() +
95   - ", avgTime=" + getAvgTimeSpent() +
96   - ", minTime=" + minTime.get() +
97   - ", maxTime=" + maxTime.get() +
98   - '}';
99   - }
100   -}
1   -/**
2   - * Copyright © 2016-2017 The Thingsboard Authors
3   - *
4   - * Licensed under the Apache License, Version 2.0 (the "License");
5   - * you may not use this file except in compliance with the License.
6   - * You may obtain a copy of the License at
7   - *
8   - * http://www.apache.org/licenses/LICENSE-2.0
9   - *
10   - * Unless required by applicable law or agreed to in writing, software
11   - * distributed under the License is distributed on an "AS IS" BASIS,
12   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   - * See the License for the specific language governing permissions and
14   - * limitations under the License.
15   - */
16   -package org.thingsboard.client.tools;
17   -
18   -import lombok.extern.slf4j.Slf4j;
19   -
20   -import java.io.FileInputStream;
21   -import java.io.IOException;
22   -import java.util.Properties;
23   -import java.util.concurrent.TimeUnit;
24   -
25   -@Slf4j
26   -public class TestParams {
27   - static final String TEST_PROPERTIES = "test.properties";
28   - static final long DEFAULT_TEST_DURATION = TimeUnit.MINUTES.toMillis(1);
29   - static final long DEFAULT_TEST_INTERVAL = TimeUnit.MILLISECONDS.toMillis(100);
30   - static final int DEFAULT_DEVICE_COUNT = 100;
31   - static final String DEFAULT_REST_URL = "http://localhost:8080";
32   - static final String DEFAULT_MQTT_URLS = "tcp://localhost:1883";
33   - static final String DEFAULT_USERNAME = "tenant@thingsboard.org";
34   - static final String DEFAULT_PASSWORD = "tenant";
35   -
36   - private Properties params = new Properties();
37   -
38   - public TestParams() throws IOException {
39   - try {
40   - params.load(new FileInputStream(TEST_PROPERTIES));
41   - } catch (Exception e) {
42   - log.warn("Failed to read " + TEST_PROPERTIES);
43   - }
44   - }
45   -
46   - public long getDuration() {
47   - return Long.valueOf(params.getProperty("durationMs", Long.toString(DEFAULT_TEST_DURATION)));
48   - }
49   -
50   - public long getIterationInterval() {
51   - return Long.valueOf(params.getProperty("iterationIntervalMs", Long.toString(DEFAULT_TEST_INTERVAL)));
52   - }
53   -
54   - public int getDeviceCount() {
55   - return Integer.valueOf(params.getProperty("deviceCount", Integer.toString(DEFAULT_DEVICE_COUNT)));
56   - }
57   -
58   - public String getRestApiUrl() {
59   - return params.getProperty("restUrl", DEFAULT_REST_URL);
60   - }
61   -
62   - public String[] getMqttUrls() {
63   - return params.getProperty("mqttUrls", DEFAULT_MQTT_URLS).split(",");
64   - }
65   -
66   - public String getUsername() {
67   - return params.getProperty("username", DEFAULT_USERNAME);
68   - }
69   -
70   - public String getPassword() {
71   - return params.getProperty("password", DEFAULT_PASSWORD);
72   - }
73   -}
1   -<?xml version="1.0" encoding="UTF-8" ?>
2   -<!--
3   -
4   - Copyright © 2016-2017 The Thingsboard Authors
5   -
6   - Licensed under the Apache License, Version 2.0 (the "License");
7   - you may not use this file except in compliance with the License.
8   - You may obtain a copy of the License at
9   -
10   - http://www.apache.org/licenses/LICENSE-2.0
11   -
12   - Unless required by applicable law or agreed to in writing, software
13   - distributed under the License is distributed on an "AS IS" BASIS,
14   - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   - See the License for the specific language governing permissions and
16   - limitations under the License.
17   -
18   --->
19   -<!DOCTYPE configuration>
20   -<configuration>
21   -
22   - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
23   - <encoder>
24   - <pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
25   - </encoder>
26   - </appender>
27   -
28   - <logger name="org.thingsboard" level="INFO" />
29   -
30   - <root level="INFO">
31   - <appender-ref ref="STDOUT"/>
32   - </root>
33   -
34   -</configuration>
\ No newline at end of file
1   -restUrl=http://localhost:8080
2   -mqttUrls=tcp://localhost:1883
3   -deviceCount=1
4   -durationMs=60000
5   -iterationIntervalMs=1000
... ... @@ -76,7 +76,6 @@ public class MqttTransportService {
76 76
77 77 @PostConstruct
78 78 public void init() throws Exception {
79   - ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.ADVANCED);
80 79 log.info("Starting MQTT transport...");
81 80 log.info("Lookup MQTT transport adaptor {}", adaptorName);
82 81 this.adaptor = (MqttTransportAdaptor) appContext.getBean(adaptorName);
... ...