黑马guli商城项目初始化-SpringCloud微服务项目初始化使用SpringCloudAlibaba快速搭建分布式系统

news2025/2/27 4:37:57

视频教程:https://www.bilibili.com/video/BV1np4y1C7Yf?p=4&spm_id_from=pageDriver&vd_source=0b3904471b2f8a3a133e05bd42f729a9

这里写目录标题

  • 1.服务架构图
  • 2.初始化目录结构
  • 3.初始化数据库
  • 4.使用逆向工程项目生成数据库CRUD
  • 5.创建工具项目
  • 6.配置mybatis-plus配置文件
    • 6.0前往 product工程resources下配置好数据源
    • 6.1告诉mybatisplus映射文件的位置
  • 7.配置SpringCloud Alibaba分布式组件快速搭建分布式系统
    • 7.1 Nacos 注册中心组件
    • 7.2 使用OpenFeign远程调用
    • 7.3 Nacos的配置中心
    • 7.4 Nacos的命名空间和配置分组
      • 7.4.1 新建命名空间
      • 7.4.2 创建配置集,配置文件分组
      • 7.4.3 同时加载多个配置集
      • 7.4.4 总结
  • 8 配置SpringCloud Gatway Api 网关
    • 8.1初始化网关

1.服务架构图

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

2.初始化目录结构

创建好项目选择需要的依赖,
在这里插入图片描述

在这里插入图片描述
创建完成后的结构
在这里插入图片描述
设置一个总项目,怕其他几个模块聚合起来。在添加到maven中

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall</name>
    <description>聚合服务</description>
    <packaging>pom</packaging>
    <modules>
        <module>gulimall-coupon</module>
        <module>gulimall-member</module>
        <module>gulimall-order</module>
        <module>gulimall-product</module>
        <module>gulimall-ware</module>
    </modules>
</project>

在这里插入图片描述
设置一下提交的git模板,避免提交垃圾文件

target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

**/mvnw
**/mvnw.cmd

**/.mvn
**/target/

.idea

**/.gitignore

然后直接提交到仓库

3.初始化数据库

如题

4.使用逆向工程项目生成数据库CRUD

在这里插入图片描述

下载生成的mybatis文件内容,导入gulimall-product项目中

在这里插入图片描述

如果在逆向生成的时候有你不需要的注解,可以修改生成的,模板即可
在这里插入图片描述
修改那个模板就改那个template然后重新运行导入

5.创建工具项目

但是由于缺乏具体的工具类,所以还得新建一个组件共用的一个maven项目。
在这里插入图片描述
导入需要相关的工具依赖,例如mybatisplus

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.atguigu.gulimall</groupId>
        <artifactId>gulimall</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>gulimall-common</artifactId>
    <description>微服务的公共组件</description>
    <name>Archetype - gulimall-common</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>
</project>

然后前往product工程里面把这个项目共用的工具依赖加进去即可,在工具类里面补全缺少的工具依赖
在这里插入图片描述

        <dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

6.配置mybatis-plus配置文件

在common依赖中加载mysql以及servlet

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.atguigu.gulimall</groupId>
        <artifactId>gulimall</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>gulimall-common</artifactId>
    <description>微服务的公共组件</description>
    <name>Archetype - gulimall-common</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

6.0前往 product工程resources下配置好数据源

在这里插入图片描述

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.81.128:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver

然后前往启动类添加注解
在这里插入图片描述

6.1告诉mybatisplus映射文件的位置

在application.yml添加

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.81.128:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml
  # 自增主键
  global-config:
    db-config:
      id-type: auto

7.配置SpringCloud Alibaba分布式组件快速搭建分布式系统

在这里插入图片描述

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用
微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布
式应用服务。依托 Spring CloudAlibaba, 您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用
接入阿里微服务解决方案,,通过阿里中间件来迅速搭建分布式应用系统。

为什么要用spring cloud alibaba

SpringCloud 的几大痛点
SpringCloud 部分组件停止维护和更新,给开发带来不便
SpinrgCloud部分环境搭建复杂,没有善的可视化界面,我们需要大量的二次开发和定制 SpringCloud配置复杂,难以上手,部分配置差别难以区分和合理应用

SpringCloud Alibaba 的优势

阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用 成套的产品搭配完善的可视化界面给开发运维带来极大的便利

搭建简单,学习曲线低。

结合 SpringCloud Alibaba 我们最终的技术搭配方案:

SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)

SpringCloud Alibaba - Nacos:配置中心(动态配置管理)

SpringCloud - Ribbon:负载均衡

SpringCloud - Feign:声明式 HTTP 客户端(调用远程服务)

SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)

SpringCloud - Gateway:API 网 关 (webflux 编 程 模 式 )

SpringCloud - Sleuth:调用链监控

SpringCloud Alibaba - Seata:原 Fescar,即分布式事务解决方案

官方配置教程:
https://github.com/alibaba/spring-cloud-alibaba

7.1 Nacos 注册中心组件

官方配置教程:
https://github.com/alibaba/spring-cloud-alibaba/blob/2023.x/spring-cloud-alibaba-examples/nacos-example/readme-zh.md

导入注册发现依赖到common项目中加载依赖后其他服务也相当于拥有了服务注册发现功能

        <!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

下载nacos服务中心运行,因为是本机启动,需要修改startup,MODE修改为standalone修改成单机启动模式,不然用原来的集群启动会报错的。
在这里插入图片描述
在配置文件中指定注册中心的地址。改成nacos的8848端口。

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_sms
    driver-class-name: com.mysql.jdbc.Driver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        //注册中心的服务名
  application:
    name: gulimall-coupon

使用@EnableDiscoveryClient到启动类中添加注解。开启服务的注册发现功能

@EnableDiscoveryClient
@SpringBootApplication
public class GulimallCouponApplication {

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

}

运行项目后就注册上来了。
在这里插入图片描述

7.2 使用OpenFeign远程调用

添加依赖

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

模拟一个远程服务,在Coupon项目中添加一个测试方法,用另一个项目通过feign来远程调用他。

   @RequestMapping("/member/list")
    public R membercoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }

在需要另一个需要使用feign的启动类添加注解,@EnableFeignClients(basePackages = “com.atguigu.gulimall.member.feign”)

package com.atguigu.gulimall.member;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 1、想要远程调用别的服务
 * 1)、引入open-feign
 * 2)、编写一个接口,告诉SpringCloud这个接口需要调用远程服务
 *   1、声明接口的每一个方法都是调用哪个远程服务的那个请求
 * 3)、开启远程调用功能
 */
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {

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

}

并且在创建一个feign文件夹里面创建接口
这个接口就是用来声明远程调用的,用来调用那个项目里面的接口。

package com.atguigu.gulimall.member.feign;

import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 这是一个声明式的远程调用
 */
@FeignClient("gulimall-coupon")
public interface CouponFeignService {

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

}

现在模拟Member使用Feign来远程调用接口。

    @Autowired
    //feign类        
    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中的话是无法调用成功的。需要服务上线才能调用。

7.3 Nacos的配置中心

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

配置完成后在项目的 /src/main/resources/bootstrap.properties 中添加nacos的元数据;这个配置会优先于application加载。

Nacos 配置中心的主要特点如下:

集中管理:Nacos 配置中心提供了一个统一的配置管理界面,可以集中管理应用的配置信息,包括数据源、缓存、消息队列等各种配置。
动态刷新:Nacos 配置中心支持配置的动态刷新,当配置发生变化时,可以实时推送到客户端,无需重启应用。 版本控制:Nacos
配置中心支持配置的版本控制,可以方便地回滚到旧版本的配置。 高可用性:Nacos 配置中心具有高可用性,可以通过集群部署来保证服务的稳定性。
易于集成:Nacos 配置中心提供了丰富的客户端 SDK,可以方便地与各种编程语言和框架集成。

最主要的是他动态刷新功能,以往我们修改项目配置文件里面内容时候都得重新部署一遍才能看到效果,通过nacos配置文件动态刷新配置文件就可以解决这个问题,实现远程动态更新。

在nacos中创建远程配置
在这里插入图片描述在这里插入图片描述
配置完成后项目的application将会被远程配置文件的配置所覆盖。先会读取nacos里面的配置。
在这里插入图片描述
之后每次只需要修改nacos里面的配置文件就行。
需要在用到动态更新的类中添加
@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);
    }
   }
 }

7.4 Nacos的命名空间和配置分组

 1)、命名空间:配置隔离;
 *      默认:public(保留空间);默认新增的所有配置都在public空间。
 *      1、开发,测试,生产:利用命名空间来做环境隔离。
 *         注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
 *         spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
 *      2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

7.4.1 新建命名空间

在这里插入图片描述
切换空间创建配置。每个空间的配置都是单独的。
在这里插入图片描述
让项目访问指定命名空间的配置文件。
在bootstrap配置文件下添加,添加后会访问指定空间的配置文件。如果不添加只会访问默认public命名空间的文件。

# Nacos 配置中心命名空间 id改成命名空间的id
spring.cloud.nacos.config.namespace=1986f4f3-69e0-43bb-859c-abe427b19f3a

也可以通过克隆来复制配置文件
在这里插入图片描述

7.4.2 创建配置集,配置文件分组

2)、配置集:所有的配置的集合
 *
 *  3)、配置集ID:类似文件名。
 *      Data ID:类似文件名
 *
 *  4)、配置分组:
 *      默认所有的配置集都属于:DEFAULT_GROUP;
 *      1111,618,1212

配置文件进行分组,例如双十一组双十二组的配置文件。
在这里插入图片描述
在这里插入图片描述
配置文件中添加

# Nacos 配置中心分组
spring.cloud.nacos.config.group=prod

来控制nacos远程访问的分组,比如准备双十二了就通过双十二的分组来加载双十二的配置文件。通过分组后可以隔离开不同场景下的配置文件
在这里插入图片描述

也可以在开发环境下通过分组来区分不同测试环境的配置文件。

7.4.3 同时加载多个配置集

 3、同时加载多个配置集
 * 1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
 * 2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
 * 3)、@Value,@ConfigurationProperties。。。
 * 以前SpringBoot任何方法从配置文件中获取值,都能使用。
 * 配置中心有的优先使用配置中心中的,

把多个配置文件的数据元给拆分后放到nacos的配置集中来管理。
存放数据库的数据元

在这里插入图片描述
存放mybatis的
在这里插入图片描述
其他配置
在这里插入图片描述
把整个项目的配置都拆分成了这几个文件
在这里插入图片描述
在通过配置项目中的nacos配置文件来同时加载多个数据源

# 数据源配置
# 数据源的名字
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
#分组
spring.cloud.nacos.config.ext-config[0].group=dev
#是否支持动态刷新 不支持那么就不会随着nacos的更新而更新
spring.cloud.nacos.config.ext-config[0].refresh=true

# MyBatis 配置
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

启动后可以看到他读取了那些配置文件
在这里插入图片描述

7.4.4 总结

/**
 * 1、如何使用Nacos作为配置中心统一管理配置
 *
 * 1)、引入依赖,
 *         <dependency>
 *             <groupId>com.alibaba.cloud</groupId>
 *             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 *         </dependency>
 * 2)、创建一个bootstrap.properties。
 *      spring.application.name=gulimall-coupon
 *      spring.cloud.nacos.config.server-addr=127.0.0.1:8848
 * 3)、需要给配置中心默认添加一个叫 数据集(Data Id)gulimall-coupon.properties。默认规则,应用名.properties
 * 4)、给 应用名.properties 添加任何配置
 * 5)、动态获取配置。
 *      @RefreshScope:动态获取并刷新配置
 *      @Value("${配置项的名}"):获取到配置。
 *      如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。
 *
 * 2、细节
 *  1)、命名空间:配置隔离;
 *      默认:public(保留空间);默认新增的所有配置都在public空间。
 *      1、开发,测试,生产:利用命名空间来做环境隔离。
 *         注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
 *         spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
 *      2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
 *
 *  2)、配置集:所有的配置的集合
 *
 *  3)、配置集ID:类似文件名。
 *      Data ID:类似文件名
 *
 *  4)、配置分组:
 *      默认所有的配置集都属于:DEFAULT_GROUP;
 *      1111,618,1212
 *
 * 项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod
 *
 * 3、同时加载多个配置集
 * 1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
 * 2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
 * 3)、@Value,@ConfigurationProperties。。。
 * 以前SpringBoot任何方法从配置文件中获取值,都能使用。
 * 配置中心有的优先使用配置中心中的,
 *
 *
 */

完整配置文件

# 应用名称
spring.application.name=gulimall-coupon

# Nacos 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# Nacos 配置中心命名空间
spring.cloud.nacos.config.namespace=93362074-a698-42d9-9b75-c0a3aefea991
# Nacos 配置中心分组
# 优先覆盖application.properties里面的内容
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

# MyBatis 配置
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=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

8 配置SpringCloud Gatway Api 网关

API网关在微服务架构中扮演着至关重要的角色,其主要功能如下:

  1. 请求路由:API网关负责将客户端的请求分发到相应的微服务,从而实现关注点的分离,并减轻客户端与底层微服务之间的耦合。
  2. 协议转换:API网关能够在不兼容的协议(如HTTP与gRPC或dubbo)之间进行转换,使得微服务可以通过各种协议进行发布。
  3. 负载均衡:通过在多个微服务实例之间分配请求流量,API网关有助于提高系统的性能和弹性。
  4. 缓存:API网关可以缓存频繁请求的数据,从而降低微服务的负载并缩短响应时间。
  5. 安全:API网关提供身份验证、授权和加密等安全功能,保护微服务免受未经授权的访问。
  6. 监控:API网关负责收集和聚合来自微服务的指标和日志,为系统管理员提供对整个系统运行状况和性能的实时洞察。

通过这些功能,API网关为开发人员提供了一种集中且便捷的方式来发布、保护和管理微服务,使得大型复杂系统的演进和维护变得更加轻松。

8.1初始化网关

创建一个新的模块项目选中Gateway来进行创建。
在这里插入图片描述
完整pom,如果遇到读取nacos地址为空的情况直接降低gatway版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall-gateway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall-gateway</name>
    <description>API网关</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.atguigu.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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

添加依赖,如果不加载这个依赖那么就无法使用nacos的注册发现服务。

        <dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
package com.gulimall.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 开启服务注册发现
 */
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallGatewayApplication {

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

}

创建好application.properties配置文件

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


创建好bootstrap.properties配置文件

spring.application.name=gulimall-coupon
# 配置中心的地址 nacos的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=8516a6ce-7d54-4c7f-b704-3ef258ebaadd

在这里插入图片描述
在nacos中创建好其配置文件
在这里插入图片描述
根据配置定义一个路由,创建一个application.yml

spring:
  cloud:
    gateway:
      routes:
        - id: bd_route # 路由 ID,用于唯一标识该路由规则
          uri: https://www.baidu.com # 目标服务的 URI
          predicates: # 路由条件,用于匹配请求 Query是设置断言规则
            - Query=url,baidu

        - id: qq_route # 路由 ID,用于唯一标识该路由规则
          uri: https://www.qq.com # 目标服务的 URI
          predicates: # 路由条件,用于匹配请求 Query是设置断言规则
            - Query=url,qq

在这里插入图片描述

http://localhost:88/hello?url=baidu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7使用Docker安装Redis图文教程

1.拉取Redis镜像 这里制定了版本&#xff0c;不指定默认latest最新版 docker pull redis:6.0.8提示信息如下即为下载成功 2.上传配置文件 官方配置文件&#xff08;找自己对应的版本&#xff09;&#xff1a;reids.conf 或者将如下配置文件命名为redis.conf&#xff0c;上…

面试题草稿

目录 一&#xff0e;JAVA基础 1.八个基本数据类型&#xff0c;长&#xff0c;占几个字节&#xff0c;取值范围是多少。 基本类型&#xff1a; 2.面向对象的特征 1. 封装&#xff08;Encapsulation&#xff09; 3.实现多态的几种方式 4.什么叫装箱什么叫拆箱 5.装拆箱分别…

Nginx启动关闭重启用脚本实现

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nginx(“engine x”…

快手截流多功能协议引流多线程多账号使用

在市场上&#xff0c;类似的软件售价都在几千元&#xff0c;但我发现这款全新版本的软件已经更新&#xff0c;而且我只需要配合使用谷歌浏览器&#xff0c;稍微调慢一点延时&#xff0c;我就可以像专业人士一样流畅地进行操作。 评论对于我而言是一种艺术&#xff0c;而不仅仅是…

植物大战僵尸杂交版(含下载方式)

最近时间&#xff0c;一款很火的植物大战僵尸杂交版火爆出圈&#xff0c;在玩家之间疯狂扩散。各种奇特的杂交组合让游戏变得更加有趣。 游戏介绍 植物大战僵尸杂交版是一款将《植物大战僵尸》和植物杂交概念结合在一起的独特塔防策略游戏。它将《植物大战僵尸》中的植物与进行…

【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置

本节博客主要是通过“在排序数组中查找元素的第一个和最后一个位置”总结关于二分算法的左右界代码模板&#xff0c;有需要借鉴即可。 目录 1.题目2.二分边界算法2.1查找区间左端点2.1.1循环条件2.1.2求中点的操作2.1.3总结 2.2查找区间右端点2.1.1循环条件2.1.2求中点的操作2.…

FebHost:为什么企业需要注册保加利亚.BG域名?

在当今全球化的商业环境中&#xff0c;对于与保加利亚市场息息相关的企业而言&#xff0c;选择合适的域名至关重要。.BG域名作为企业在线身份的重要组成部分&#xff0c;提供了多重利好&#xff0c;成为业内不容忽视的战略资源。 首先&#xff0c;地域标识性强是.BG域名的一大…

ArrayList和LinkedList的使用

ArrayList List<> list new ArrayList<>(); LinkedList

深入理解 House of Cat

Index 序言利用 FSOP 调用 House of Cat利用条件伪造IO流条件完整调用链分析 模板System (one_gadget) 模板ORW模板 Demo & Exp利用 __malloc_assert 调用 House of Cat例题&#xff1a;题目思路Exp 序言 原文章&#xff1a;深入理解 House of Cat 随着 GNU 持续不断的更…

【Linux-IMX6ULL-DDR3简介测试-RGBLCD控制原理】

目录 1. DDR3 简介1.1 前要基本概念RAM & ROM 2. DDR3测试及初始化3. RGBLCD简介及控制原理3.1 RGBLCD简介3.2 RGBLCD-时序-像素时钟-显存3.2.1 RGB LCD时序3.2.2 像素时钟&#xff08;800*400分辨率&#xff09;3.2.2 显存&#xff08;800*400分辨率&#xff09; 3.3 RGBL…

Spring注解解析:条件注解@Condition注解和@ConditonOnXXX注解

文章目录 一、条件注解二、Conditional1、使用方法2、示例 一、条件注解 条件注解的作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的&#xff0c;可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所…

.NET 分享一款Web打包和解压缩工具

01本文概要 在.NET部署环境中&#xff0c;利用IIS中间件开启对ASP的支持&#xff0c;可以实现许多强大的文件操作功能。特别是在一些需要进行预编译的情况下&#xff0c;通过上传ASP脚本&#xff0c;可以获得WebShell&#xff0c;从而方便地进行各种操作。本文将介绍一个名为S…

运动耳机怎么选?五款新手必买的运动耳机盘点

运动耳机是专为运动爱好者设计的耳机&#xff0c;轻巧便携&#xff0c;佩戴稳固。无论你在跑步、健身还是骑行&#xff0c;它都能为你带来优质的音乐体验。那如何选择一款合适的运动耳机呢&#xff1f;这里&#xff0c;我结合自己和身边朋友平时选购经验&#xff0c;整理了一些…

sklearn机器学习编程练习大全(二)

sklearn机器学习编程练习大全&#xff08;二&#xff09; 第11题 从字符串提取标签第12题 IRIS数据集探索第13题 构建模型&#xff0c;计算准确率第14题 预估目标列编码第15题 one-hot编码 第11题 从字符串提取标签 DataFrame如下&#xff1a; 如何将以上的DataFrame变成如下的…

python批量生成25位数字字母混合序列号(SN码)

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 SN码,即Serial Number的缩写,有时也被称为Serial No,是产品序列号的意思。它是一个独特的标识符,用于区分同一种类

第二证券资讯|昨夜,黄金大涨、美股创新高!人民币狂拉

受降息预期影响&#xff0c;美股三大指数团体创新高&#xff0c;黄金期现价格亦大幅走高。 当地时间5月15日星期三&#xff0c;美股三大股指全线收涨。道指涨0.88%&#xff0c;纳指涨1.40%&#xff0c;标普500指数涨1.17%。 经济数据方面。美国4月CPI同比上涨3.4%&#xff0c…

每日一练 2025.5.16

题目&#xff1b; 给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。注意: 给定数字的范围是 [0, 108] 解题&#…

首战告捷!KCM Trade漂移队出征2024日本漂移锦标赛(FDJ2)

卓越之姿&#xff0c;非凡之势&#xff01;KCM Trade漂移队以实力点燃激情 当激情与速度交织&#xff0c;当硝烟四起的战场转移到赛车领域&#xff0c;我们见证了一场精彩绝伦、实力与策略并存的较量——KCM Trade漂移队在2024日本漂移锦标赛&#xff08;FDJ2&#xff09;上展现…

AIGC文生视频:Sora模型报告总结

作为世界模拟器的视频生成模型 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和图像潜在代码的时空补丁进行操作的变压器架构。我们最大的模型 Sora 能够生成一分钟…

惠海 H4112 同步整流30V降压芯片IC 24V转12V5V3.3V3.5A方案EN使能控制

惠海H4112同步整流30V降压芯片IC是一款DCDC电源管理芯片&#xff0c;它具备精确恒压和恒流的同步降压能力&#xff0c;适用于多种应用场景&#xff0c;如汽车充电器、照明灯、便携式设备供电电源和电池充电器等。 输出电压与电流调整&#xff1a; H4112支持输出电压在2.5V到2…