【day3】谷粒商城-Nacos,GateWay

注册中心,配置中心,网关

Spring Cloud Alibaba

Nacos

可以当做注册中心,也可以当成是配置中心。参考

https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md

启动Nacos

bash startup.sh -m standalone

随后在需要注册到Nacos的微服务的配置文件中,添加如nacos 的注册地址

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

老版本有一个注解,但是高版本的nacos注解也不需要了。

地址是:localhost:8848/nacos。账户密码都是nacos

远程调用

想要远程调用,第一步就要引入openfeign,编写一个接口,这个接口需要调用远程服务。

@FeignClient("gulimall-coupon")
public interface CouponFeignService {

    @RequestMapping("coupon/coupon/member/list")
    public R memberCoupons();
}

Spring Boot版本高了,遇到这个问题

https://www.cnblogs.com/yiMro/p/16018149.html

只有在nacos注册中心中有的微服务,才能够用Feign调用成功。Feign本质上是一个Http链接的工具。

调用的时候就比较容易了

 @Autowired
    private CouponFeignService couponFeignService;


    @RequestMapping("/coupons")
    public R test() {
        MemberEntity memberEntity = new MemberEntity();

        memberEntity.setNickname("张三");
        R r = couponFeignService.memberCoupons();
        return R.ok().put("member", memberEntity).put("coupos", r.get("coupons"));
    }

Nacos作为配置中心

操作流程

添加文件 bootstrap.properties (与github不同,但是官网上是这么写的)

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

在common的pom里,加上,否则动态刷新不起作用。

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>4.0.1</version>
        </dependency>

在微服务的controller中添加

@Value("${coupon.user.name}")
    private String name;

    @Value("${coupon.user.pass}")
    private String password;


    @RequestMapping("/member/test")
    public R test() {

        return R.ok().put("name",name).put("age", password);
    }

动态刷新需要在Controller类上添加 @RefreshScope 注解

类似于${coupon.user.pass} 这些数据,需要在Nacos的网页上进行配置。

如果本地与Nacos配置中心都配置了相同的项目,那么优先使用Nacos的内容。

更多细节
  • 命名空间

用来做配置隔离的,这个可以在网页控制台看到。默认是public,新增的所有配置,都是在public空间下。

配置隔离可以分为:开发,线上,生产环境等等。默认使用public配置,需要更改,在bootstrap.properties中更改。在控制台新增命名空间,然后创建同名配置,在bootstrap.properties更换需要对应的uuid

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.namespace=f3aa3786-54af-4dfd-9658-6b4e4144dbb8

另外,也可以根据不同的微服务,创建不同的命名空间。

  • 配置集:所有的配置的集合,例如application.yml

  • 配置ID:类似于文件名,就是nacos中的DataID

  • 配置分组:默认所有的配置集都属于DEFAUL_GROUP。比如双十一用这样的配置,618用那样的配置。创建配置的时候,有创建组的选项。本地上在bootstrap.properties切换不同的组。


在谷粒商城中,每个微服务创建不同的命名空间,使用配置分组来区分环境(dev,test,prod)

使用Nacos的目的,就是为了不在项目中再次配置。

所有微服务的配置文件,都可以放在配置中心中。我们只需要在bootstrap.properties说明加载配置中心哪些配置文件即可。

可以使用 @Value,@ConfigurationProperties 等以前SpringBoot 任何方法都能获取值,都能使用,并且nacos的优先级高。

Gateway

网关帮我们分流,将请求正确的路由到指定位置。过滤,限流等等。

Client 请求 GateWay ,然后分流。我们使用Spring Cloud 的Gateway,这里每秒请求数量大约为三万左右。

  • Route:路由匹配断言(Java8中的新增的函数接口 Predicate)。我们请求发给API,路由匹配为true后才成功。
  • Filter 过滤器

创建一个Module,使用SPring Initlizatier,pom里引入gulimall-common,但是因为common中有mybatis-plus相关的内容,因此需要排除,在主类中修改

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

配置相关:

application.yml

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

server:
  port: 8539

配置boostrap.properties(但是似乎没有起效果)

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=5fe8953a-c7a9-4431-bd3d-dfc501ad0d64
spring.application.name=gulimall-gateway

记得在主类中加入 @EnableDiscoveryClient 注解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值