SpringCloud学习总结

原创
2019/08/02 20:04
阅读数 74

SpringCloud概述:

面向服务的架构,是一种程序开发架构的设计思想。它将不同的功能单元使用一个作为独立的程序运行,并且提供访问的入口(将这些单独运行的每个程序称为服务)。

一个SOA架构的web应用程序,是多个服务组成的!!!

SOA架构的思想就是用于实现,程序分布式的。所以我们也可以将SOA架构的思想理解为分布式架构的思想。

 

SpringCloud作用:

Spring Cloud通过一个注册中心(Eureka),统一管理了整个分布式系统的服务接口。

所有的服务(子系统)在对外提供服务(接口)之前,必须要在注册中心中注册。我们开发人员就可以在注册中心中,查看整个分布式系统的所有服务!!

我们SOA概念中称为服务系统的东西,在Spring cloud有一个新的名字,叫实例(instance,实例系统)!

如何学习SpringCloud:

    (1)必须要将Eureka配置成功

   (2)实例是如何将服务在Eureka注册的

   (3)如何在Eureka查看整个分布式系统所有实例对外提供的服务(发现服务)

   (4)实例域实例之间是如何通讯的(远程调用)

1.入门示例

  1. 1.配置步骤

        第一步:配置Eureka服务器

        第二步:创建注册服务实例(Eureka客户端-注册服务@EnableEurekaClient)

        第三步:创建发现服务实例(Eureka客户端-发现服务@EnableDiscoveryClient)

        第四步:实现发现服务实例调用注册服务实例的示例。

    1.2.第一部分:配置Eureka服务器(注册中心)

       注意事项:

        1.Eclipse配置Spring Cloud必须先安装好 spring tool suite 插件。否则配置文件没有提示!!

        2.Spring Cloud框架的jar都是由maven或者gradle构建工具获得的。我们主流使用的是Maven。所以创建的maven项目

    1.3.第二部分:创建一个注册服务实例instanceServer

        1.3.1.创建一个maven项目

        1.3.2.生成springboot项目代码(注意事项:必须添加webmvc模块以及Eureka客户端模块

将生成的项目的pom.xml代码覆盖项目的pom.xml

<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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.gzsxt.springcloud</groupId>

  <artifactId>springcloud-demo-02-instanceServer01</artifactId>

  <version>1.0</version>

  

  <parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.19.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

 

<properties>

<java.version>1.8</java.version>

<spring-cloud.version>Edgware.SR5</spring-cloud.version>

</properties>

 

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<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-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.3.3.编写Application入口类

package cn.gzsxt.springcloud;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

 

@SpringBootApplication

@EnableEurekaClient

public class InstanceApplication {

 

public static void main(String[] args) {

SpringApplication.run(InstanceApplication.class, args);

}

}

1.3.4.编写一个Controller类

package cn.gzsxt.springcloud.controller;

 

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

public class UserController {

 

@RequestMapping("/say")

public String say(){

 

return "hello,springcloud";

 

}

}

1.3.5.编写application.properties配置类

#指定实例端口

server.port=8080

#指定实例名,springcloud是通过实例名称来寻址服务的

spring.application.name=instanceServer

#指定Eureka服务端访问路径

eureka.client.service-url.defaultZone=http://localhost:5121/eureka

1.3.6.启动实例

注意事项:因为实例是Eureka的客户端,所以启动实例之前,必须要先启动Eureka服务端!

1.4.第三部分:创建一个发现服务实例新实例(调用服务)

说明:将实例1复制一份。修改配置文件,修改为第二个实例

1.4.1.第一步:修改pom.xml配置文件的项目名

1.4.2.第二步:修改application.properties配置文件

#指定实例端口

server.port=8081

#指定实例名,springcloud是通过实例名称来寻址服务的

spring.application.name=instanceClient

#指定Eureka服务端访问路径

eureka.client.service-url.defaultZone=http://localhost:5121/eureka

1.4.3.修改发现服务入门程序注解

@SpringBootApplication

//标记该项目为一个,该实例是一个发现服务的实例

@EnableDiscoveryClient

public class Application {

 

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

1.4.4.启动实例

1.5.实现instanceClient与instanceServer远程调用

需求:

(1)在instanceServer中,我们暴露一个login的远程restful接口。

(2)instanceClient调用该接口。将数据传递给它。

 

说明:SpringCloud远程服务调用,有两种实现方式:

(1)Ribbon+RestTemplate基于restful实现

其中,Ribbon是一个基于HTTP和TCP客户端的负载均衡器

(2)Feign

      其中,Feign默认启动Ribbon负载均衡。

 

步骤说明:(1)修改注册服务代码

         (2)修改发现服务代码

         (3)启动实例,实现服务调用

         (4)负载均衡实现。

1.5.1.修改注册服务,注册login登录服务

1.5.2.修改发现服务实例instanceClient

添加ribbon依赖:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-ribbon</artifactId>

</dependency>

修改Application启动类,标记该实例是发现服务实例:

//1.用于启动Spring boot项目

@SpringBootApplication

//2.用于标识该项目是一个Eureka客户端(发现服务)

@EnableDiscoveryClient

public class Application {

 

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

 

 //2.创建RestTemplate实例对象,用来远程调用服务

@Bean

@LoadBalanced

创建UserService类

1.5.3.启动实例

说明:依次启动注册中心、服务提供实例、服务发现实例。

1.5.4.基于ribbon负载均衡实现

负载均衡概念:在多个并且相同的服务可用的情况下,通过一定的负载策略,均衡的去调用这些服务,让服务到达一个平衡的状态。

重用的负载策略:轮询、权重、一致性ip等。

 

基于ribbon负载均衡实现步骤:

(1)创建一个新的注册服务实现instanceServer2。(复制instanceServer即可)

public RestTemplate restTemplate(){

 

return new RestTemplate();

}

}

展开阅读全文
打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部