您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Nginx中怎么利用Tomcat搭建集群,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
創建Maven項目,添加依賴
使用IntelliJ IDEA創建Maven項目,并添加相關依賴,依賴如下:
<dependencies> <!-- Jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <!-- Spring Data Redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.4.RELEASE</version> </dependency> <!-- Spring Session --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>1.3.1.RELEASE</version> </dependency> <!-- Apache Commons Pool --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framework.version}</version> </dependency> </dependencies>
這里要添加的依賴略多,不過大致可以分為如下三類:
1.Redis的Java客戶端,這個通過Java代碼來操作Redis
2.Spring Data Redis,這個用來簡化Redis操作
3.Spring Session,這個用來進行Session的管理
4.Spring
首先在resources文件夾下創建spring+springmvc的配置文件:
然后在web.xml文件中配置spring和springmvc,如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
然后在applicationContext.xml文件中簡單的配置一下spring,如下:
<context:component-scan base-package="org.sang" use-default-filters="false"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
配置Spring容器要掃描的注解。
然后在spring-servlet.xml中配置SpringMVC容器要掃描的注解,如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <mvc:annotation-driven/> <context:component-scan base-package="org.sang" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> </beans>
spring-servlet.xml的配置相對要簡單一些。
OK,至此,Spring+SpringMVC的環境就搭建成功了。
Session一直是我們做集群時一個比較頭疼的問題,之前有一個GitHub上的開源控件tomcat-redis-session-manager,但是這個東西目前只支持到Tomcat7,不是最佳選項,我們也可以使用Nginx提供的ip_tables,將同一個請求ip定位到同一臺服務器上,但是這樣沒有辦法充分利用服務集群的性能,Spring Session的出現可以很好的幫助我們解決這些問題,它具有如下特點:
1.Spring Session提供了redis、jvm的map、mongo、gemfire、hazelcast、jdbc等多種存儲session的容器的方式。
2.同一個瀏覽器同一個網站,支持多個session。
3.不依賴于cookie。可通過header來傳遞sessionID
4.WebSocket和spring-session結合,同步生命周期管理。
5.使用簡單
OK,接下來我們來看看怎么配置我們的Spring Session,首先在web.xml文件中添加過濾器:
<filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這里使用了Spring Web提供的代理過濾器,將攔截到的請求全部交給一個名為springSessionRepositoryFilter的過濾器進行處理。OK,然后在applicationContext.xml中配置Spring Session和Redis,如下:
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/> <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="192.168.248.128"/> <property name="port" value="6379"/> <property name="database" value="0"/> </bean>
hostName即為redis的地址,port為redis的服務端口。
OK,寫完這一切就OK了,我們來寫一個簡單的jsp頁面測試一下,測試前記得啟動你的redis服務哦。
index.jsp頁面如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/setsession"> <input type="text" name="name"><input type="submit" value="提交"> </form> <form action="/getsession"> <input type="submit" value="獲取"> </form> </body> </html>
該頁面我盡量做得簡單,有兩個按鈕,第一個向session中存數據,第二個按鈕從session中取數據,對應的Controller如下:
@Controller public class HelloController { @RequestMapping("/setsession") @ResponseBody public void setSession(HttpSession session, String name) { session.setAttribute("name", name); } @RequestMapping(value = "/getsession",produces = "text/html;charset=utf-8") @ResponseBody public String getSession(HttpSession session, HttpServletRequest req) { return session.getAttribute("name").toString()+"-----"+req.getServletContext().getRealPath("/"); } }
當我向httpsession中寫數據時,這些數據會自動存儲到redis緩存/數據庫中。在返回session數據時我加上了項目部署路徑,是為了在部署到集群上之后區分這個請求是由哪臺服務器處理的。啟動項目,頁面如下:
點擊提交,會將數據保存到redis 中,如下:
然后再回到起始頁面,點擊獲取按鈕,即可以拿到Session中的值,如下:
OK,很簡單吧!
至此,我們的Spring Session+Redis實現Session共享這個功能就完成了。接下來我們來看看如何為這個簡單的web項目搭建集群。
1.下載Nginx(地址http://nginx.org/),我這里使用的Nginx版本是nginx-1.12.0
2.下載Tomcat,我這里使用的Tomcat版本是apache-tomcat-8.5.12
網絡拓撲圖如下:
將下載的Tomcat復制成兩份,如下:
修改Tomcat的配置文件(conf/server.xml),重新設置端口號,每一個Tomcat的server.xml都需要修改三處,如下:
要修改的地方有三處,我將給默認的端口號前面都加1,然后第二個Tomcat我給這三個地方的端口號前面都加2,這樣方便我一會在同一臺機器上跑多個Tomcat。
OK,做好這一切之后,可以先啟動這兩個Tomcat,看看能不能正常訪問。
OK,兩臺Tomcat都配置好之后,我們將剛才的項目拷貝到tomcat的webapps目錄下,給兩個Tomcat都拷貝。這里就不贅述了。
下載Nginx,解壓后,配置conf/nginx.conf文件,如下:
配置完成后,啟動nginx。再測試。
向session中存數據:
從session中取數據:
多取幾次,你會看到請求是由不同的服務器處理的,如下:
關于Nginx中怎么利用Tomcat搭建集群就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。