IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Cloud Alibaba整合 Nacos注册、配置中心和Gateway网关路由 -> 正文阅读

[Java知识库]Spring Cloud Alibaba整合 Nacos注册、配置中心和Gateway网关路由

环境以及版本说明

工具版本
JDK1.8.0_301
MySQL5.7.36
IDEA2021.3.3
Maven3.8.5
SpringBoot2.7.1
SpringCloud2021.0.3
MyBatis-Plus3.2.0
Docker20.10.17
Nacos1.2.1

0、启动Nacos Server

在这里插入图片描述
访问Nacos首页:http://localhost:8848/nacos/#/login
登录默认账户和密码:nacos
在这里插入图片描述

1、如何使用Nacos作为注册中心

1.1)引入nacos-config依赖

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

在这里插入图片描述

1.2) application.yml配置

application.yml 中配置 Nacos server 的地址和应用名

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.10.129:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
server:
  port: 7000

在这里插入图片描述

1.3)将服务注册进nacos server中

使用注解@EnableDiscoveryClient
在这里插入图片描述

检查Nacos Server发现注册进来了
在这里插入图片描述

1.4)OpenFeign申明式远程服务调用

目的:让会员服务远程调用优惠券服务

想要远程调用别的服务

1)引入OpenFeign依赖

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

在这里插入图片描述

在这里插入图片描述

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

/**
 * 这是一个声明式的远程调用
 */
@FeignClient(name = "gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();
}

在这里插入图片描述

声明接口的每一个方法都是调用哪个远程服务的那个请求

3)开启远程调用功能

@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallMemberApplication.class, args);
    }

}

在这里插入图片描述

在这里插入图片描述
坑:
这里启动失败了,报错是LoadBalance出错
解决办法:需要引入spring-cloud-loadbalancer依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

2、如何使用Nacos作为配置中心

2.1)引入nacos-config依赖

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

2.2)创建 bootstrap.properties 并在其中配置 Nacos server 的地址和应用名

spring.application.name=gulimall-coupon

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

在这里插入图片描述

写一个Controller方法

@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @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);
    }

在这里插入图片描述
访问http://localhost:7000/coupon/coupon/test
发现读取的是系统变量的名字,并没有读取到我们在application.propertoes中设置的

user.name=zhangsan2
user.age=20

注意:
要写上模块的前缀名coupon,才能读取到

coupon.user.name=zhangsan2
coupon.user.age=20

但是每次如果要修改配置就要去application.propertoes中设置,这是很不方便的。因为微服务还要重启,这在生产中是不能接受的,所以我们采用Nacos来做统一的配置管理中心

2.3)需要给配置中心默认添加一个叫 数据集(Data Id)gulimall-coupon.properties。默认规则,应用名.properties

在这里插入图片描述

并给 应用名.properties 添加配置
在这里插入图片描述

2.4)动态获取配置。

使用注解:@RefreshScope:动态获取并刷新配置

@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @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);
    }

在这里插入图片描述

注意:
@Value(“${配置项的名}”):获取到配置。

如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。

2.5) 细粒度管理Nacos配置中心

2.5.1)命名空间:配置隔离;

默认:public(保留空间);默认新增的所有配置都在public空间。
在这里插入图片描述

1、开发,测试,生产:利用命名空间来做环境隔离。
在这里插入图片描述
启动微服务后发现系统会默认使用public下的gulimall-coupon.properties文件

如果想要读取指定的命名空间下的gulimall-coupon.properties文件,那就需要在
注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
在这里插入图片描述

  •     spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
    

2.5.2) 每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

在这里插入图片描述

2.5.3)配置分组:

默认所有的配置集都属于:DEFAULT_GROUP;
项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod
在这里插入图片描述
在这里插入图片描述

2.5.4)同时加载多个配置集

  • 1)、微服务任何配置信息,任何配置文件都可以放在配置中心中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可

在这里插入图片描述

spring.application.name=gulimall-coupon

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=c57909ca-177f-4817-b4b6-17707f4c2237
spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
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.yml
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=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
  • 3)、@Value,@ConfigurationProperties。。。
  • 以前SpringBoot任何方法从配置文件中获取值,都能使用。
  • 配置中心有的优先使用配置中心中的,

2.6)启动服务发现示例图

在这里插入图片描述

3)Gateway网关路由

三大组件:路由(Router)、断言(Predicate)、过滤(Filter)

3.1)工作流程图

在这里插入图片描述

3.1.1)引入依赖

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

在这里插入图片描述

3.1.2)开启服务注册发现

配置nacos的注册中心地址

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88

在这里插入图片描述

3.2)在Nacos Server里注册网关

在这里插入图片描述

3.3)配置网关

在这里插入图片描述

3.4)编写application.yml配置文件进行路由转发

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

在这里插入图片描述

3.5)启动网关微服务,测试是否能转发请求到指定网页

访问:http://localhost:88/?url=qq
发现成功
在这里插入图片描述

访问:http://localhost:88/?url=baidu
发现也是成功的
在这里插入图片描述
至此:
Spring Cloud Alibaba整合 Nacos配置注册中心和Gateway网关路由成功

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:22:54  更:2022-07-21 21:22:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:49:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码