Skip to main content
 首页 » 编程设计

SpringCloud搭建turbine时 hystrix MaxConcurrentConnections reached 异常

2022年07月18日190powertoolsteam
2017-03-28 10:04:47.438 ERROR 1035 --- [InstanceMonitor] c.n.t.monitor.instance.InstanceMonitor : Could not initiate connection to host, giving up: [{"timestamp":1490666687435,"status":503,"error":"Service Unavailable","message":"MaxConcurrentConnections reached: 5","path":"/hystrix.stream"}] 

~/.m2/repository/com/netflix/hystrix/hystrix-metrics-event-stream/1.5.6/hystrix-metrics-event-stream-1.5.6-sources.jar!/com/netflix/hystrix/contrib/requests/stream/HystrixRequestEventsSseServlet.java

public class HystrixRequestEventsSseServlet extends HystrixSampleSseServlet { private static final long serialVersionUID = 6389353893099737870L; /* used to track number of connections and throttle */ private static AtomicInteger concurrentConnections = new AtomicInteger(0); private static DynamicIntProperty maxConcurrentConnections = DynamicPropertyFactory.getInstance().getIntProperty("hystrix.config.stream.maxConcurrentConnections", 5); //...... } 

~/.m2/repository/com/netflix/hystrix/hystrix-metrics-event-stream/1.5.6/hystrix-metrics-event-stream-1.5.6-sources.jar!/com/netflix/hystrix/contrib/sample/stream/HystrixSampleSseServlet.java

/** 
     * - maintain an open connection with the client 
     * - on initial connection send latest data of each requested event type 
     * - subsequently send all changes for each requested event type 
     * 
     * @param request  incoming HTTP Request 
     * @param response outgoing HTTP Response (as a streaming response) 
     * @throws javax.servlet.ServletException 
     * @throws java.io.IOException */ private void handleRequest(HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { final AtomicBoolean moreDataWillBeSent = new AtomicBoolean(true); Subscription sampleSubscription = null; /* ensure we aren't allowing more connections than we want */ int numberConnections = incrementAndGetCurrentConcurrentConnections(); try { int maxNumberConnectionsAllowed = getMaxNumberConcurrentConnectionsAllowed(); //may change at runtime, so look this up for each request if (numberConnections > maxNumberConnectionsAllowed) { response.sendError(503, "MaxConcurrentConnections reached: " + maxNumberConnectionsAllowed); } else { /* initialize response */ response.setHeader("Content-Type", "text/event-stream;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate"); response.setHeader("Pragma", "no-cache"); final PrintWriter writer = response.getWriter(); //since the sample stream is based on Observable.interval, events will get published on an RxComputation thread //since writing to the servlet response is blocking, use the Rx IO thread for the write that occurs in the onNext sampleSubscription = sampleStream .observeOn(Schedulers.io()) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { logger.error("HystrixSampleSseServlet: ({}) received unexpected OnCompleted from sample stream", getClass().getSimpleName()); moreDataWillBeSent.set(false); } @Override public void onError(Throwable e) { moreDataWillBeSent.set(false); } @Override public void onNext(String sampleDataAsString) { if (sampleDataAsString != null) { try { writer.print("data: " + sampleDataAsString + "\n\n"); // explicitly check for client disconnect - PrintWriter does not throw exceptions if (writer.checkError()) { throw new IOException("io error"); } writer.flush(); } catch (IOException ioe) { moreDataWillBeSent.set(false); } } } }); while (moreDataWillBeSent.get() && !isDestroyed) { try { Thread.sleep(pausePollerThreadDelayInMs); } catch (InterruptedException e) { moreDataWillBeSent.set(false); } } } } finally { decrementCurrentConcurrentConnections(); if (sampleSubscription != null && !sampleSubscription.isUnsubscribed()) { sampleSubscription.unsubscribe(); } } } 

##报错2

10:45:53.194 INFO [http-nio-9002-exec-393] Caller+0 at org.springframework.cloud.netflix.hystrix.dashboard.HystrixDashboardConfiguration$ProxyStreamServlet.doGet(HystrixDashboardConfiguration.java:165) - Proxy opening connection to: http://localhost:9002/hystrix.stream 2017-03-28 10:45:53.209 WARN 1404 --- [o-9002-exec-393] ashboardConfiguration$ProxyStreamServlet : Failed opening connection to http://localhost:9002/hystrix.stream : 503 : HTTP/1.1 503 10:45:53.209 WARN [http-nio-9002-exec-393] Caller+0 at org.springframework.cloud.netflix.hystrix.dashboard.HystrixDashboardConfiguration$ProxyStreamServlet.doGet(HystrixDashboardConfiguration.java:212) - Failed opening connection to http://localhost:9002/hystrix.stream : 503 : HTTP/1.1 503 2017-03-28 10:45:53.209 WARN 1404 --- [o-9002-exec-391] ashboardConfiguration$ProxyStreamServlet : Failed opening connection to http://localhost:9002/hystrix.stream : 503 : HTTP/1.1 503 10:45:53.209 WARN [http-nio-9002-exec-391] Caller+0 at org.springframework.cloud.netflix.hystrix.dashboard.HystrixDashboardConfiguration$ProxyStreamServlet.doGet(HystrixDashboardConfiguration.java:212) - Failed opening connection to http://localhost:9002/hystrix.stream : 503 : HTTP/1.1 503 

curl一下

➜  ~ curl -i http://localhost:9002/hystrix.stream 
HTTP/1.1 503 
X-Application-Context: recommend:9002 
Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Tue, 28 Mar 2017 02:48:23 GMT Connection: close {"timestamp":1490669303758,"status":503,"error":"Service Unavailable","message":"MaxConcurrentConnections reached: 20","path":"/hystrix.stream"}% 

如果出现请求/hystrix.stream一直阻塞,或者报错Unable to connect to Command Metric Stream,表示你没有配置HystrixCommand。

解决方案

hystrix.config.stream.maxConcurrentConnections: 50

本文参考链接:https://www.cnblogs.com/maohuidong/p/9871525.html