전투 및 상세 (5) 봄 세션 및 세션 레디 스 해결할 도메인 간 분산 된 주식 발행을 사용 레디 스의 핵심 원칙


전투의 레디 스의 핵심 원칙 (6) 봄 세션 및 세션 레디 스 해결할 도메인 간 분산 된 주식 발행을 사용하여 설명

 

머리말

사용의 Nginx + 톰캣 분산로드 밸런싱 밸런싱 알고리즘은 무작위로 중량에있어서, 회전에 가장 일반적으로 사용 IP_Hash이다. 부하로 인해 런타임에 하나의 톰캣 톰캣에 다른 요청 Nginx에의 분포에, 알고리즘의 균형을 아무리 유형은 다른 용기, 그래서 질문 세션 동기화 또는 손실이 발생하지 않습니다.

세션 공유 프로그램은 실제로 톰캣, 부두 및 기타 서버가 세션에서 통합 (MySQL과 같은) 데이터베이스에 저장된 콘텐츠 나 (예 레디 스 등) 캐시의 세션을 공유 제공하는 일반적인 사용하는 것입니다 많이 달성.

이 문서는 사용하는 방법에 대해 알게 된 바람둥이 - 레디 스 세션 매니저 도메인 간 분산 세션의 문제를 해결하기 위해 오픈 소스 프로젝트를 자신의 주요 아이디어는 서블릿 컨테이너는 플러그인, 사용자 정의 생성과의 HttpSession의 관리 기능을 제공합니다 사용하는 것입니다 전략 및 구성의 방법으로 기본 정책을 대체합니다. 바람둥이 - 레디 스 세션 매니저는 톰캣 특히 쓰기 작업의 내부 org.apache.catalina.session.ManagerBase 다시, 레디 스의 위치에 바람둥이 세션 저장 포인트 :

여기에 설명 된 사진을 쓰기

RedisSessionManager 상속과 org.apache.catalina.session.ManagerBase 추가, findSession, createEmptySession, 등을 제거를 무시하고, 데이터 저장 레디 스의 포인팅 작업의 세션 변경 검색 작업의 삭제.

그러나, 사용을 통해 *** 바람둥이 - 레디 스 세션 매니저는 *** 알아야한다, 반대 배열 또는 조금 성가신, 인위적으로 톰캣의 구성을 수정하는 데 필요한 코드는 같은 톰캣 서블릿 컨테이너를 결합 할 필요가, 그리고 유통에 대한 레디 스 클러스터 관리 프레임 워크 봄 세션은 사용자가 진정으로 투명이 세션을 분산 관리 할 수있는 좋은 반대로 개인의 좋은 타입이다.

봄 세션은 서블릿 컨테이너에 의존하지 않고, 웹 응용 프로그램 수준을 구현하는 코드는 통합 스토리지에 레디 스에서 세션을 달성하기 위해 기존 프로젝트를 기준으로 직접 봄 세션 프레임을 추가합니다. 웹 애플리케이션은 스프링 프레임 워크에서 개발하는 경우, 분산 응용 프로그램에 따라 변경된 독립형 웹 응용 프로그램을 할 수 있습니다 기존 프로젝트의 구성의 소량을 필요로 인해 기반으로하지 서블릿 컨테이너는,이 프로젝트를 마이그레이션 자유롭게 할 수있다 다른 용기에 관한 것이다.

봄 세션 사용

공식 주소 : http://projects.spring.io/spring-session/

공식 문서 주소 : http://docs.spring.io/spring-session/docs/1.3.0.RELEASE/reference/html5/

봄 세션은 프로그램의 서블릿의 HttpSession 생성 및 관리 기능을 제공합니다. 봄 세션 공유 문제 세션을 해결하기 위해, 세션 데이터를 저장하는 외부 레디 스에 클러스터 세션 (세션 클러스터) 함수의 기본값을 제공합니다.

첫째, 특성

봄 세션은 다음과 같은 기능을 제공합니다 :

  1. 구현 및 사용자 세션 관리를위한 API;
  2. 의 HttpSession은 - 애플리케이션 컨테이너 (즉 톰캣)의 HttpSession 중성 다른 실시 예를 허용;
    1. 클러스터 세션 - 봄 세션은 클러스터 세션이 덜 부담이되었다 허용하고, 응용 프로그램 컨테이너와 골드 습관에 결합하지 않는다.
    2. 여러 개의 브라우저 세션 - 브라우저 세션의 단일 인스턴스에서 봄 세션 관리 지원 다수의 사용자.
    3. 편안하고 API를 - 봄 세션 세션 ID는 헤더의 RESTful API를 사용할 수 있도록 제공했다.

두, 봄 세션 케이스 XML 기반 구성을 달성하기 위해

작은 경우 SSM 프레임 워크를 기반으로.

여기에 설명 된 사진을 쓰기

프로젝트 :

여기에 설명 된 사진을 쓰기

(1) 기본적인 환경 요구

봄 세션을 사용하여 수행 한 후, 우선 이미 가지고 레디 스 서버를 설치하는 것입니다!

(2) 프로젝트 종속성 (의존성 기본 사용) 추가

 <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>1.3.0.RELEASE</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>biz.paluch.redis</groupId>
            <artifactId>lettuce</artifactId>
            <version>3.5.0.Final</version>
        </dependency>
 
  • 1
  • 4
  • 5
  • 6
  • (7)
  • 8
  • 9
  • (10)
  • (11)

(3) Spring 설정 파일을 추가

당신이 필요한 종속성을 추가 한 후, 우리는 해당 봄 구성을 작성해야합니다. 스프링 구성은 용기 자체의 HttpSession 구현 대체 스프링 세션 지원의 HttpSession 구현을 사용 서블릿 필터를 생성한다. 이 단계는 또한 코어의 봄 세션입니다.

<context:annotation-config/>

<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>

<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"/>
 
  • 1
  • 4
  • 5

코드 참고 :

여기에 설명 된 사진을 쓰기

레디 스 LettuceConnectionFactory로서는 ConnectionFactory를 구성한다.

참고 :

<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"/>
 
  • 1

볼 수있는 소스 코드를보기, 기본 레디 스 링크하는 구성 :

여기에 설명 된 사진을 쓰기

그래서, 당신은 다음과 같은 구성으로 자신의 레디 스 구성, 변경이있는 경우 :

<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory">
     <property name="hostName" value="192.168.1.149"/>
     <property name="port" value="6379"/>
     <property name="password" value="123456"/>
</bean>
 
  • 1
  • 4
  • 5

이름이 'enableRedisKeyspaceNotificationsInitializer'와 콩을 만드는 오류에 (5) 오류 처리 :

더 이상 봄 세션에 대한 다음과 같은 구성을 추가하지 설정 명령을 실행

<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
 
  • 1

추가하지 않을 경우, 다음과 같은 오류를보고합니다 :

Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]:
Invocation of init method failed; nested exception is java.lang.IllegalStateException: Unable to configure Redis to keyspace notifications.
See http://docs.spring.io/spring-session/docs/current/reference/html5/#api-redisoperationssessionrepository-sessiondestroyedevent
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR unknown command config
 
  • 1
  • 4

(5) web.xml을 첨가 하였다 DelegatingFilterProxy

<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>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
 
  • 1
  • 4
  • 5
  • 6
  • (7)
  • 8
  • 9
  • (10)

DelegatingFilterProxy는 이름 springSessionRepositoryFilter으로 콩을 보이는 필터로 변환. 각 요청 DelegatingFilterProxy를 호출하는 경우, 또한 springSessionRepositoryFilter를 호출합니다.

(6) 스프링 MVC 컨트롤러 코드가 테스트에 사용된다 :

@Controller
@RequestMapping(value = "/spring/session", produces = {ConstString.APP_JSON_UTF_8})
public class SpringSessionDemoController {

    @RequestMapping(value = "/setSession.do", method = RequestMethod.GET)
    public void setSession(HttpServletRequest request, HttpServletResponse response) {
        String name = request.getParameter("name");
        String value = request.getParameter("value");
        request.getSession().setAttribute(name, value);
    }

    @RequestMapping(value = "/getSession.do", method = RequestMethod.GET)
    public void getInterestPro(HttpServletRequest request, HttpServletResponse response) {
        String name = request.getParameter("name");
        System.out.println("------" + request.getSession().getAttribute(name));
    }

    @RequestMapping(value = "/removeSession.do", method = RequestMethod.GET)
    public void removeSession(HttpServletRequest request, HttpServletResponse response) {
        String name = request.getParameter("name");
        request.getSession().removeAttribute(name);
    }
}
 
  • 1
  • 4
  • 5
  • 6
  • (7)
  • 8
  • 9
  • (10)
  • (11)
  • (12)
  • (13)
  • (14)
  • (15)
  • (16)
  • (17)
  • (18)
  • (19)
  • (20)
  • (21)
  • (22)
  • (23)

여기에 설명 된 사진을 쓰기

(7) 시험

레디 스의 내용을 볼 도구를 사용하여

여기에 설명 된 사진을 쓰기

찾을 수 있습니다 가치가있다! 그리고이 만료가 포인팅 화살표의 위치를 ​​볼 수 있습니다, 실패 시간 값을 기록!

(8)이, 사용의 봄 세션이 완료되었습니다!

개요

크로스 도메인 분산 환경 세션 공유 문제를 들어, 사용 또는 오픈 소스 프레임 워크의 사용은 자신의 프레임 워크를 개발할지 여부를, 우리는 문제를 이해해야합니다 세션은 매우 메모리 집약적 인 일 Tomcat 컨테이너입니다 만듭니다. 우리는 비슷한 프레임 워크를 쓸 때 따라서, 우리가주의를 지불해야합니다, 세션 Tomcat이 우리를 위해 만들어지지 후, 우리는 먼저 세션을 얻을 후 레디 스 및 기타 저장소에 업로드했지만 바로 우리 자신의 창조 세션이 그것은 필수입니다!

 

추천

출처www.cnblogs.com/ko88/p/11697851.html