Gyakorlat – HTTP-munkamenet adatainak tárolása a Redisben

Befejeződött

Ebben a leckében adja hozzá a Spring Session-t a meglévő Spring Boot-alkalmazáshoz, hogy HTTP-munkamenetadatokat tároljon az Azure Cache for Redisben.

A spring session konfigurálása

  1. Ha spring session-támogatást szeretne hozzáadni az alkalmazáshoz, adja hozzá a következő függőséget a <dependencies>pom.xml fájl szakaszához:

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Ha úgy szeretné konfigurálni a Spring Session-t, hogy a Redist használja a munkamenet-replikációhoz, adja hozzá a következő sort az src/main/resources/application.properties fájlhoz :

    spring.session.store-type=redis
    

Új vezérlő hozzáadása a munkamenet-replikáció teszteléséhez

Adjon hozzá egy új Spring MVC REST-vezérlőt az alkalmazáshoz a munkamenet-replikáció teszteléséhez.

  1. Hozzon létre egy új, SessionReplicationController nevű vezérlőt a TodoController mellett.

    package com.example.demo;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.session.data.redis.config.ConfigureRedisAction;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpSession;
    
    @RestController
    @RequestMapping("/")
    public class SessionReplicationController {
    
        @Bean
        public static ConfigureRedisAction configureRedisAction() {
            return ConfigureRedisAction.NO_OP;
        }
    
        @GetMapping("/session")
        public String session(HttpSession session) {
            Integer test = (Integer) session.getAttribute("test");
            if (test == null) {
                test = 0;
            } else {
                test++;
            }
            session.setAttribute("test", test);
            return "[" + session.getId() + "]-" + test;
        }
    }
    

    Megjegyzés:

    Konfiguráljon egy adott ConfigureRedisAction.NO_OP Spring bean-t, mert a Spring Session alapértelmezés szerint megpróbálja beállítani a Redis-kulcstérértesítéseket, amelyek nem működnek a biztonságos Azure Cache for Redis-példányokon. Ha kulcstér-értesítésekre van szüksége az Azure Cache for Redishez, manuálisan kell alkalmaznia őket a Redis parancssori felületén keresztül.

    A kulcstérértesítések hasznosak a WebSocketekhez, de több erőforrást használnak fel. A jelenlegi forgatókönyv nem használ WebSocketeket, és nem szabad engedélyeznie a keyspace-értesítéseket.

  2. Indítsa újra az alkalmazást a HTTP-munkamenet-replikáció előnyeinek kihasználásához.

Munkamenet-replikáció tesztelése

A HTTP-munkamenetek felhasználóspecifikusak, és cookie-kon keresztül vannak fenntartva. Az alábbi módszerek egyikével tesztelheti, hogy a munkamenetek megfelelően működnek-e:

  • Mutasson a böngészőre, http://localhost:8080/session és töltse be újra többször a lapot.

  • Futtassa többször a következő parancssort:

    curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
    

    Az előző parancs egy cookie.txt nevű fájlba menti a cookie-t.

Bármelyik metódus kimenetet hoz létre, amely az egyes kérések után növekményes számmal jeleníti meg a HTTP-munkamenet azonosítóját, ahogyan az alábbi példában látható:

Screenshot that shows example output for session replication.

A munkamenetek megfelelő megőrzésének ellenőrzéséhez indítsa újra a kiszolgálót, és ellenőrizze, hogy a munkamenet adatai nem vesztek-e el.

A következő leckében üzembe helyezi az alkalmazást a felhőben, és fürtözheti a HTTP-munkameneteket a helyi gép és a felhőszolgáltatás között.