谷粒商城(三):SpringCloud Alibaba
2021-06-07 15:03
标签:优惠券 red default resource 路由转发 刷新 创建 over 开启 在 common 的 pom.xml 中加入如下配置(依赖管理,相当于以后再 dependencies 里引 spring cloud alibaba 相关的依赖就不用写版本号, 全用 dependencyManagement 进行管理。注意他和普通依赖的区别,他只是备注一下,并没有加入依赖): 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 作为注册中心和配置中心。 下载 Nacos 压缩包并解压,然后点击 Feign是一个声明式的 HTTP 客户端,目的就是让远程调用更加简单,给远程服务发的是HTTP请求。 在 CouponController.java 请一个请求给 member 服务远程调用: 远程调用步骤: 错误: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 文件中引入相关依赖即可。 可以用 Nacos 作为配置中心。所有配置文件统一管理,这样修改更方便,不需要一个一个服务去修改。 在 nacos 中还可以配置: 命名空间:用作配置环境隔离 配置集:一组相关或不相关配置项的集合 配置集ID:类似于配置文件名,即 Data ID 配置分组:默认所有的配置集都属于 DEFAULT_GROUP 最终方案:每个微服务创建自己的命名空间,然后使用配置分组区分环境(dev/test/prod)。 加载多配置集:把原来 application.yml 里的内容都分文件抽离出去。 nacos 新版本 data-id 只能是 yaml,否则获取不到配置信息。 网关是请求流量的入口,常用功能包括路由转发,权限校验,限流控制等。springcloud gateway 取代了 zuul 网关。 网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷流量、监控日志等功能。 而 SpringCloud Gateway,意在提供一种简单而有效的方式来对 API 进行路由,并为他们提供切面(安全性、监控/指标和弹性等) 。 三大核心概念: 客户端发请求给服务端。中间有网关,先交给映射器,如果能处理就交给 handler 处理,然后交给一系列 filer,然后给指定的服务,再返回回来给客户端。 创建一个 gulimall-gateway 项目,并添加依赖。在gateway服务中开启注册服务发现 bootstrap.properties 填写 nacos 配置中心地址。 在项目里创建 application.yml,配置网关的规则(uri、断言与过滤器)。 谷粒商城(三):SpringCloud Alibaba 标签:优惠券 red default resource 路由转发 刷新 创建 over 开启 原文地址:https://www.cnblogs.com/fireonfire/p/14584148.html搭配方案
Nacos
bin/startup.cmd
启动 Nacos。
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
@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
@RequestMapping("/member/list")
public R membercoupons(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满100-10");
return R.ok().put("coupons",Arrays.asList(couponEntity));
}
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"));
}
}
配置管理
# 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);
}
}
# 设置命名空间:命名空间ID
spring.cloud.nacos.config.namespace=27995220-b059-40c2-a861-85626e818164
# 更改配置分组
spring.cloud.nacos.config.group=DEFAULT_GROUP
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
Gateway
@EnableDiscoveryClient
,配置 nacos 注册中心地址 applicaion.properties。spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
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
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/(?