Skip to content

Commit 6f55c0a

Browse files
committed
Merge pull request #1114 from anuragw/1.4.x
#1109 Make queue size of MetricJsonListener configurable
2 parents 5629563 + ee6c90a commit 6f55c0a

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

hystrix-contrib/hystrix-metrics-event-stream/src/main/java/com/netflix/hystrix/contrib/metrics/eventstream/HystrixMetricsStreamServlet.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,20 @@
1515
*/
1616
package com.netflix.hystrix.contrib.metrics.eventstream;
1717

18-
import java.io.IOException;
19-
import java.util.ArrayList;
20-
import java.util.List;
21-
import java.util.concurrent.LinkedBlockingQueue;
22-
import java.util.concurrent.atomic.AtomicInteger;
18+
import com.netflix.config.DynamicIntProperty;
19+
import com.netflix.config.DynamicPropertyFactory;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
2322

2423
import javax.servlet.ServletException;
2524
import javax.servlet.http.HttpServlet;
2625
import javax.servlet.http.HttpServletRequest;
2726
import javax.servlet.http.HttpServletResponse;
28-
29-
import org.slf4j.Logger;
30-
import org.slf4j.LoggerFactory;
31-
32-
import com.netflix.config.DynamicIntProperty;
33-
import com.netflix.config.DynamicPropertyFactory;
27+
import java.io.IOException;
28+
import java.util.ArrayList;
29+
import java.util.List;
30+
import java.util.concurrent.LinkedBlockingQueue;
31+
import java.util.concurrent.atomic.AtomicInteger;
3432

3533
/**
3634
* Streams Hystrix metrics in text/event-stream format.
@@ -62,6 +60,7 @@ public class HystrixMetricsStreamServlet extends HttpServlet {
6260
/* used to track number of connections and throttle */
6361
private static AtomicInteger concurrentConnections = new AtomicInteger(0);
6462
private static DynamicIntProperty maxConcurrentConnections = DynamicPropertyFactory.getInstance().getIntProperty("hystrix.stream.maxConcurrentConnections", 5);
63+
private static DynamicIntProperty defaultMetricListenerQueueSize = DynamicPropertyFactory.getInstance().getIntProperty("hystrix.stream.defaultMetricListenerQueueSize", 1000);
6564

6665
private static volatile boolean isDestroyed = false;
6766

@@ -135,7 +134,9 @@ private void handleRequest(HttpServletRequest request, HttpServletResponse respo
135134
response.setHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
136135
response.setHeader("Pragma", "no-cache");
137136

138-
MetricJsonListener jsonListener = new MetricJsonListener();
137+
int queueSize = defaultMetricListenerQueueSize.get();
138+
139+
MetricJsonListener jsonListener = new MetricJsonListener(queueSize);
139140
poller = new HystrixMetricsPoller(jsonListener, delay);
140141
// start polling and it will write directly to the output stream
141142
poller.start();
@@ -207,7 +208,11 @@ private static class MetricJsonListener implements HystrixMetricsPoller.MetricsA
207208
* <p>
208209
* This is a safety check against a runaway poller causing memory leaks.
209210
*/
210-
private final LinkedBlockingQueue<String> jsonMetrics = new LinkedBlockingQueue<String>(1000);
211+
private LinkedBlockingQueue<String> jsonMetrics;
212+
213+
public MetricJsonListener(int queueSize) {
214+
jsonMetrics = new LinkedBlockingQueue<String>(queueSize);
215+
}
211216

212217
/**
213218
* Store JSON messages in a queue.

0 commit comments

Comments
 (0)