jetty集成spring配置

jetty是一个轻量级的java web容器,已经变得越来越流行,比较好的一点是它可以作为组件嵌入到java应用中,而不需要像tomcat一样将web项目部署到某个目录下,当然 tomcat也有自己的embeded版本。Google甚至选择了jetty而放弃了tomcat,可见jetty的受欢迎程度。下面提供一个spring集成jetty应用的一种方式,场景是,web server情况下,jetty接受请求,处理后返回xml或json格式的响应。

        <bean id="JettyServer" class="org.eclipse.jetty.server.Server"
                init-method="start" destroy-method="stop">
                <property name="threadPool">
                        <bean id="defaultThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
                                <property name="minThreads" value="10" />
                                <property name="maxThreads" value="200" />
                        </bean>
                </property>
                <property name="connectors">
                        <list>
                                <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                        <property name="port" value="8081" />
                                        <property name="maxIdleTime" value="30000" />
                                        <property name="lowResourcesConnections" value="5000" />
                                        <property name="lowResourcesMaxIdleTime" value="5000" />
                                        <property name="acceptors" value="4" />
                                        <property name="statsOn" value="false" />
                                        <property name="acceptQueueSize" value="500" />
                                </bean>
                        </list>
                </property>
                <property name="handler">
                        <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerList">
                                <property name="handlers">
                                        <list>
                                                <bean class="com.ztgame.centralserver.joint.JointHandler" />
                                                <bean class="org.eclipse.jetty.server.handler.DefaultHandler" />
                                                <bean class="org.eclipse.jetty.server.handler.RequestLogHandler">
                                                        <property name="requestLog">
                                                                <bean class="org.eclipse.jetty.server.NCSARequestLog">
                                                                        <property name="append" value="true" />
                                                                        <property name="filename" value="/log/rat/jetty.log.yyyy_mm_dd" />
                                                                        <property name="extended" value="true" />
                                                                        <property name="retainDays" value="999" />
                                                                        <property name="filenameDateFormat" value="yyy-MM-dd" />
                                                                </bean>
                                                        </property>
                                                </bean>
                                        </list>
                                </property>
                        </bean>
                </property>
        </bean>

关于高负载下jetty的配置,可以参考如下文档,包括对linux服务器tcp的一些限制修改,以及jetty自身connector的配置。

分析了jetty的源代码,默认acceptQueueSize的大小为50,但是在高负载下,这个值是远远不够的,看到过一个1000 r/s的场景,将这个值设为12000。因此可以根据实际情况调大这个值。

http://wiki.eclipse.org/Jetty/Howto/High_Load

http://docs.codehaus.org/display/JETTY/HighLoadServers

猜你喜欢

转载自herbert.iteye.com/blog/1148030