【序言】
作为学习的一个demo,文章可能存在不严谨的解决方案和措辞,发现的同学的多谢及时指出,我会第一时间更新改正,谢谢。
【推荐】
2021年10月23日11:15:48
随机数产生问题,spring security 拦截问题待解决
【持续更新】
【本文要点】
xshell,xftp,jdk,tomcat,nginx
【要求】外网能够访问到云服务器上部署的项目,云服务器上必须通过nginx转发。最终的效果
www.domain.top进入到项目主页。
文章目录
开篇、2021-10-14 开篇:SpringBoot实现blog项目https://junking.blog.csdn.net/article/details/120773656
一话、nginx配置SSL证书https://mp.csdn.net/mp_blog/creation/editor/120774844
二话、SpringBoot初级项目部署https://www.domain.com/
三话、
记一次部署问题。(服务启动慢,随机数产生问题)_清风半夜鸣蛙-CSDN博客服务器:1、 如果说你三个服务所连接的数据库,redis,等等都不一样,那么就是单服务器的多应用部署,可能你是根据配置文件来区分成三个服务,对外的服务就是三个,总的就是三个完全不同的服务,只不过能力是一样的。 2、 如果说三个服务连接的都是同一个数据库,作为一个集群部署的话,对外的服务就一个。 3、当前项目部署三个服务,来对外提供能力。 端口分别是28080、28180、28280。 ...https://blog.csdn.net/H2677lucy/article/details/120835883
四话、暂停更新
五话、暂停更新
六话、暂停更新
七话、暂停更新
八话、暂停更新
九话、暂停更新
十话、暂停更新
服务器:
1、 如果说你三个服务所连接的数据库,redis,等等都不一样,那么就是单服务器的多应用
部署,可能你是根据配置文件来区分成三个服务,对外的服务就是三个,总的就是三个完
全不同的服务,只不过能力是一样的。
2、 如果说三个服务连接的都是同一个数据库,作为一个集群部署的话,对外的服务就一个。
3、当前项目部署三个服务,来对外提供能力。
端口分别是28080、28180、28280。
三个服务都没有连接数据库,数据库层面暂时不存在事务的问题。
通过nginx的负载均衡来模拟一下session的问题。
Nginx配置:
upstream anik-blog-web{
server 127.0.0.1:28080 weight=2 max_fails=2 fail_timeout=30s;
server 127.0.0.1:28081 weight=3 max_fails=2 fail_timeout=30s;
server 127.0.0.1:28082 weight=5 max_fails=2 fail_timeout=30s;
}
这三台服务来提供我当前blog项目的一个服务、weight暂时我们配置一样,因为本身就在一个机器上。打个比方说,现在有100个请求过来了,可能50%到28082的服务上了,30%到28081服务上去了,20%到28080服务上去了,我的理解是这样的,可能跟机器本身的一个性能指标也有关系。
服务器启动部署:
场景:
1、模拟一个场景,当前服务我对外提供了一个接口,能力是返回用户的文章列表(
就提供这个接口,不需要登录,不需要健全,你给我用户Id,
我就给你返回用户的文章列表)。
/v1/article/{userId}/getAllarticle
@GetMapping("/{userId}/getAllArticle")
@ResponseBody
public ResponseJson getAllArticleById(HttpServletRequest request,
HttpServletResponse response, @PathVariable String userId){
if(!StringUtils.hasText(userId)){
return getFailResponseJson(null,"用户名Id为空。sessionId:"+request.getSession().getId());
}
if(!"u12138".equals(userId)){
return getFailResponseJson(null,"用户名Id错误。sessionId:"+request.getSession().getId());
}
List articleInfoList = new ArrayList<>();
ArticleInfoImpl articleInfo = new ArticleInfoImpl();
articleInfo.setId(userId);
articleInfo.setArticleAuthor("清风半夜鸣蛙");
articleInfo.setArticleTitle("单个机器的多应用部署,解决session问题。");
articleInfo.setArticleDescritpion("简介:当我们的用户量不断在上升的同时," +
"尽管我们可用通过升级现有机器配置来提高性能,但综合考虑,增加机器的数量,采用集群部署的解决方案性价比会更高...");
articleInfoList.add(articleInfo);
return getSuccessResponseJson(articleInfoList,
"文章列表获取成功。sessionId:"+request.getSession().getId());
}
2、请求验证
本地先把这个接口跑通。
然后上服务器测试。
3、 服务启动了
本来这个地方打印的时候,当前端口和sessionid的打印是前后两行的,
但是迟迟打印不出来,服务看起来启动起来了,但是页面一直刷新不出来
。这个地方后面持续跟踪一下 ,日志记录一下。
此时服务已经请求到了28081上。看起来本身代码存在问题,像security的配置,
以及跨域问题上没有彻底解决。
但是。。。。不影响我测试本次主题,session的问题,等一会就好了。如果请求三个服务都
走一遍,也就是要卡三次。
这个地方不用等到下次,直接开始调试
Springboot jar包远程调试_点滴记录,积流成河!-CSDN博客_springboot远程调试对于运行在服务器上面,隐藏较深,通过日志也排查不出的问题,有的时候需要通过本地调试来一步步排错,教过好些同事远程调试所需配置步骤,特此用笔记录下来,避免重复劳动。一、idea打包二、install 后jar包位置三、运行程序(远程调试启动)找到jar所在路径,进入cmd窗口,命令如下,监听启动5005端口(和程序的端口8089没关系)-远程调试启动语句:// 找到...https://blog.csdn.net/winy_lm/article/details/86002526自己的话。启动的时候,指定好调试端口,然后阿里云放开相关的端口,idea直接开始搞调试
// 找到对应的jar包目录,cmd窗口中执行下面语句即可 java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar mac-test-0.0.1-SNAPSHOT.jar
如果只是解决问题,启只能动一台服务了,免得你要多次请求试探才能到指定的服务上去。
最终定位到是这个地方卡住了。
sesion在创建sesionId的时候,会先产生一个随机数
java.util.Random#nextInt()
具体是这个地方卡住了。查阅了一下资料,果然跟随机数有关系
https://blog.csdn.net/lsm135/article/details/77801052https://blog.csdn.net/lsm135/article/details/77801052 通过上面的方法解决之后,开始重启,看一下效果。
改完之后,页面刷新的很快。此时我保证了我单应用是没问题的。
4、启动三个服务
奇怪的问题增加了。此时请求的jsessionid和响应的jsessionId是不一样的。导致重定向到了登录界面。但是我们对这个请求并没有任何的过滤,所以按理说不应该跳转到登录界面的。
暂停更新blog-demo,一段时间后再更新。写shell脚本去了



