SpringCloud之入门

一、微服务概述

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力

**

二、SpringCloud概述

**
Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的
在这里插入图片描述

服务发现——Netflix Eureka

客服端负载均衡——Netflix Ribbon/Feign

服务网关——Netflix Zuul

断路器——Netflix Hystrix

分布式配置——Spring Cloud Config

三、SpringCloud入门环境搭建

搭建环境:以maven多模块化的方法搭建

注册中心:由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:Netflix Eureka、Consul、Zookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。

服务提供者

服务消费者

1.创建一个基于springboot的maven项目
1.1.导包:

<?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.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ma</groupId>
    <artifactId>springcloud01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloud01</name>
    <description>主模块-springcloud01</description>

    <!--配置子模块-->
    <modules>
        <module>eureka-server</module>
        <module>eureka-provider</module>
        <module>eureka-consumer01</module>
        <module>eureka-consumer02</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>Greenwich.SR3</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>

1.2.eureka注册中心
由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:NetflixEureka、Consul、Zookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。

Eureka是netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现和注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务,而不需要修改服务调用的配置文件了,功能类似于dubbo的注册中心,比如zookeeper。

Eureka采用了C-S的设计架构。Eureka Server作为服务注册功能的服务器,它是服务注册时中心。

而系统中的其他微服务,使用eureka的客户端连接到eureka server并维持心跳连接。这样系统的维护人员就可以通过eureka server来监控系统中各个微服务是否正常运行。SpringCloud的一些其他模块就可以通过eureka server来发现系统中的其他微服务,并执行相关的逻辑。

三大角色:

Eureka server提供服务注册和发现

  Eureka Server提供服务注册服务。各个服务提供者节点启动后,会在Eureka Server中进行注册,这样Eureka server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

Service Provider服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到。

Service Consumer服务消费方从Eureka获取注册服务列表,从而能够消费服务。

  Eureka client是一个java客户端,用于简化eureka server的交互,在应用启动后,将会向Eureka Server发送心跳。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表把这个服务节点移除。

基于上方pom.xml文件依次创建四个子模块(创建springboot项目)
以下分别为四个子模块中的pom.xml文件详情
1、eureka-server中的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>
	<parent>
		<groupId>com.ma</groupId>
		<artifactId>springcloud01</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		 <!-- lookup parent from repository -->
	</parent>

	<artifactId>eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-server</name>
	<description>子模块-注册中心</description>
</project>

**2、eureka-provider中的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>
	<parent>
		<groupId>com.ma</groupId>
		<artifactId>springcloud01</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<!-- lookup parent from repository -->
	</parent>

	<artifactId>eureka-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-provider</name>
	<description>子模块-生产者</description>



</project>

3、eureka-consumer01中的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>
	<parent>
		<groupId>com.ma</groupId>
		<artifactId>springcloud01</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<!-- lookup parent from repository -->
	</parent>

	<artifactId>eureka-consumer01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-consumer01</name>
	<description>子模块-消费者01</description>



</project>

4、eureka-consumer02中的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>
	<parent>
		<groupId>com.ma</groupId>
		<artifactId>springcloud01</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<!-- lookup parent from repository -->
	</parent>

	<artifactId>eureka-consumer02</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-consumer02</name>
	<description>子模块-消费者02</description>




</project>

5、application.yml

# 端口号
server:
  port: 7101
# 服务注册相关配置
eureka:
  # 服务实例主机名
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

最后EurekaServerApplication.java

package com.ma.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

	public static void main(String[] args) {

		SpringApplication.run(EurekaServerApplication.class, args);
	}

}

启动并测试:
访问localhost:7001

在这里插入图片描述


版权声明:本文为qq_45492234原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。