zoukankan      html  css  js  c++  java
  • 搭建turbine时 hystrix MaxConcurrentConnections reached 异常

    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 + "
    
    ");
                                            // 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
  • 相关阅读:
    生成实用包装码
    区分排序函数
    mysql优化
    高并发、大流量、大存储
    数据库的搬移
    linux查看系统日志及具体服务日志
    springboot拦截器实现
    使用ajax的get请求渲染html
    百度echarts折线图使用示例
    前端特殊符号转码
  • 原文地址:https://www.cnblogs.com/maohuidong/p/9871525.html
Copyright © 2011-2022 走看看