zoukankan      html  css  js  c++  java
  • Jetty Session Persistence By Redis

    Copy jar 到$JETTY_HOME/lib/ext目录下

    -rw-rw-r--. 1 conversant conversant  100193 Sep 11 17:34 commons-pool-1.5.5.jar
    -rw-rw-r--. 1 conversant conversant  228268 Sep 11 17:34 jackson-core-asl-1.9.3.jar
    -rw-rw-r--. 1 conversant conversant  773019 Sep 11 17:34 jackson-mapper-asl-1.9.3.jar
    -rw-r--r--. 1 conversant conversant  125841 Sep 11 17:34 jedis-2.0.0.jar
    -rw-rw-r--. 1 conversant conversant 1991094 Sep 11 17:34 jetty-session-redis-2.4.ga-SNAPSHOT-all.jar
    -rw-r--r--. 1 conversant conversant   93525 Sep 11 17:34 logback-access-1.1.2.jar
    -rw-r--r--. 1 conversant conversant  270747 Sep 11 17:34 logback-classic-1.1.2.jar
    -rw-r--r--. 1 conversant conversant  427729 Sep 11 17:34 logback-core-1.1.2.jar
    -rw-rw-r--. 1 conversant conversant  361155 Sep 11 17:34 trove-1.0.2.jar
    -rw-rw-r--. 1 conversant conversant   24956 Sep 11 17:34 xpp3_min-1.1.4c.jar
    -rw-rw-r--. 1 conversant conversant  431406 Sep 11 17:34 xstream-1.3.1.jar

     

    准备jetty-cluster.xml

    <?xml version="1.0"?>
    <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
    
    <!-- =============================================================== -->
    <!-- Documentation of this file format can be found at:              -->
    <!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax        -->
    <!--                                                                 -->
    <!-- Additional configuration files are available in $JETTY_HOME/etc -->
    <!-- and can be mixed in. See start.ini file for the default         -->
    <!-- configuration files.                                            -->
    <!--                                                                 -->
    <!-- For a description of the configuration mechanism, see the       -->
    <!-- output of:                                                      -->
    <!--   java -jar start.jar -?                                        -->
    <!-- =============================================================== -->
    
    <!-- =============================================================== -->
    <!-- Configure a Jetty Server instance with an ID "Server"           -->
    <!-- Other configuration files may also configure the "Server"       -->
    <!-- ID, in which case they are adding configuration to the same     -->
    <!-- instance.  If other configuration have a different ID, they     -->
    <!-- will create and configure another instance of Jetty.            -->
    <!-- Consult the javadoc of o.e.j.server.Server for all              -->
    <!-- configuration that may be set here.                             -->
    <!-- =============================================================== -->
    <Configure id="Server" class="org.eclipse.jetty.server.Server">
    
       <!-- =========================================================== -->
        <!-- Configure the Server Thread Pool.                           -->
        <!-- The server holds a common thread pool which is used by      -->
        <!-- default as the executor used by all connectors and servlet  -->
        <!-- dispatches.                                                 -->
        <!--                                                             -->
        <!-- Configuring a fixed thread pool is vital to controlling the -->
        <!-- maximal memory footprint of the server and is a key tuning  -->
        <!-- parameter for tuning.  In an application that rarely blocks -->
        <!-- then maximal threads may be close to the number of 5*CPUs.  -->
        <!-- In an application that frequently blocks, then maximal      -->
        <!-- threads should be set as high as possible given the memory  -->
        <!-- available.                                                  -->
        <!--                                                             -->
        <!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool   -->
        <!-- for all configuration that may be set here.                 -->
        <!-- =========================================================== -->
        <Arg name="threadpool">
          <New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
            <Arg name="minThreads" type="int"><Property name="threads.min" default="10"/></Arg>
            <Arg name="maxThreads" type="int"><Property name="threads.max" default="200"/></Arg>
            <Arg name="idleTimeout" type="int"><Property name="threads.timeout" default="60000"/></Arg>
            <Set name="detailedDump">false</Set>
          </New>
        </Arg>
    
        <!-- =========================================================== -->
        <!-- Add shared Scheduler instance                               -->
        <!-- =========================================================== -->
        <Call name="addBean">
          <Arg>
            <New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
          </Arg>
        </Call>
    
        <!-- =========================================================== -->
        <!-- Http Configuration.                                         -->
        <!-- This is a common configuration instance used by all         -->
        <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, SPDY)-->
        <!-- It configures the non wire protocol aspects of the HTTP     -->
        <!-- semantic.                                                   -->
        <!--                                                             -->
        <!-- This configuration is only defined here and is used by      -->
        <!-- reference from the jetty-http.xml, jetty-https.xml and      -->
        <!-- jetty-spdy.xml configuration files which instantiate the    -->
        <!-- connectors.                                                 -->
        <!--                                                             -->
        <!-- Consult the javadoc of o.e.j.server.HttpConfiguration       -->
        <!-- for all configuration that may be set here.                 -->
        <!-- =========================================================== -->
        <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
          <Set name="secureScheme">https</Set>
          <Set name="securePort"><Property name="jetty.https.port" default="8443" /></Set>
          <Set name="outputBufferSize">32768</Set>
          <Set name="requestHeaderSize">8192</Set>
          <Set name="responseHeaderSize">8192</Set>
          <Set name="sendServerVersion">true</Set>
          <Set name="sendDateHeader">false</Set>
          <Set name="headerCacheSize">512</Set>
    
          <!-- Uncomment to enable handling of X-Forwarded- style headers
          <Call name="addCustomizer">
            <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
          </Call>
          -->
        </New>
        
        <Call name="addConnector">
            <Arg>
              <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg name="server"><Ref refid="Server" /></Arg>
                <Arg name="factories">
                  <Array type="org.eclipse.jetty.server.ConnectionFactory">
                    <Item>
                      <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                        <Arg name="config"><Ref refid="httpConfig" /></Arg>
                      </New>
                    </Item>
                  </Array>
                </Arg>
                <Set name="host"><Property name="jetty.host" /></Set>
                <Set name="port"><Property name="jetty.port" default="8080" /></Set>
                <Set name="idleTimeout"><Property name="http.timeout" default="30000"/></Set>
              </New>
            </Arg>
          </Call>
          
          <Call id="httpsConnector" name="addConnector">
            <Arg>
              <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg name="server"><Ref refid="Server" /></Arg>
                  <Arg name="factories">
                    <Array type="org.eclipse.jetty.server.ConnectionFactory">
                      <Item>
                        <New class="org.eclipse.jetty.server.SslConnectionFactory">
                          <Arg name="next">http/1.1</Arg>
                          <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
                        </New>
                      </Item>
                      <Item>
                        <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                          <Arg name="config"><Ref refid="sslHttpConfig"/></Arg>
                        </New>
                      </Item>
                    </Array>
                  </Arg>
                  <Set name="host"><Property name="jetty.host" /></Set>
                  <Set name="port"><Property name="jetty.https.port" default="8443" /></Set>
                  <Set name="idleTimeout">30000</Set>
                </New>
            </Arg>
          </Call>
    
    
        <!-- =========================================================== -->
        <!-- Set the default handler structure for the Server            -->
        <!-- A handler collection is used to pass received requests to   -->
        <!-- both the ContextHandlerCollection, which selects the next   -->
        <!-- handler by context path and virtual host, and the           -->
        <!-- DefaultHandler, which handles any requests not handled by   -->
        <!-- the context handlers.                                       -->
        <!-- Other handlers may be added to the "Handlers" collection,   -->
        <!-- for example the jetty-requestlog.xml file adds the          -->
        <!-- RequestLogHandler after the default handler                 -->
        <!-- =========================================================== -->
        <Set name="handler">
          <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
            <Set name="handlers">
             <Array type="org.eclipse.jetty.server.Handler">
                 <!-- 
               <Item>
                 <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
               </Item>
               <Item>
                 <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
               </Item>
                -->
                <Item>
                   <New class="org.eclipse.jetty.webapp.WebAppContext">
                        <Set name="contextPath">/</Set>
                        <Set name="war"><SystemProperty name="project.home" default="."/>/webapps</Set>
                        <Set name="defaultsDescriptor"><SystemProperty name="project.home" default="."/>/conf/jetty/webdefault.xml</Set>
                        <Set name="extractWAR">true</Set>
                        <Set name="copyWebDir">false</Set>
                        <Call name="addServlet">
                             <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
                             <Arg>/</Arg>
                        </Call>
                       <Set name="sessionHandler">
                           <New class="org.eclipse.jetty.server.session.SessionHandler">
                               <Arg>
                                   <New class="com.ovea.jetty.session.redis.RedisSessionManager">
                                       <Arg>session/redis</Arg>
                                       <Arg>
                                           <New class="com.ovea.jetty.session.serializer.JsonSerializer"/>
                                       </Arg>
                                       <!-- set the interval in seconds to force session persistence event if it didn't changed. Default to 60 seconds -->
                                       <Set name="saveInterval">20</Set>
                                       <!-- set the cookie domain -->
                                       <Set name="sessionDomain">ssdev.swiftsync.com.sg</Set>
                                       <!-- set the cookie path -->
                                       <Set name="sessionPath">/</Set>
                                       <!-- set the cookie max age in seconds. Default is -1 (no max age). 1 day = 86400 seconds -->
                                       <Set name="maxCookieAge">86400</Set>
                                       <!-- set the interval in seconds to refresh the cookie max age. Default to 0. This number should be lower than the session expirity time. -->
                                       <Set name="refreshCookieAge">300</Set>
                                   </New>
                               </Arg>
                           </New>
                       </Set>
    
                   </New>
               </Item>
             </Array>
            </Set>
          </New>
        </Set>
    
        <!-- =========================================================== -->
        <!-- extra server options                                        -->
        <!-- =========================================================== -->
        <Set name="stopAtShutdown">true</Set>
        <Set name="stopTimeout">5000</Set>
        <Set name="dumpAfterStart"><Property name="jetty.dump.start" default="false"/></Set>
        <Set name="dumpBeforeStop"><Property name="jetty.dump.stop" default="true"/></Set>
    
    </Configure>

     

     

    准备jetty-session.xml,并且修改如下配置:

    <Arg>192.168.1.12</Arg> <Arg type="int">8663</Arg>

     

    <?xml version="1.0"?>
    <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
    
    <!-- =============================================================== -->
    <!-- Configure the Jetty Request Log                                 -->
    <!-- =============================================================== -->
    <Configure id="Server" class="org.eclipse.jetty.server.Server">
        <!--
            Configure session id management
        -->
        <Set name="sessionIdManager">
            <New class="com.ovea.jetty.session.redis.RedisSessionIdManager">
                <Arg>
                    <Ref id="Server"/>
                </Arg>
                <Arg>session/redis</Arg>
                <!-- time interval to check for expired sessions in redis cache, in milliseconds. Defaults to 1 min -->
                <Set name="scavengerInterval">30000</Set>
                <!-- cluster node name -->
                <Set name="workerName">
                    <SystemProperty name="jetty.node" default="web1"/>
                </Set>
            </New>
        </Set>
    
        <!--
            Provides a Redis Pool for session management on server and each webapp
        -->
        <New class="org.eclipse.jetty.plus.jndi.Resource">
            <Arg>session/redis</Arg>
            <Arg>
                <New class="redis.clients.jedis.JedisPool">
                    <Arg>
                        <New class="org.apache.commons.pool.impl.GenericObjectPool$Config">
                            <Set type="int" name="minIdle">5</Set>
                            <Set type="int" name="maxActive">15</Set>
                            <Set type="boolean" name="testOnBorrow">true</Set>
                        </New>
                    </Arg>
                    <Arg>192.168.1.12</Arg>
                    <Arg type="int">8663</Arg>
                </New>
            </Arg>
        </New>
    
    
    </Configure>

     

     

    Modify jetty 启动脚本

    JETTY_ARGS="lib=$JETTY_HOME/lib $APP_HOME/conf/jetty/jetty-cluster.xml $APP_HOME/conf/jetty/jetty-requestlog.xml $APP_HOME/conf/jetty/jetty-session.xml OPTIONS=jsp"

     

     

    参考资料

     

    https://github.com/Ovea/jetty-session-redis

  • 相关阅读:
    【算法】Manacher算法
    python 02 python入门知识
    python 01:计算机基础知识
    表示数值的字符串
    C++ 迭代器(STL迭代器)iterator详解
    构建乘积数组
    C++ 容器(STL容器)
    数组中重复的数字
    把字符串转换成整数
    十大经典排序算法
  • 原文地址:https://www.cnblogs.com/lily-tiantian/p/4806653.html
Copyright © 2011-2022 走看看