软件编程
位置:首页>> 软件编程>> java编程>> SpringCloud实现Redis在各个微服务的Session共享问题

SpringCloud实现Redis在各个微服务的Session共享问题

作者:别等时光染了梦想  发布时间:2022-07-14 06:33:19 

标签:spring,cloud,redis

在微服务中,需要我们在各个微服务中共享Session,使用Redis来共享Session是一个很好的解决方法,Redis是运行在内存中,查取速度很快。

1.pom文件中添加依赖


<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.session</groupId>
   <artifactId>spring-session-data-redis</artifactId>
</dependency>

2.使用Redis的session替换Spring的session


package com.xueqing.demo.sleuthserverhi;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
/**
* 添加redis配置类启用redis代码spring默认session
*/
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}

3.application.properties配置文件中添加redis配置


spring.redis.port= 6379
spring.redis.host=localhost

4.启动两个端口以一样的tomcat测试


package com.xueqing.demo.sleuthserverhi;

import java.util.logging.Level;
import java.util.logging.Logger;
import brave.sampler.Sampler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
@SpringBootApplication
@RestController
public class SleuthServerHiApplication {
 public static void main(String[] args) {
   SpringApplication.run(SleuthServerHiApplication.class, args);
 }
 private static final Logger LOG = Logger.getLogger(SleuthServerHiApplication.class.getName());
 @Autowired
 private RestTemplate restTemplate;
 @Bean
 @LoadBalanced
 public RestTemplate getRestTemplate(){
   return new RestTemplate();
 }
 @RequestMapping("/hi")
 public String callHome(HttpServletRequest request){
   LOG.log(Level.INFO, "calling trace service-hi ");
   request.getSession().setAttribute("hi","111");
   LOG.log(Level.WARNING, "加入成功");
   return restTemplate.getForObject("http://localhost:8989/miya", String.class);
 }
 @RequestMapping("/info")
 public String info(HttpServletRequest request){
   LOG.log(Level.INFO, request.getSession().getAttribute("miya")+"");
   LOG.log(Level.WARNING, "获取成功");
   return "i'm service-hi";
 }
 @Bean
 public Sampler defaultSampler() {
   return Sampler.ALWAYS_SAMPLE;
 }
}
package com.xueqing.demo.sleuthservermiya;
import brave.sampler.Sampler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.util.logging.Level;
import java.util.logging.Logger;
@SpringBootApplication
@RestController
public class SleuthServerMiyaApplication {
 public static void main(String[] args) {
   SpringApplication.run(SleuthServerMiyaApplication.class, args);
 }
 private static final Logger LOG = Logger.getLogger(SleuthServerMiyaApplication.class.getName());
 @RequestMapping("/hi")
 public String home(HttpServletRequest request){
   LOG.log(Level.INFO, "hi is being called");
   request.getSession().setAttribute("miya","111");
   LOG.log(Level.WARNING, "加入成功");
   return "hi i'm miya!";
 }
 @RequestMapping("/miya")
 public String info(HttpServletRequest request){
   LOG.log(Level.INFO, "info is being called");
   LOG.log(Level.INFO, request.getSession().getAttribute("hi")+"");
   LOG.log(Level.WARNING, "获取成功");
   return restTemplate.getForObject("http://localhost:8988/info",String.class);
 }
 @Autowired
 private RestTemplate restTemplate;
 @Bean
 @LoadBalanced
 public RestTemplate getRestTemplate(){
   return new RestTemplate();
 }
 @Bean
 public Sampler defaultSampler() {
   return Sampler.ALWAYS_SAMPLE;
 }
}

5.注意事项:我用的springCloud版本为F版本需要Redis版本为2.8以上 如果不是2.8以上请升级,地址如下                                    

https://github.com/MicrosoftArchive/redis/releases

总结

以上所述是小编给大家介绍的SpringCloud实现Redis在各个微服务的Session共享网站的支持!

来源:https://blog.csdn.net/wangxueqing52/article/details/81871389

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com