springcloud基础

微服务搭建

一、创建父工程

1.创建Springboot项目

搭建父工程

2、选择web和lombok插件,我这里Springboot是2.6.13

在这里插入图片描述

3、父pom文件

1、删除父工程的src文件夹

2、在pom文件中加入

<packaging>pom</packaging>

在这里插入图片描述

3、引入一下pom文件,(版本已对应好)

首先,必须了解一下dependencies和dependencyManagement
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
        <spring-cloud.version>2021.0.5</spring-cloud.version>
        <spring-boot-druid.version>1.1.22</spring-boot-druid.version>
        <mysql.version>8.0.12</mysql.version>
        <mybatis-plus.version>3.5.6</mybatis-plus.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${spring-boot-druid.version}</version>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.cloud.CloudApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

4、刷新Maven

二、创建子模块

1、创建子项目

在这里插入图片描述

2、不选择依赖,直接创建

3、pom文件

1、在子模块pom文件中引入parent依赖

例如:

    <parent>
        <groupId>com.brave</groupId>
        <artifactId>blogs</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

2、删除子模块pom文件中的groupId和version

在这里插入图片描述

3、引入一下依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--数据库部分 druid mysql mybatis-plus-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!-- Spring Boot Maven Plugin -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.13</version>
            </plugin>

            <!-- 如果需要,还可以添加其他插件,例如编译Java源代码的maven-compiler-plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source> <!-- 源代码编译级别 -->
                    <target>1.8</target> <!-- 目标代码编译级别 -->
                </configuration>
            </plugin>

            <!-- 其他插件配置根据项目需求添加 -->
        </plugins>
    </build>

最后一定要刷新maven

三、nacos服务注册与发现

1、github上面下载nacos,解压

修改bin文件夹中的startup.cmd中的集群为单机模式 set MODE=“standalone”
打开startup.cmd,即开启nacos服务

2、新建子模块,并引入以下依赖

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

注意,这个依赖是继承父pom文件的spring-cloud-alibaba-dependencies这个依赖的(如下,可以在这个里面找到nacos-discovery依赖,更好的实现了版本的统一管理)

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

记得每次引入依赖之后都刷新一下

3、在启动类上面加入@EnableDiscoveryClient,使得nacos能够发现该服务(但是不知道从哪个版本开始,不加这个注解也能发现,但是还是加上)

4、添加配置文件


server:
  port: 8071
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

在这里插入图片描述
5、启动之后,可以在nacos服务列表中发现服务已被nacos发现。
我这里是2.3.2版本的,nacos起始登录密码用户名都是nacos
在这里插入图片描述

四、nacos服务配置中心

1、在nacos里新建一个配置(配置管理>配置列表,点击新建)

在这里插入图片描述
注意:yml配置文件,必须在冒号之前加一个空格,不然格式错误无法读取到属性值

2、引入以下依赖

当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。简而言之,就是SpringCloud必须使用bootstrap配置。
所以,我们需要创建bootstrap.yml文件,,但是在SpringBoot 2.4.x版本之后,使用bootstrap.yaml需要导入spring-cloud-starter-bootstra依赖支持

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.3</version>
        </dependency>

刷新Maven

3、新建bootstrap.yml配置文件

server:
  port: 18084

spring:
  application:
    name: service-provider    # 与nacos里面配置的文件名一致
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #nacos-server的服务器地址
        # 以下配置项必须填写
        username: 'nacos'
        password: 'nacos'
        file-extension: yml           #指定配置文件的后缀。目前只支持properties、yaml。

这里会读取到service-provider和service-provider.yml两个配置文件也就是{application.name}和
{application.name}.{cloud.nacos.config.file-extension}拼接起来的文件,但是优先service-provider.yml,如过service-provider.yml里面没有需要的配置,会再加载service-provider

4、新建Controller,看是否能够读取到配置信息

import org.springframework.beans.factory.annotation.Value;

@RestController
@RequestMapping("user")
public class UserController {
    
    @Value("${user.id}")
    private String id;

    @GetMapping("id")
    public String getConfigInfo() {
        return this.id;
    }
}

5、访问http://localhost:18084/user/id

在这里插入图片描述
成功调用配置属性

五、openfeign服务调用

1、导包,刷新

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

2、启动类添加注解@EnableFeignClients
@EnableFeignClients注解中的basePackages用于配置扫描接口包下来的类

3、创建Client包,在这个包里面创建接口类,类上引入注解@FeignClient
feign的客户端需要使用 @FeignClient 注解进行标识,这样在扫描时才知道这是一个feign客户端

@FeignClient 注解的一些主要参数和详解:
value/name: 用于指定目标服务的名称。可以使用 value 或者 name 来指定服务的名称,这个名称将会被注册到服务发现中心(例如 Eureka)并用于服务的发现。示例:@FeignClient(name = “example-service”)

url: 用于指定目标服务的 URL 地址。如果你知道目标服务的确切地址,可以使用 url 参数来指定。示例:@FeignClient(url = “http://example.com”)

path: 可选的,用于指定客户端请求的基本路径。如果目标服务的 API 有一个公共的基础路径,可以使用 path 参数来指定,这样在定义请求方法时就可以省略公共路径的部分。示例:@FeignClient(name = “example-service”, path = “/api”)

configuration: 可选的,用于指定 Feign 客户端的配置类。可以通过这个参数指定一个配置类,对 Feign 客户端进行自定义配置。示例:@FeignClient(name = “example-service”, configuration = MyFeignConfig.class)

fallback/fallbackFactory: 可选的,用于指定当 Feign 客户端请求失败时的回退处理逻辑。fallback 参数可以直接指定回退处理的类,而 fallbackFactory 则是一个工厂类,用于创建回退处理类的实例。示例:@FeignClient(name = “example-service”, fallback = MyFallback.class)

contextId: 可选的,用于指定 Feign 客户端的上下文 ID。在一个应用中可能存在多个 Feign 客户端,通过 contextId 可以为每个客户端指定一个唯一的上下文 ID。示例:@FeignClient(name = “example-service”, contextId = “myFeignClient”)

通过使用 @FeignClient 注解,你可以方便地声明一个 REST 客户端,并定义与目标服务通信的接口,Feign 将会根据这些定义自动生成相应的 HTTP 请求。

4、注入接口,获取服务

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud是一个基于Spring Framework的开发工具集,用于构建分布式系统的微服务架构。它提供了一系列的组件和工具,用于简化分布式系统开发、部署和管理的复杂性。以下是Spring Cloud的一些基础知识: 1. 服务注册与发现:Spring Cloud通过服务注册与发现组件,如Eureka、Consul等,实现了服务的自动注册和发现。服务提供者在启动时将自己注册到注册中心,服务消费者通过注册中心获取可用的服务实例。 2. 负载均衡:Spring Cloud通过Ribbon实现了客户端负载均衡。它可以根据负载均衡策略选择合适的服务实例进行请求转发,提高系统的可用性和性能。 3. 服务调用:Spring Cloud通过Feign或RestTemplate实现了服务之间的远程调用。开发者可以像调用本地方法一样调用远程服务,简化了服务间通信的复杂性。 4. 服务熔断与降级:Spring Cloud通过Hystrix实现了服务的熔断与降级。当某个服务发生故障或响应过慢时,可以通过熔断器快速失败并返回默认值,避免级联故障。 5. 配置中心:Spring Cloud Config提供了集中式的配置管理,可以将应用程序的配置集中存储在配置中心,并通过动态刷新机制实现配置的动态更新。 6. 链路追踪:Spring Cloud Sleuth和Zipkin可以实现分布式系统的链路追踪。通过生成唯一的跟踪ID,可以追踪请求在不同服务之间的流转路径,方便排查分布式系统的问题。 以上只是Spring Cloud的一些基础知识,它还包括了很多其他功能和组件,如服务网关、消息总线、分布式配置等。通过使用Spring Cloud,开发者可以更方便地构建和管理分布式系统的微服务架构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值