一篇小白学习搭建第一个SpringCloud项目的总结(一)

本系列博客参照 :https://blog.csdn.net/forezp/article/details/70148833

1.啥是SpringCloud,和SpringBoot有啥联系

        SpringCloud是基于SpringBoot的,他们的联系在于SpringBoot专注于开发单个个体微服务,而SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、为代理、事件总栈、全局锁、决策竞选、分布式会话等等集成服务;
        每个SpringBoot项目都可以独立使用和开发,但SpringCloud离不开SpringBoot,属于依赖关系;
 

2.Spring Cloud 五大组件

服务注册与发现——Netflix Eureka

负载均衡:

  • 客户端负载均衡——Netflix Ribbon
  • 服务端负载均衡:——Feign(其也是依赖于Ribbon,只是将调用方式RestTemplete 更改成Service 接口)

断路器——Netflix Hystrix

服务网关——Netflix Zuul

分布式配置——Spring Cloud Config

接下来我们根据这五个组件进行对项目的搭建。

3.创建父工程

新建父工程,等下我们会在此工程中创建不同的module,创建完成后对父pom文件进行修改:

<?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.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <!--    父工程为pom    -->
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>
    <!--    指定子模块     -->
    <modules>
        <module>eureka-server</module>
        <module>service-hi</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--    spring-cloud.version需要与SpringBoot的版本对应,见图1    -->
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
<!--    不被子pom文件继承的依赖放在dependencyManagement里-->
    <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>

 图1 SpringCloud与SpringBoot的版本对应关系

4.创建子module

(1)创建服务注册中心

前面我们创建了一个父工程,接下来在父工程中新建module,名为eureka-server(见父pom中定义的module),eureka-server作为服务注册中心。

右键工程->创建model-> 选择Spring initialir,接下来选择:

 创建完成后,由于前面在父pom文件中声明了该项目,所以pom文件继承了父pom文件的依赖,并且引入了spring-cloud-starter-netflix-eureka-server的依赖

<?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.example</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!--    子pom为jar    -->
    <packaging>jar</packaging>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <!--指定父pom文件-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>

然后需要在项目的启动类加上一个注解@EnableEurekaServer:

@EnableEurekaServer
@SpringBootApplication
public class ServerApplication {
//    启动一个服务注册中心
    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }

}

最后新建application.yml,并编写配置:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    #  通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.
    register-with-eureka: false
    fetch-registry: false
    service-url:
      # 通过eureka.client.defaultZone声明所有module的注册中心地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
    name: eureka-server

由此,我们已经完成了注册中心的创建,后续我们可以通过访问http://localhost:8761查看注册成功的服务。

(2)创建服务提供者

tips:服务提供者会在注册的同时,提供一些元数据,如主机和端口,URL,主页等

按上面创建项目的步骤再创建一个名为service-hi的工程,pom.xml如下:

<?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.example</groupId>
    <artifactId>service-hi</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>service-hi</name>
    <description>Demo project for Spring Boot</description>
    <packaging>jar</packaging>

    <parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>

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

</project>

接着在项目的启动类加上一个注解@EnableEurekaClient

@EnableEurekaClient
@SpringBootApplication
@RestController
public class ClientApplication {

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

    @Value("${server.port}")
    String port;

    @RequestMapping("/hi")
    public String home(@RequestParam(value = "name",defaultValue = "jiege") String name) {
        return "hi," + name + ",i am from port:" +port;
    }
}

application.yml:

server:
  port: 8762
spring:
  application:
    name: service-hi
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
#      defaultZone指定eureka-server的地址

然后启动项目,可以访问http://localhost:8761查看注册的服务。我们打开http://localhost:8762/hi

 

 我们可以尝试启动多个实例,具体步骤如下:

(1)在IDEA上点击Application右边的下三角,弹出选项后,点击Edit Configuration

 (2)打开配置后,选择工程,勾上Allow parallel run。

 

 (3)通过修改application.yml的端口,启动多个实例,多个端口分别启动,我们把端口改为8763,效果如下:

 (4)访问http://localhost:8761查看注册的服务,可以看到service-hi工程有两个实例:

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值