微服务一些记录

2021-11-04  本文已影响0人  今年五年级
  1. springboot2.4.12版本javax.validation不存在

https://blog.csdn.net/ZHENFENGSHISAN/article/details/121248382

2. springcloud网关gateway依赖了openfeign远程调用,高版本不依赖ribbon,需要显式添加依赖,否则出现报错503:

即无法实现负载均衡lb,只能配置访问域名+端口

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

3. 报错:
java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header

因为:springboot版本升级到2.4.12,在2.4.12中配置项的名称已经更改,使用之前的配置报错
https://blog.csdn.net/weixin_43920778/article/details/115211784

  1. 高版本idea修改terminal为cmd,非ps

pycharm中的terminal运行从PS修改成cmd

  1. 批量启动微服务

首先选择editConfiturations

然后新建compound

然后将各个微服务依次添加进去,并设置汇总启动项名称,以后启动这个启动项,会将包含的所有微服务一起启动

  1. 微服务众多情况下,需要限制各个微服务内存占用,修改配置中的虚拟机启动项,如添加-Xmx100m参数,限定每个微服务的内存占用

7.More arguments provided (1) than placeholders specified (0)

原因:使用了如下的写法:

而因为log.error有专门的针对异常的方法,因此占位符{}等于执行了空的占位符,所以告警,如果我们第二个参数不是一个异常,是一个普通的Object,那么就不会有这个提示,可以正确使用这个占位符

  1. 如果我们想要让nginx代理我们的gateway网关,然后让网关转发给各个服务,这个网关和各个服务如果部署到我们本地,而nginx是位于云服务商如腾讯云、阿里云上面的docker容器的话,我们需要配置内网穿透,让我们自己电脑上的服务可以被公网访问到
    使用Ngrok进行内网穿透(Windows) - 简书 (jianshu.com)
    推荐使用钉钉的内网穿透工具,ngrok速度过慢且每次启动会更换二级域名

整个流程:
我们自己电脑访问这个server_name的域名就会去访问docker容器里面的nginx,然后nginx再转发到我们自己电脑的网关服务,我们自己的网关服务再转发到我们自己的具体微服务

  1. 性能优化需要考虑你的应用是CPU密集型还是IO密集型
    因此我们做性能优化,要考虑多方面,但是,不管考虑哪个方面,首先应该考虑自己的应用属于CPU密集型还是IO密集型

IO密集型:

如果我们发现cpu每天都很闲,cpu经常占用30%,40%,顶多到60%,但是IO占用非常大,内存也挤爆了,包括磁盘也在疯狂读写数据,说明我们这个应用就是IO密集型,包括我们的网络流量也非常巨大,每秒要出入很多字节数据

CPU密集型:
(就是大量计算),比如我们查到一堆数据,我们要大量计算,排序,过滤,整合等等,那这就是cpu密集型任务,包括我们使用后台监控应用,可以观测到cpu一直占用70%,80%以上

总结:
如果是CPU密集型的很好解决:加上服务器,多节点来分担任务,升级CPU即可解决问题

如果是IO密集型:我们除了换固态硬盘,内存条,使用各种缓存技术,提高网卡的传输效率,我们单加cpu可能就没有什么作用了

  1. 如何通过gateway测试开启多个某一服务的节点的负载均衡

idea的services界面,右键要多开的服务,选择copy configurations,然后配置名称和启动端口号,这个启动端口号会覆盖yml文件中端口号的配置,达到同一个服务多个节点不占哟共公共端口

  1. Xshell开个多个会话,同时,将命令一次发到4个会话中,比如我们要同时往同一个服务器的docker中的redis测试setex命令

(1)首先通过点击查看-> 撰写 -> 撰写栏,来开启撰写栏功能

(2)然后比如我们撰写栏中输入docker exec -it redis redis-cli -a [redis密码],再左侧蓝色标签中选择全部会话,来让4个会话同时进入redis容器的redis客户端功能
(3)用(2)步骤这样的批量方式,使用命令set lock haha nx测试4个会话尝试加锁,必定只能有1个成功

  1. 网关报错:reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response


reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response解决方案_Lovnx-CSDN博客

  1. SpringCloud 中使用HikariPool 报错Possibly consider using a shorter maxLifetime value

SpringCloud 中使用HikariPool 报错Possibly consider using a shorter maxLifetime value_xgw的专栏-CSDN博客

当连接池的参数idleTimeout或maxLifetime大于数据库的interactive_timeout或wait_timeout时,连接池里的连接没过期,但数据库那边已经过期了,就会出现上面的错误。

  1. 低版本idea没有services界面的解决办法,处理后会出现在dashboard里面

IDEA的Services窗口开启方法

上一篇下一篇

猜你喜欢

热点阅读