谷粒商城项目(学习笔记三)

谷粒商城项目(学习笔记一)

谷粒商城项目(学习笔记二)

谷粒商城项目(学习笔记三)

谷粒商城项目(学习笔记四)

谷粒商城项目(学习笔记五)

第三章:分布式部署

谷粒商城项目(学习笔记一)

谷粒商城项目(学习笔记二)

谷粒商城项目(学习笔记三)

第三章:分布式部署

一、引入spring-cloud-alibaba

二、配置Nacos注册中心discovery

1.在gulimall-common中引入nacos

2.在需要注册的微服务的yaml文件中配置

3.配置微服务能够应用nacos

4.启动微服务和nacos的server,访问测试是否注册成功。

三、配置Nacos配置中心Config

1.引入nacos-config包,最好和上面的discovery一起引入

2.创建bootstrop.properties文件

3.在nacos的配置管理中添加配置集(名字为:服务名.properties)

4.动态获取配置

5.测试

6.将数据配置到配置中心中

四、远程调用Openfeign

 五、Gateway网关

1.新建Gateway的Module

2.引入gulimall-common

3.网关的调试

4.测试成功




一、引入spring-cloud-alibaba

根据自己的版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub,引入需要的版本

我这里是2021.1版的

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>



二、配置Nacos注册中心discovery

官方下载地址

官方配置地址

1.在gulimall-common中引入nacos

这里官网巨坑,discovery在第官网目录的第二行

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



2.在需要注册的微服务的yaml文件中配置

spring:
  application:
    name: nacos-config-member(你的服务名)
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848(nacos的地址和端口)

3.配置微服务能够应用nacos

在微服务的主启动类上加入

@EnableDiscoveryClient

4.启动微服务和nacos的server,访问测试是否注册成功。

http://localhost:8848/nacoshttp://localhost:8848/nacos

如果端口被占用了,可以看看这篇文章

端口被占用,如何释放端口_沙滩的流沙520的博客-CSDN博客_端口被占用

netstat -ano|findstr 被占用端口号
taskkill /t /f /im 被占用端口号对应的TCP号

三、配置Nacos配置中心Config

官网配置地址

1.引入nacos-config包,最好和上面的discovery一起引入

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

2.创建bootstrop.properties文件

配置nacos中一些优先级较高的配置如:

spring.application.name=gulimall-coupon
spring.cloud.nacos.server-addr=localhost:8848

如果bootstrop.properties文件无效,需要引入下面依赖:

        <!-- 启动获取配置中心配置 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.2</version>
        </dependency>

3.在nacos的配置管理中添加配置集(名字为:服务名.properties)

4.动态获取配置

为controller添加@RefreshScope注解,动态获取配置集

5.测试

1)访问:http://localhost:7000/coupon/coupon/test

得到了姓名和年龄

 2)修改配置集中的参数

参数改变

则配置中心部署成功。

6.将数据配置到配置中心中

如果配置中心和当前项目中都配置了同一个参数,优先使用配置中心的配置

着重注意config和discovery的参数问题,和namespace,group的配置:

生产,运行,测试环境空间互相隔离:dev ,prod , test

命名空间配置示例:

 1)将application.yaml配置到配置中心中,可以将其拆分为3个部分数据源部分,mybatis部分和其他部分。

 具体情况如下

 

 2)将application.yaml注释掉,运行微服务,发现成功运行。

        所以所有的配置都可以配置到配置中心

四、远程调用Openfeign

1.引入Openfeign

注意版本问题,需要引入loadbalancer

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


        如果版本过高还需要引入loadbalancer,因为可能移除了
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

2.建feign接口包

在需要引入远程调用的微服务中新建feign包,并创建需要的feign接口

#示例

@FeignClient("gulimall-coupon")   #微服务名
public interface CouponFeignService {

    @RequestMapping("/coupon/coupon/member/list")    #controller路径
    public R membercoupons();
}

必须为接口指定调用的微服务,在注册中心的名字和完整的路径。

3.测试接口

1)在CouponController中写入模拟返回的优惠卷信息

     #模拟返回的优惠卷信息
     /**
     * 返回成员所有优惠券
     */
    @RequestMapping("/member/list")
    public R membercoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }

2)在MemberController中模拟调用获得成员优惠卷

    @Autowired
    CouponFeignService couponFeignService;


    #测试返回成员的优惠卷,成员微服务,调用优惠卷微服务
    @RequestMapping("/membercoupon")
    public R test(){
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setNickname("张三");   #模拟成员

        R membercoupons = couponFeignService.membercoupons();   #调用feign
        return             
        R.ok().put("member",memberEntity).put("coupon",membercoupons.get("coupons")); #返回测试结果
    }

3)为MemberApplication添加引入feign注释

@EnableFeignClients("com.yangyan.gulimall.member.feign")  #注释
@EnableDiscoveryClient
@MapperScan("com.yangyan.gulimall.member.dao")
@SpringBootApplication
public class MemberApplication {

    public static void main(String[] args) {
        SpringApplication.run(MemberApplication.class, args);
    }

}

4)访问http://localhost:8000/member/member/membercoupon得到结果

 五、Gateway网关

1.新建Gateway的Module

选择好Gateway,然后调整一下项目结构

2.引入gulimall-common

添加bootstrap.properties,将网关注册到nacos中并配置服务名和命名空间。

spring.application.name=gulimall-gateway
spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=239a47f0-64c2-40ba-ba08-319eb4ac1c96
spring.cloud.nacos.discovery.group=dev
spring.cloud.nacos.config.namespace=239a47f0-64c2-40ba-ba08-319eb4ac1c96
spring.cloud.nacos.config.group=dev

#将网关端口分配为88
server.port=88

启动项目发现错误如下

 因为common中有mybatis,而网关没有配置数据源,所以排除数据源配置

@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) #核心
public class GulimallGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallGatewayApplication.class, args);
    }

}

重新配置成功,部署。

3.网关的调试

在application.yaml中配置跳转qq和百度的

具体的配置可以看Spring Cloud GatewaySpring Cloud Greenwich 中文文档 参考手册 中文版

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

4.测试成功

BilBil视频地址:尚硅谷电商教程《谷粒商城》对标阿里P6/P7,40-60万年薪_哔哩哔哩_bilibili


版权声明:本文为qq_46396128原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。