标签:优惠券 red default resource 路由转发 刷新 创建 over 开启
在 common 的 pom.xml 中加入如下配置(依赖管理,相当于以后再 dependencies 里引 spring cloud alibaba 相关的依赖就不用写版本号, 全用 dependencyManagement 进行管理。注意他和普通依赖的区别,他只是备注一下,并没有加入依赖):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 作为注册中心和配置中心。
下载 Nacos 压缩包并解压,然后点击 bin/startup.cmd
启动 Nacos。
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
@EnableDiscoveryClient
注解开启服务注册与发现功能。@EnableDiscoveryClient // 将该服务注册到nacos中
@SpringBootApplication
@MapperScan("com.qjy.gulimall.coupon.dao")
public class GulimallCouponApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallCouponApplication.class, args);
}
}
Feign是一个声明式的 HTTP 客户端,目的就是让远程调用更加简单,给远程服务发的是HTTP请求。
在 CouponController.java 请一个请求给 member 服务远程调用:
@RequestMapping("/member/list")
public R membercoupons(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满100-10");
return R.ok().put("coupons",Arrays.asList(couponEntity));
}
远程调用步骤:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
package com.qjy.gulimall.member.feign;
import com.qjy.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
// 告诉spring cloud这个接口是一个远程客户端,要调用coupon服务(nacos中找到)
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
// 远程服务的url
// 注意写全优惠券类上还有映射
//注意我们这个地方不是控制层,所以这个请求映射请求的不是我们服务器上的东西,而是nacos注册中心的
@RequestMapping("/coupon/coupon/member/list")
public R membercoupons();
}
@EnableFeignClients(basePackages = "com.qjy.gulimall.member.feign") // 开启远程调用功能
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.qjy.gulimall.member.dao")
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
@RestController
@RequestMapping("member/member")
public class MemberController {
@Autowired
private MemberService memberService;
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("/coupons")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("会员昵称张三");
R membercoupons = couponFeignService.membercoupons();
return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
}
}
错误:No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
由于 SpringCloud Feign 在 Hoxton.M2 RELEASED 版本之后不再使用 Ribbon 而是使用 spring-cloud-loadbalancer,所以不引入 spring-cloud-loadbalancer 会报错。因此在 common 服务的 pom 文件中引入相关依赖即可。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
可以用 Nacos 作为配置中心。所有配置文件统一管理,这样修改更方便,不需要一个一个服务去修改。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
# nacos里同名的配置文件
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
@RefreshScope // 动态获取配置并刷新数据(配置修改不需要重启服务)
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){
return R.ok().put("name",name).put("age",age);
}
}
在 nacos 中还可以配置:
命名空间:用作配置环境隔离
# 设置命名空间:命名空间ID
spring.cloud.nacos.config.namespace=27995220-b059-40c2-a861-85626e818164
配置集:一组相关或不相关配置项的集合
配置集ID:类似于配置文件名,即 Data ID
配置分组:默认所有的配置集都属于 DEFAULT_GROUP
# 更改配置分组
spring.cloud.nacos.config.group=DEFAULT_GROUP
最终方案:每个微服务创建自己的命名空间,然后使用配置分组区分环境(dev/test/prod)。
加载多配置集:把原来 application.yml 里的内容都分文件抽离出去。
nacos 新版本 data-id 只能是 yaml,否则获取不到配置信息。
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yaml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yaml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
spring.cloud.nacos.config.ext-config[2].data-id=others.yaml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
网关是请求流量的入口,常用功能包括路由转发,权限校验,限流控制等。springcloud gateway 取代了 zuul 网关。
网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷流量、监控日志等功能。
而 SpringCloud Gateway,意在提供一种简单而有效的方式来对 API 进行路由,并为他们提供切面(安全性、监控/指标和弹性等) 。
三大核心概念:
客户端发请求给服务端。中间有网关,先交给映射器,如果能处理就交给 handler 处理,然后交给一系列 filer,然后给指定的服务,再返回回来给客户端。
创建一个 gulimall-gateway 项目,并添加依赖。在gateway服务中开启注册服务发现@EnableDiscoveryClient
,配置 nacos 注册中心地址 applicaion.properties。
<dependency>
<groupId>com.qjy.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
bootstrap.properties 填写 nacos 配置中心地址。
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=833cadca-05f4-44e0-bcdc-d9561556b35d
在项目里创建 application.yml,配置网关的规则(uri、断言与过滤器)。
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
- 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: # 这段过滤器和验证码有关,api内容缓存了/renren-fast,还得注意/renren-fast也注册到nacos中
- RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
标签:优惠券 red default resource 路由转发 刷新 创建 over 开启
原文地址:https://www.cnblogs.com/fireonfire/p/14584148.html