商场学习之微服务

前言

寒假前在新电脑上配置了java环境,maven仓库,node,js,navicat,MySQL,linux,vmware等环境,创建了6个mysql数据库,77张表。
在这里插入图片描述

如此多的表,字段,去手写基础架子增删改查需要耗费大量时间的重复工作,因此:

  1. 通过人人开源逆向工程,先获取了一个连接登陆首页权限管理的通用前后短模块
  2. 在通过人人代码生成器创建各个以springboot为框架的微服务项目,每个微服务项目包括了实体类,controller,service,mapper层,又创建了一个common项目服务,为各个微服务提供通用方法
    在这里插入图片描述

现状及其要做的事情

目前前段Vue项目与renren-fast后端项目所对应,提供了系统的登录及权限管理系统,而其他微服务项目并未与前段项目相连。
首先要做的是把这个项目变成一个微服务项目
在这里插入图片描述

  1. 前端项目不在对应renren-fast这个微服务项目,而是应当对应一个后端统一的网关,由网关来返回前端想要的服务
  2. 后端各个微服务项目要去注册中心配置中心进行注册和统一配置,这样当一个微服务项目调用另一个微服务项目,只需要去注册中心,看哪些服务注册了,直接使用就可
  3. 网关也是通过注册中心去寻找服务然后返回前端

微服务学习

spring cloud alibaba的github地址
这是主要的组件。
在这里插入图片描述

Nacos注册中心配置中心

nacos需要先去github项目下载
下载了nacos服务然后在项目中引入对应的注册中心和配置中心依赖

       <!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--        配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

然后点击bin目录中的这个启动nacos服务器,弹出的cmd会有nacos可视化的网址,在8848端口,访问后使用管理员登录,账号密码都是nacos
在这里插入图片描述

在项目中使用nacos服务

  1. 在项目配置文件写上nacos的路径端口, 还有该微服务项目的名称
    在这里插入图片描述
  2. 在springboot启动类加上注解
@EnableDiscoveryClient
  1. 然后就可以在服务管理中看到注册的服务了
    在这里插入图片描述
  2. 添加feign接口,这样才能让一个在naos里的微服务去调用另一个在nacos里的微服务
    第一步,引入feign的依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

第二步,添加一个feign目录,把要调用的微服务写一个接口,比如我这个服务要调用3个微服务,那么就写3个接口,在每个接口上添加@FeignClient(“coupon”) 这个注解,里面写该接口调用的微服务在nacos中的注册名
在这里插入图片描述
直接复制要调用的微服务的controller中方法及其路径注解,需要注意,路径一定要手动加全,因为我们使用requestmapping注解在controller类上为每个方法提供了基础路径,实际路径是基础路径拼接方法上的路径

第三步,在启动类中添加@EnableFeignClients(basePackages = “com.jlau.agriMall.member.feign”) 该注解,里面的basepackage参数是扫描feign目录

第四步,在本服务中需要用其他微服务的地方,引入所需要使用微服务的feign接口对象,然后开始使用
在这里插入图片描述

  1. 配置中心引入,比如我们新建一个application.properties文件,在里面配置两个值
    在这里插入图片描述
    然后我们在controller里面新建一个方法,查询这两个配置值
    在这里插入图片描述
    结果是可以查到,但是万一项目上线,要改配置文件中的值,就需要修改然后打包在重新部署上线

添加nacos的配置中心

第一步是引入依赖,我们在开头已经引了
第二步是添加配置中心,项目运行会打印 配置中心名字,项目名.properties
在这里插入图片描述
第三步,配置中心添加这个名字的配置
在这里插入图片描述

第四步添加注解@RefreshScope
然后就可以动态更改配置了,优先级是 配置中心大于项目配置
然后就可以动态更改配置而不用重启项目了

这里出现了个问题,就是加了@RefreshScope 注解之后,值全是null,下面是原因:

这个注解的proxyMode默认值是ScopedProxyMode.TARGET_CLASS,这个代理
模式使用的是CGLIB方式。如果@RefreshScope使用在@Controller(不止这一个)标记的类上就会出现注入null值的问题。@RefreshScope只要是用在其他会被spring使用CGLIB代理的类上就会出问题。原因是@RefreshScope默认使用CGLIB代理,而目标类又是被CGLIB代理过的,这样就被代理了两次,第二次也就是@RefreshScope代理的时候会出现属性丢失的问题。

解决方法是@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)

  1. 配置中心的一些细节
    1) 命名空间,一是做隔离的,比如生产环境,测试环境等,二是比如有多个微服务,太乱了,可以每个微服务一个命名空间
    创建命名空间
    在这里插入图片描述
    默认是public命名空间,可以在这选择其他命名空间
    在这里插入图片描述
    加在bootstrap.properties里 其他的命名空间id就可以了
    在这里插入图片描述
    2)配置分组
    默认是DEFAULT_GROUP, 分组比如说1111,618啥的,到了双11,就可以采用1111的配置集
    需要在bootstrap.properties里面写上 spring.cloud.nacos.config.group=1111 这个分组配置

本项目 通过命名空间 隔离区分 微服务 通过 配置分组 区分不同生产环境(开发,测试,上线)
把之前杂乱的配置,分开放,还可以动态修改

在这里插入图片描述
每个项目弄一个自己的命名空间,在这个空间下有好多分组,比如开发测试,每个分组里面有不同的配置
在项目的配置文件中需要写的是,命名空间id,以及运用的配置文件名称,分组和自动刷新
在这里插入图片描述
启动项目时我们会看见已经加载到这几个配置,还有一个默认分组的配置会自动加载到
在这里插入图片描述

添加gataway网关

gateway网关的作用,一堆服务有好有坏有上线有下线的,gateway可以动态检测服务是否健康,然后将请求交给能用的服务,而且很多鉴权,限流的代码写在各个服务里及其冗余,统一写在网关里非常的方便
在这里插入图片描述
创建gateway网关项目,引入基础依赖common会有个问题,就是common里有mybatis的依赖,而网关不需要数据库,也没配置数据源,所以需要在启动类加上排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

  1. 引入gate
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>`
  1. 和其他项目一样配好基本配置,将自身注册在注册中心,然后使用配置中心
  2. 开始写个路由
    这id就是个路由名字,uri是路由路径,下面predicates是断言,可以有很多断言,uri,baidu是 路径得有uri=baidu
    在这里插入图片描述
    请求一个试试
    在这里插入图片描述
  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值