多语言展示
当前在线:1090今日阅读:167今日分享:16

SpringCloud如何配置Rest无状态Session配置

Spring Cloud实战开发系列课程-分布式开发简介是系列课程第六课。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。工具/原料
工具/原料
1

spring cloud

2

spring boot

3

restful

4

maven

5

intellij idea

6

session

方法/步骤
1

通过之前一系列的演示可以发现整个Rest项目中的一个问题所在,所有的Rest都是基于HTTP协议的一种应用,而在这种应用上,所有的WEB容器一般都会提供有一个Session的机制,也就是说每一个用户访问之后如果该用户一直连接,则认为该用户应该一直被服务器保存状态,但是微服务有可能同时并发访问几十万人,那么如果所有的session状态都被维护着?

2

【microcloud-provider-dept-8001】现在修改Rest程序类,追加一个取得session id的方法。package com.gwolf.microcloud.rest;import com.gwolf.microcloud.service.IDeptService;import com.gwolf.vo.Dept;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;/** * Package: com.gwolf.microcloud.rest * Description: TODO * Author: * Date: Created in 2017-11-12 12:21 * Company: * Copyright: Copyright (c) 2017 * Version: 0.0.1 * Modified By: */@RestControllerpublic class DeptRest {    @Resource    private IDeptService deptService;        @RequestMapping('/dept/id')    public Object id(HttpServletRequest request) {        return request.getSession().getId();    }    @RequestMapping(value = '/dept/get/{id}',method = RequestMethod.GET)    public Object get(@PathVariable('id') long id) {        return this.deptService.get(id);    }    @RequestMapping(value = '/dept/add',method = RequestMethod.POST)    public Object add(@RequestBody Dept dept) {        return this.deptService.add(dept);    }    @RequestMapping(value = '/dept/list',method = RequestMethod.GET)    public Object list() {        return this.deptService.list();    }}

3

随后进行提供者的Rest连接访问:http://dept-8001.com:8001/dept/id,session id被保存处理了。

4

【microcloud-provider-dept-8001】修改application.yml配置:以下为保值Session状态:服务器内存有可能被占满server:  port: 8001mybatis:  config-location: classpath:mybatis/mybatis.cfg.xml    # mybatis配置文件所在路径  type-aliases-package: com.gwolf.vo       # 定义所有操作类的别名所在包  mapper-locations:                                     # 所有的mapper映射文件  - classpath:mybatis/mapper/**/*.xmlspring:  datasource:    type: com.alibaba.druid.pool.DruidDataSource    # 配置当前要使用的数据源的操作类型    driver-class-name: com.mysql.cj.jdbc.Driver      # 配置MySQL的驱动程序类    url: jdbc:mysql://localhost:3306/mldn_1?serverTimezone=UTC   # 数据库连接地址    username: root                                  # 数据库用户名    password: root                            # 数据库连接密码    dbcp2:                                          # 进行数据库连接池的配置      min-idle: 5                                   # 数据库连接池的最小维持连接数      initial-size: 5                               # 初始化提供的连接数      max-total: 5                                  # 最大的连接数      max-wait-millis: 200                          # 等待连接获取的最大超时时间  application:    name: microcloud-provider-deptsecurity:  user:    name: gwolf       #用户名    password: gwolf   #密码    role:             #授权角色    - USER  sessions: always

6

不管你以后的项目或者支持类中是否有设置无状态的问题,你最好都进行一下设置,否则你的Rest服务在收到严重的内存困扰,最严重的的问题就是内存溢出。这个是标注的做法。

推荐信息