好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

1.pom文件中添加依赖

?

1

2

3

4

5

6

7

8

<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

?

1

2

3

4

5

6

7

8

9

10

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配置

?

1

2

spring.redis.port= 6379

spring.redis.host=localhost

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

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

查看更多关于SpringCloud实现Redis在各个微服务的Session共享问题的详细内容...

  阅读:45次