springcloud学习

springcloud


一、微服务架构

微服务架构说一种架构模式,他提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终的价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTFUL API)。每个服务都是围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

springboot就可以将一个个的功能模块当成一个微服务,用springcloud进行管理连接这些微服务,构建成一个整的项目。

二、springCloud的维度

  • 服务注册与发现:EUREKA
  • 服务调用:NETFLIX OSS RIBBON或NETFLIX FEIGN
  • 服务熔断:HYSTRIX
  • 负载均衡:
  • 服务降级:HYSTRIX
  • 服务消息队列
  • 配置中心管理
  • 服务网关:NETFLIX Zuul
  • 服务监控
  • 全链路追踪
  • 自动化构建部署
  • 服务定时任务调度操作

服务分布式配置:spring cloud Config
服务开发:spring boot

三、springcloud和springboot的关系

  • springboot专注于快速方便的开发单个个体微服务。
  • springCloud是关注全局的微服务线条整理治理框架,他将springboot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等等集成服务。
  • springboot可以离开springcloud独立使用,开发项目,但是springcloud离不开springboot,属于依赖关系。
  • springboot专注于快速、方便的开发单个个体微服务。springCloud关注全局的服务治理框架。

二、使用步骤

1.创建maven工程——搭建环境

springcloud学习_第1张图片
修改字符编码:
springcloud学习_第2张图片
注解生效激活:
springcloud学习_第3张图片
java编译版本:
springcloud学习_第4张图片

2.选择springcloud和springboot的版本

springcloud学习_第5张图片

3.修改父pom文件

<packaging>pompackaging>
  
  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.8maven.compiler.source>
    <maven.compiler.target>1.8maven.compiler.target>
    <junit.version>4.12junit.version>
    <log4j.version>1.2.17log4j.version>
    <lombok.version>1.16.18lombok.version>
    <mysql.version>8.0.22mysql.version>
    <druid.version>1.1.16druid.version>
    <mybatis.spring.boot.version>1.3.0mybatis.spring.boot.version>
  properties>

  
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-dependenciesartifactId>
        <version>2.4.2version>
        <type>pomtype>
        <scope>importscope>
      dependency>
      <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-dependenciesartifactId>
        <version>2020.0.1version>
        <type>pomtype>
        <scope>importscope>
      dependency>
      
      <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-alibaba-dependenciesartifactId>
        <version>2.1.0.RELEASEversion>
        <type>pomtype>
        <scope>importscope>
      dependency>

      <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>${mysql.version}version>
      dependency>
      <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>${druid.version}version>
      dependency>
      <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>${mybatis.spring.boot.version}version>
      dependency>
      <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>${junit.version}version>
      dependency>
      <dependency>
        <groupId>log4jgroupId>
        <artifactId>log4jartifactId>
        <version>${log4j.version}version>
      dependency>
      <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>${lombok.version}version>
        <optional>trueoptional>
      dependency>
    dependencies>
  dependencyManagement>

  <build>
    
    <plugins>
      <plugin>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-maven-pluginartifactId>
        <configuration>
          <fork>truefork>
          <addResources>trueaddResources>
        configuration>
      plugin>
    plugins>
  build>

4.mvn:install将父工程发布到仓库方便子工程继承

springcloud学习_第6张图片
注:若没报错,则证明父项目和其maven环境没有问题,可以往下写!

5.创建提供实体类的项目共同的api的module

5.1创建module

springcloud学习_第7张图片

5.2编写pom

<dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        
        <dependency>
            <groupId>cn.hutoolgroupId>
            <artifactId>hutool-allartifactId>
            <version>5.1.0version>
        dependency>
    dependencies>

5.3编写实体类和返回结果集类

springcloud学习_第8张图片

@Data                               //自动生成get、set、toString的方法
@NoArgsConstructor                  //空参构造
@AllArgsConstructor                 //全参构造
public class CommonResult<T> {

    //404 not_found data
    private Integer code;           //返回结果代码
    private String message;         //返回结果信息
    private T data;                 //返回结果属性

    public CommonResult(Integer code,String message){
        this(code,message,null);
    }

}

6、编写服务提供者module

6.1创建module

springcloud学习_第9张图片

6.2改pom文件

<dependencies>
        
        <dependency>
            <groupId>cn.ffcs.springcloudgroupId>
            <artifactId>springcloud-api-commonsartifactId>
            <version>${project.version}version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.10version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

6.3写yml配置文件

server:
  port: 8001 #服务端口

spring:
  application:
    name: cloud-payment-service #服务名
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  #当前数据源操作类型
    driver-class-name: com.mysql.cj.jdbc.Driver #数据库驱动包
    url: jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
    username: root
    password: root

devtools:
  restart:
    enabled: true #是否支持热部署

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: cn.ffcs.springcloud.entities  #所有entity别名所在包

6.4编写主启动

package cn.ffcs.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class PaymentMain8001 {

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

}

6.5编写业务类

springcloud学习_第10张图片

7、编写消费者module

7.1创建moudle

springcloud学习_第11张图片

7.2改pom文件

<dependencies>
        
        <dependency>
            <groupId>cn.ffcs.springcloudgroupId>
            <artifactId>springcloud-api-commonsartifactId>
            <version>${project.version}version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

7.3写yml

server:
  port: 80

7.4编写主启动

package cn.ffcs.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

7.5编写业务类

springcloud学习_第12张图片
编写消费者模块只需要controller类,并使用RestTemplate去调用提供者类的方法

ApplicationContextConfig.java

package cn.ffcs.springcloud.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 *程序上下文配置
 */

@Configuration
public class ApplicationContextConfig {

    //客户端模板工具集对象
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

OrderController.java

package cn.ffcs.springcloud.controller;

import cn.ffcs.springcloud.entities.CommonResult;
import cn.ffcs.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@Slf4j
public class OrderController {

    public static final String PAYMENT_URL = "http://localhost:8001";

    /**
     * 用这个对象去找8001端口下的服务
     */
    @Autowired
    private RestTemplate restTemplate;

    //客户端发的都是get请求
    @GetMapping("/consumer/payment/addPayment")
    public CommonResult<Payment> create(Payment payment){
        return restTemplate.postForObject(PAYMENT_URL+"/payment/addPayment",payment,CommonResult.class);
    }

    @GetMapping("/consumer/payment/getPaymentById/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") long id){
        return restTemplate.getForObject(PAYMENT_URL+"payment/getPaymentById/"+id,CommonResult.class);
    }
}

注:客户端发送的都是getMapping请求


总结

创建一个基本的spingcloud项目步骤:

  1. 创建一个普通maven项目,将src目录删除,将其用做父模块。
  2. 对maven项目进行相应的设置。(字符编码、注解生效激活、java编译版本确认);
  3. 创建api模块。(创建module、改pom、写业务类(只有entities,提供共同的实体类和返回结果集类));
  4. 创建提供者模块。(创建module、改pom、写yml、写主启动、写业务类(controller、service、dao));
  5. 创建消费者模块。(创建module、改pom、写yml、写主启动、写业务类(config(将RestTemplet对象创建并注入到ioc容器)、controller);

你可能感兴趣的:(笔记,spring,boot)