文章目录

  • 1 Nacos
    • 1.0安装
    • 1.1注册中心
    • 1.2配置中心
  • 2 spring-cloud-openfeign
  • 3 spring-cloud-gateway

Spring Cloud官方 link + Github link

这里gulimall-common这是一个公共模块maven工程(添加共有依赖),别的几个都是springboot工程提供微服务

依赖管理:相当于以后再dependencies里引spring cloud alibaba、spring cloud就不用写版本号
spring cloud alibaba:在pom中dependencyManagement 中添加如下配置。然后在 dependencies 中添加自己所需使用的依赖即可使用。

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

spring cloud alibaba与spring boot的版本对应

Spring Cloud相关微服务时是的dependencyManagement

    <properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

1 Nacos

1.0安装

下载github的release文件工具:link

验证是否启动成功的网址:http://localhost:8848/nacos/index.html
用户名默认:nacos,密码:nacos

之前遇到这么个问题

startup.sh中将JAVA_HOME修改为jdk的路径,下面三行屏蔽

1.1注册中心

1.首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。

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

2.在应用的 /src/main/resources/application.yml 配置文件中配置 Nacos Server 应用名称和地址 PS:就统一不在application.properties里配置了,一样的。

spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-product

3.使用 @EnableDiscoveryClient 注解开启服务注册与发现功能

@MapperScan("com.atguigu.gulimall.product.dao") //扫描Dao操作的@Mapper加入IOC
@SpringBootApplication
@EnableDiscoveryClient //注册
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign") //使能远程调用Feign
public class GulimallProductApplication {public static void main(String[] args) {SpringApplication.run(GulimallProductApplication.class, args);}
}

务必保证所有服务都注册到Nacos(公共模块gulimall-common就算了),否则无法远程调用和进行网关lb(load balance)

1.2配置中心

1.首先,修改 pom.xml 文件,引入 Nacos Config Starter。

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

2.在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据

spring.application.name=gulimall-product
spring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.namespace=0033369e-90ec-4da9-9db7-6e9db55f50da #指定命名空间,默认为public
spring.cloud.nacos.config.group=prod #指定分组
spring.cloud.nacos.config.refresh-enabled=true #更改配置后自动刷新,不用重启应用#多个配置文件方式
#spring.cloud.nacos.config.extension-configs[0].data-id=oss.yml
#spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
#spring.cloud.nacos.config.extension-configs[0].refresh=true
#spring.cloud.nacos.config.extension-configs[1].data-id=xxx.yml
#spring.cloud.nacos.config.extension-configs[1].group=dev
#spring.cloud.nacos.config.extension-configs[1].refresh=true

3.完成上述两步后,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment 的 Property Sources 中

4.动态获取配置。@RefreshScope:动态获取并刷新配置,这里我们使用 @Value("${配置项的名}")注解来将对应的配置注入到字段
(如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。)

@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {@Value("${coupon.user.name}")private String name;@Value("${coupon.user.age}")private Integer age;....
}

Nacos作为配置中心时:红框中新建命名空间,篮框+新建配置文件(可指定分组)

PS:项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod

2 spring-cloud-openfeign

feign是一个声明式的HTTP客户端,他的目的就是让远程调用更加简单。给远程服务发的是HTTP请求。
想要远程调用的步骤:
1 在pom中引入openfeign(需要spring cloud的依赖管理)

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

2 编写一个接口,接口告诉springcloud这个接口需要调用远程服务

  • 2.1 在接口里声明@FeignClient(“gulimall-coupon”)他是一个远程调用客户端且要调用coupon服务
@FeignClient("gulimall-coupon")
public interface CouponFeignService { //注意这个是接口/*** 1、CouponFeignService.saveSpuBounds(spuBoundTo);*      1)、@RequestBody将这个对象转为json。*      2)、找到gulimall-coupon服务,给/coupon/spubounds/save发送请求。*          将上一步转的json放在请求体位置,发送请求;*      3)、对方服务收到请求。请求体里有json数据。*          (@RequestBody SpuBoundsEntity spuBounds);将请求体的json转为SpuBoundsEntity;* 只要json数据模型是兼容的。双方服务无需使用同一个to* @param spuBoundTo* @return*/@PostMapping("/coupon/spubounds/save")  //直接让后台指定服务处理  //让所有请求过网关则 @PostMapping("/api/coupon/spubounds/save")R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);@PostMapping("/coupon/skufullreduction/saveinfo")R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
  • 2.2 要调用coupon服务的/coupon/spubounds/save和/coupon/skufullreduction/saveinfo方法
//  /coupon/spubounds/save@PostMapping("/save")//@RequiresPermissions("coupon:spubounds:save")public R save(@RequestBody SpuBoundsEntity spuBounds){spuBoundsService.save(spuBounds);return R.ok();}// /coupon/skufullreduction/saveinfo@PostMapping("/saveinfo")public R saveInfo(@RequestBody SkuReductionTo reductionTo){skuFullReductionService.saveSkuReduction(reductionTo);return R.ok();}

3 开启远程调用功能 @EnableFeignClients,要指定远程调用功能放的基础包

@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")
@EnableDiscoveryClient
@MapperScan("com.atguigu.gulimall.product.dao")
@SpringBootApplication
public class GulimallProductApplication {public static void main(String[] args) {SpringApplication.run(GulimallProductApplication.class, args);}
}

4 本服务如何远程调用

    @Autowired CouponFeignService couponFeignService; //注入R r = couponFeignService.saveSpuBounds(spuBoundTo);if (r.getCode() != 0) {log.error("远程保存spu积分失败");}

3 spring-cloud-gateway

三大核心概念:

  • Route: The basic building block of the gateway. It is defined by an ID, a destination URI, a collection of predicates断言, and a collection of filters. A route is matched if the aggregate predicate is true.发一个请求给网关,网关要将请求路由到指定的服务。路由有id,目的地uri,断言的集合,匹配了断言就能到达指定位置,
  • Predicate断言: This is a Java 8 Function Predicate. The input type is a Spring Framework ServerWebExchange. This lets you match on anything from the HTTP request, such as headers or parameters.就是java里的断言函数,匹配请求里的任何信息,包括请求头等
  • Filter: These are instances of Spring Framework GatewayFilter that have been constructed with a specific factory. Here, you can modify requests and responses before or after sending the downstream request.过滤器请求和响应都可以被修改。

    在pom中配置依赖(需要spring cloud的依赖管理):
        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

注:只有服务注册了,才可以通过网关发现该服务,同时网关服务也需要注册进Nacos

在application.yml中进行网关的路由配置的时候,是有顺序的,小范围的predicates在前面,要不会被拦截走

spring:cloud:gateway:routes:- id: product_routeuri: lb://gulimall-product # lb(load balance)代表从注册中心获取注册名为gulimall-product服务 predicates:- Path=/api/product/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment} #即去掉/api- id: admin_routeuri: lb://renren-fastpredicates:- Path=/api/**filters:- RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}

在启动gulimall-gateway服务时,问题如下:
问题分析:由于公共依赖中有mybatis-plus配置(需要相应的datasource),而网关不需要mybatis-plus,所以启动时得手动排除下

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

方式二:
在pom中给依赖给排除下

        <dependency><groupId>com.atguigu.gulimall</groupId><artifactId>gulimall-common</artifactId><version>1.0-SNAPSHOT</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></exclusion></exclusions></dependency>

起初我用的是6666端口启动的,然而。。。看样没法飞起了
SOLVE:application.yml中换个端口

server:port: 6060

注意网关的pom中别引入start-web依赖,要不会引起下面的错误.

**************************
APPLICATION FAILED TO START
***************************Description:Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.Action:Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' in your configuration.

【Gulimall】Spring Cloud:spring-cloud-gateway、spring-cloud-openfeign,Alibaba的注册+配置中心Nacos相关推荐

  1. 6.SpringCloud -- 注册中心与配置中心 Nacos、网关 Gateway

    6.SpringCloud -- 注册中心与配置中心 Nacos.网关 Gateway 一.了解一下 SpringCloud Alibaba 1.1 SpringCloudAlibaba (1)简单说 ...

  2. spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config

    我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config. 它用来 ...

  3. 五Spring Cloud Alibaba基于Nacos构建分布式配置中心

      1.什么是Nacos 以下部分解释摘自于Nacos官方文档: Nacos 致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据 ...

  4. Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config

    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配 ...

  5. Spring Cloud构建微服务架构(四)分布式配置中心

    Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...

  6. spring boot配置ip_Spring Cloud 配置中心高可用搭建

    本文通过config server连接git仓库来实现配置中心,除了git还可以使用svn或者系统本地目录都行. 引入依赖 <dependencies><dependency> ...

  7. Spring Cloud Config 配置中心实践过程中,你需要了解这些细节!

    本文导读: Spring Cloud Config 基本概念 Spring Cloud Config 客户端加载流程 Spring Cloud Config 基于消息总线配置 Spring Cloud ...

  8. Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)

    技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...

  9. Spring Cloud 系列之 Nacos 配置中心

    目录 一.Nacos简介 二.Nacos安装及配置 1.环境准备 2.安装包下载 (1)源码方式 (2)发行包方式 3.启动Nacos服务 4.Nacos数据库配置 (1)MySQL数据源 (2)初始 ...

最新文章

  1. FPGA设计心得(1)真双口RAM使用及其仿真问题记录
  2. 粒子群PSO优化算法学习笔记 及其python实现(附讲解如何使用python语言sko.PSO工具包)
  3. pythonset是什么类型的游戏_Python集合(set)类型的操作
  4. python名称与作用域_Python变量命名与作用域的坑
  5. C语言栈实现逆波兰算法
  6. Linux下 -bash: php: command not found 命令找不到
  7. Spring Boot 返回 XML 数据,一分钟搞定!
  8. dsp2812 linux开发板,dsp2812开发板自制编程流程
  9. SpringBoot整合JWT(二)
  10. Arcgis重采样时分辨率的设置
  11. hdu 4565(推公式、矩阵快速幂)
  12. 数据中心的铜缆布线活力无限不过时
  13. 计算机图形学 opengl版本 第三版------胡事民 第三章更多的绘图工具
  14. 科罗拉多州立大学计算机科学,科罗拉多州立大学的世界排名
  15. SpringMVC导入Excel文件到MySQL
  16. 几个主流的Java连接池
  17. Internet Download Manager2022中文版免费下载
  18. 详解printf(各种打印的格式)
  19. 《博弈论》欧几里德的游戏
  20. Ubuntu菜鸟入门(十五)—— 安装aras2下载软件

热门文章

  1. cdx 快速切换路径
  2. 操作系统面试题(转载)
  3. Swift - iOS应用的国际化与本地化
  4. 杨百万:中国股市是政策市 炒股要听党和政府的话
  5. mysql established_使用mysql
  6. 【linux】循序渐进学运维-基础篇-mount
  7. 中创向心力:电子商务专业岗位分析之新媒体运营
  8. 苹果手机来电归属地_工信部:手机号归属地不会取消、否则增大诈骗风险
  9. Udacity机器人软件工程师课程笔记(十八)-机械臂仿真控制实例(其三)-KR210机械臂反向运动学
  10. 根轨迹法不完全笔记(自动控制原理)