springcloud微服务创建


文档

参考文档
https://www.springcloud.cc
springboot与springcloud的详细版本对应
https://start.spring.io/actuator/info(可以使用json工具转一下)


springcloud流程

  • 父工程(依赖版本控制)
  • api(将数据的表写成了api服务)
  • 生产者(provider)==>多个服务(后台管理模块 支付模块等)
  • 注册中心(eureka)创建注册中心集群
  • 消费者(ribbon feign)客户端负载均衡
  • 断路器(hystrix)服务熔断 服务降级 服务监控
  • 服务网管(zuul)负(ip地址及服务名称的配置)
  • 分布式配置(spirngcloud-confg)将单个服务的配置放在代码托管上,远程调用,采用了vs的架构

springcloud netfilex 五大组件配置流程

导入依赖
编写配置文件
在启动类开启功能
配置类


spirngcloud架构图

在这里插入图片描述


创建父工程

在这里插入图片描述

在这里插入图片描述

父工程依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.common</groupId>
    <artifactId>srpingcloud</artifactId>
    <version>1.0-SNAPSHOT</version>

<!--    打包方式-->
    <packaging>pom</packaging>

<!--    依赖版本控制-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.1.2</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
    </properties>

<!--    依赖管理-->
    <dependencyManagement>
        <dependencies>

<!--            springcloud的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

<!--            springboot的依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

<!--            数据库依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>

<!--            数据源依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>

<!--            springboot启动依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-start</artifactId>
                <version>1.3.2</version>
            </dependency>

<!--            junit测试依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>

<!--            lombok插件依赖-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

<!--            日志依赖-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>

            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

创建服务注册中心

在父工程里创建module

在这里插入图片描述

eureka依赖

  <dependencies>

<!--    eureka依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

<!--        热部署依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>

eureke的application.yml配置

server:
  port: 7001

#eureka配置
eureka:
  instance:
    hostname: localhost:7001   #Eureka服务端的实例名称,localhost代表服务器的地址,最后要换的
  client:
    register-with-eureka: false  #表示是否向eureka注册中心注册自己
    fetch-registry: false       #fetch-registry如果为false, 则表示自己为注册中心
    service-url:                # 监控页面
      #单机不做集群 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      #localhost代表服务器的地址,最后要换的 ,集群互相关联7001关联70027003
      #其实用的端口号都应该是7001,关联的是不同服务器的地址,因为我只有一个电脑,就用了端口号代替
      defaultZone: http://localhost:7002/eureka/,http://127.0.0.1:7003/eureka/

启动类

package com.common.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
//启动之后访问 http://localhost:7001/
@SpringBootApplication
@EnableEurekaServer         //EnableEurekaServer 服务端启动类,可以接受别人注册进来
public class EurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class, args);
    }
}

如此eureka服务就创建好了,集群的话就多创建几个配置就是一样的

创建生产者

在父工程里创建module

在这里插入图片描述

生产者依赖

   <dependencies>

<!--        我们需要拿到实体类,从api项目的pojo拿-->
        <dependency>
            <groupId>com.common</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

<!--        junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

<!--        mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

<!--        druid数据源依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>

<!--        日志核心依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>

<!--        springboot启动依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

<!--        spirngboot测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>

<!--        springboot的web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

<!--        jetty依赖相当于tomcat(springboot自带tomcat)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

<!--        热部署依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

<!--        eureka依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

<!--        actutor完善监控信息(erekua的status指向网页的信息依赖)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

<!--        Hystrix依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.reactivestreams</groupId>
            <artifactId>reactive-streams</artifactId>
            <version>1.0.3</version>
        </dependency>

<!--        导入giteeg关于dept配置要用的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>


    </dependencies>

生产者application.yml整合了eureka配置

Server:
  port: 8001

#mybatis配置
mybatis:
  type-aliases-package: com.common.springcloud.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml
  config-location: classpath:mybatis/mybatis-config.xml


#spring配置
spring:
  application:
    name: springcloud-provider-dept         #对应着erueka的Application的名字
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
    driver-class-name: org.gjt.mm.mysql.Driver
  #以下为新增
  druid:
    # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个,
    #注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
    test-on-borrow: false
    # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
    #注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
    test-while-idle: true
    # 指明是否在归还到池中前进行检验,注意: 设置为true后如果要生效,
    #validationQuery参数必须设置为非空字符串
    test-on-return: false
    # SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.
    #如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录
    validation-query: select 1

#Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      #做集群需要关联集群的eureka服务器的地址,其实端口号都应该是7001,
      #关联的只是服务器地址,这里因为只有一台电脑,就用了端口号代替
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
  instance:
    instance-id: springcloud-provider-dept8001  #修改eureka默认描述信息就是status

#info配置
info:
  app.name: klz-springcloud
  company.name: com.common.klz

生产者启动类配置

package com.common.springcloud;

        import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
        import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

//启动类
@SpringBootApplication
@EnableEurekaClient     //在服务启动之后自动注册到eureka中
@EnableDiscoveryClient  //服务发现
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class, args);
    }
}

因为是生产者还有其他东西(自己写)

在这里插入图片描述


创建消费者

在父工程里创建module

在这里插入图片描述

消费者依赖

 <dependencies>

<!--    实体类依赖,从api中导-->
        <dependency>
            <groupId>com.common</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

<!--        spirngboot的web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

<!--        热部署依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

    </dependencies>

消费者application.yml配置

server:
  port: 80

消费者启动类配置

package com.common.springcloud;

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

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

消费者配置文件

package com.common.springcloud.config;

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

@Configuration
public class ConfigBean {
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

消费者controller配置

package com.common.springcloud.controller;

import com.common.springcloud.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
public class DeptConsumerController {
    //消费者 没有servicec层
    //RestTemplate ...方法供我们调用就可以了! 注册sring中
    //(url, 实体: Map, Class<T> ResponseType)
    @Autowired
    private RestTemplate restTemplate;

    private static final String REST_URL_PREFIX = "http://localhost:8001";

    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id) {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/"+id, Dept.class);
    }

    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept) {
        return restTemplate.postForObject(REST_URL_PREFIX +"/dept/add", dept, boolean.class);
    }

    @RequestMapping("/consumer/dept/list")
    public List<Dept> list() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);

    }

}

例子

hystrix和springcloud-config 写法差不多
源码:
链接:https://pan.baidu.com/s/1CLNpF3FB475unTo6qKEhtg
提取码:fgy1
斜体样式

发布了71 篇原创文章 · 获赞 0 · 访问量 1573

猜你喜欢

转载自blog.csdn.net/qq_42977003/article/details/103899824
今日推荐