谷粒商城-02-集成springcloud-alibaba各大组件

1 登录进入到后台管理界面

2 集成springcloudalibaba的注册中心

(1)docker下安装nacos

docker pull nacos/nacos-server:1.2.0

 查看docker镜像

docker images

生成nacos启动容器

docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server:1.2.0

 把腾讯云8848端口打开

 访问 ip:8848/nacos

(2)项目集成Nacos

springboot-springcloud-springcloud alibaba 版本对应关系如下(避免包冲突)

 我们springboot使用2.6.3,springcloud使用springcloud 2021.0.1

springcloud alibaba使用2021.0.1.0

在gulimall-common工程的pom.xml中引入nacos依赖

<!--nacos-discovery-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在每个工程的application.yml中,指定nacos配置,指定端口号,指定服务名

spring.cloud.nacos.discovery.server-addr=124.223.118.207:8848
spring.application.name=gulimall-XXX

在每个工程的启动类上,添加@EnableDiscoveryClient注解

启动各个服务,打开nacos看一下配置

3 集成springcloud-alibaba-openfeign 远程调用

服务之间互相调用(openfeign )

例如:member服务调用coupon服务

1. 在CouponController中,提供一个接口“查询会员下拥有的优惠劵”

2  在member服务中

1) pom.xml中加入openfeign(每一个服务都添加一下feign组件)

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

2)新建com.gulimall.member.feign.CouponFeignService 

package com.gulimall.member.feign;

import com.gulimall.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 优惠券远程调用
 *
 * @author gaorimao
 * @date 2022/03/15
 */
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/coupons")
    public R list();
}

 3) 启动类开启feign功能

@EnableFeignClients(basePackages = "com.gulimall.member.feign")

4)在MemberController写一个接口测试下

 postman测试下

远程调用演示结束。 

4 集成springcloud-alibaba-config 配置中心

在common工程中引入config依赖

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

新建bootstrap.properties(优先级最高)配置“配置中心”

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

在nacos的配置中心新建配置gulimall-coupon.properties

 

在CouponController中获取name和age,进行测试

1)CouponController上加上@RefreshScope注解(刷新配置)

2)新建一个接口

 重启gulimall-coupon服务,进行测试

 不需要重启gulimall-coupon服务,只需要修改一下配置中心的name和age,重新调用接口

调用接口,结果如下,配置中心测试已OK

接下来,给每个工程都集成config配置中心,让配置文件集中管理

思路:每个工程都有自己的命名空间(namespace),每个环境都是不同分组(group)

gulimall-coupon

 bootstrap.properties

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=124.223.118.207:8848
spring.cloud.nacos.config.namespace=fb0557b0-b2d0-4abf-ba70-a7094962941b
spring.cloud.nacos.config.group=dev

类似的,配置下其他服务(略) 

 5 集成springcloud-alibaba-gateway 网关

把以前生成的vue代码,拷贝在src/views下

启动后台商品服务(ProductApp)随便访问一个菜单:“分类维护”

前端访问的地址如下:

http://localhost:8080/renren-fast/product/category/list?t=1646987297710&page=1&limit=10&key= 

 后台的真实地址实际如下:

http://localhost:9001/product/category/list?t=1646987127895&page=1&limit=10&key=

 我们采用的是springcloud gateway进行路由转发,它为springcloud官方推出的第二代网关框架,取代了zuul网关。

新建一个子工程gulimall-gateway,加入nacos注册中心,加入config配置中心

引入gateway依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
    <!--springcloudgateway的内部是通过netty+webflux实现的,webflux实现和springmvc配置依赖冲突-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </exclusion>
    </exclusions>
</dependency>

添加gateway跨域配置

package com.gulimall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

/**
 * gulimall跨域配置
 *
 * @author gaorimao
 * @date 2022/03/15
 */
public class GulimallCorsConfiguration {
    @Bean
    public CorsWebFilter corsWebFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        CorsConfiguration corsConfiguration = new CorsConfiguration();

        //1、配置跨域
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);

        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}

添加gateway配置

spring:

gateway:
      routes:

        - id: product_route
          uri: lb://gulimall-product
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: third_party_route
          uri: lb://gulimall-third-party
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}

        - id: member_route
          uri: lb://gulimall-member
          predicates:
            - Path=/api/member/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: ware_route
          uri: lb://gulimall-ware
          predicates:
            - Path=/api/ware/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}

 http://localhost:8080/renren-fast/product/category/list?t=1646987297710&page=1&limit=10&key= 

转发到

http://localhost:9001/product/category/list?t=1646987127895&page=1&limit=10&key=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值