第113天学习打卡(SpringCloud Zuul路由网关 Config)

Zuul路由网关

概述

什么是Zuul?

Zuul包含了对请求的路由和过滤两个主要的功能:

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问 统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获取其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

注意:Zuu服务最终还是会注册进Eureka

提供:代理 + 路由 + 过滤 三大功能

Zuul能干嘛?

  • 路由
  • 过滤

官网:Home · Netflix/zuul Wiki · GitHub

Zuul 路由网关

springcloud-zuul-9527

导入依赖(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">
    <parent>
        <artifactId>springcloudartifactId>
        <groupId>com.kuanggroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>springcloud-zuul-9527artifactId>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    
    <dependencies>

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-zuulartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-hystrixartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-hystrix-dashboardartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>

        

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-ribbonartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eurekaartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>

        <dependency>
            <groupId>com.kuanggroupId>
            <artifactId>springcloud-apiartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>

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


project>

添加一个域名:地址C:\Windows\System32\drivers\etc

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第1张图片

application.yml

server:
  port: 9527
spring:
  application:
    name: springcloud-zuul
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      # 实例化ip地址
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true
info:
  app.name: kuang-springcloud
  company.name: blog.kuangstudy.com

ZuulApplication_9527.java

package com.kuang.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableZuulProxy  //代理
public class ZuulApplication_9527 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(ZuulApplication_9527.class,args);
    }
}

先启动7001端口,然后启动DeptProviderHystrix_8001 端口,最后启动9527端口

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第2张图片

结果展示:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第3张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第4张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第5张图片

www.kuangstudy.com:9527/springcloud-provider-dept/dept/get/1

修改application.yml

server:
  port: 9527
spring:
  application:
    name: springcloud-zuul
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      # 实例化ip地址
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true
info:
  app.name: kuang-springcloud
  company.name: blog.kuangstudy.com

zuul:
  routes:
    mydept.serviceId: springcloud-provider-dept
    mydept.path: /mydept/**

重启9527端口。其余端口一直保持启动状态

结果展示

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第6张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第7张图片

10.100.61.94:9527/actuator/info

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第8张图片

修改后的访问路径:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第9张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第10张图片

修改application.yml

server:
  port: 9527
spring:
  application:
    name: springcloud-zuul
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      # 实例化ip地址
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true
info:
  app.name: kuang-springcloud
  company.name: blog.kuangstudy.com

zuul:
  routes:
    mydept.serviceId: springcloud-provider-dept
    mydept.path: /mydept/**
  ignored-services: springcloud-provider-dept # 不能再使用这个路径访问了,ignored:忽略

重启9527端口。其余端口一直保持启动状态

结果展示:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第11张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第12张图片

修改application.yml

server:
  port: 9527
spring:
  application:
    name: springcloud-zuul
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      # 实例化ip地址
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true
info:
  app.name: kuang-springcloud
  company.name: blog.kuangstudy.com

zuul:
  routes:
    mydept.serviceId: springcloud-provider-dept
    mydept.path: /mydept/**
  ignored-services: "*" # 不能再使用这个路径访问了,ignored:忽略   隐藏全部的微服务
  prefix: /kuang  # 公共的访问前缀

重启9527端口。其余端口一直保持启动状态

结果展示:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第13张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第14张图片

SpringCloud config分布式配置

概述

分布式系统面临的–配置文件的问题

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个微服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务都有自己带着一个application.yml。

什么是SpringCloud config分布式配置中心

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第15张图片

Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置

Spring Cloud Config 分为服务端客户端两部分;

服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密,解密信息等访问接口。

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理。并且可以通过git客户端工具来方便的管理和访问配置内容。

SpringCloud config分布式配置中心能干嘛

  • 集中管理配置文件
  • 不同环境,不同配置,动态化的配置更新,分环境部署,比如/dev/test/prod/beta/release
  • 运行期间动态调整配置,不再需要在每个微服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
  • 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置
  • 将配置信息以REST接口的形式暴露

SpringCloud config 分布式配置中心与github整合

由于Spring Cloud Config 默认使用Git来存储配置文件(也有其他方式,比如支持SVM和本地文件),但是最推荐的还是Git,而且使用的是http/https访问的形式。

下载Git的地址:Git - Downloading Package (git-scm.com)

Git - Downloads (git-scm.com)

只需要一路点默认就可以了

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第16张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第17张图片

在码云上创建项目:

码云地址:Gitee - 基于 Git 的代码托管和研发协作平台

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第18张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第19张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第20张图片

在本地中创建一个文件Git,然后点开这个空文件,右键点击Git Bash

如何使用码云的官方地址:使用Gitee - 廖雪峰的官方网站 (liaoxuefeng.com)

在码云上配置SSH公钥:

ssh-keygen -t rsa -C "[email protected]" 

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第21张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第22张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第23张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第24张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第25张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第26张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第27张图片

就会在本地创建的文件中生成在Gitee下生成的项目:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第28张图片

和gitee 是生成的一样的项目

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第29张图片

在自己创建的Git文件中创建一个application.yml

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第30张图片

application.yml 里面的内容

spring:
  profiles:
    active: dev
---
spring:
  profiles: dev
  application:
    name: springcloud-config-dev
---
spring:
  profiles: test
  application:
    name: springcloud-config-test

把本地配置的application.yml配置到码云上Gitee

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第31张图片

上传成功的显示:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第32张图片

服务端连接Git设置 springcloud-config-server-3344

配置依赖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">
    <parent>
        <artifactId>springcloudartifactId>
        <groupId>com.kuanggroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>springcloud-config-server-3344artifactId>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>
    <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-config-serverartifactId>
            <version>2.1.1.RELEASEversion>
        dependency>

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

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

        dependency>


    dependencies>

project>

在gitee上复制HTTPS然后配置到application.yml中

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第33张图片

application.yml

server:
  port: 3344
spring:
  application:
    name: springcloud-config-server

    # 连接远程仓库
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/doudoutj111/springcloud-config.git # 是https 不是git

          # 通过config-server 可以连接到git,访问其中的资源及配置

Config_Server_3344.java

package com.kuang.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer //开启服务
public class Config_Server_3344 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(Config_Server_3344.class,args);
    }
}

只启动3344端口

访问显示的结果

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第34张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第35张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第36张图片

HTTP服务具有以下格式的资源

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第37张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第38张图片

Config 客户端连接服务端连接远程 springcloud-config-client-3355:

在本地文件下添加一个config-server.yml

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第39张图片

config-server.yml

spring:
  profiles:
    active: dev
---
server:
  port: 8201
spring:
  profiles: dev
  application:
    name: springcloud-provider-dept


# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/



---
server:
  port: 8202
spring:
  profiles: test
  application:
    name: springcloud-provider-dept


# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/


把配置的config-client.yml 传到gitee上

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第40张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第41张图片

添加依赖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">
    <parent>
        <artifactId>springcloudartifactId>
        <groupId>com.kuanggroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>springcloud-config-client-3355artifactId>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>
    <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-configartifactId>
            <version>2.1.1.RELEASEversion>
        dependency>

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

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

        dependency>

    dependencies>

project>

resources

application.yml

# 用户级别的配置
spring:
  application:
    name: springcloud-config-client-3355

bootstrap.yml

# 系统级别的配置
spring:
  cloud:
    config:
      name: config-client # 需要从git上读取的资源名称,不需要后缀
      profile: dev
      label: master
      uri: http://localhost:3344


controller

ConfigClientController.java

package com.kuang.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigClientController {
     
    @Value("${spring.application.name}")
    private String applicationName;


    @Value("${eureka.client.service-url.defaultZone}")
    private String eurekaServer;

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

    @RequestMapping("/config")
    public String getConfig(){
     
        return "applicationName:" + applicationName +
             "eurekaServer:" + eurekaServer +
                "port:" + port;
    }


}

ConfigClient.java

package com.kuang.springcloud;

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

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

先启动3344端口,再启动3355端口

测试结果:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第42张图片

image-20210501212307624

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第43张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第44张图片

Config: 远程配置实战测试

在本地Git 文件下新建两个文件:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第45张图片

config-dept.yml

spring:
  profiles:
    active: dev
---
server:
  port: 8001

mybatis:
  type-aliases-package: com.kuang.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml



spring:
  profiles: dev
  application:
    name: springcloud-config-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 3个服务名称一致, 只是请求不一样了
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息
    prefer-ip-address: true # true 可以显示服务的IP地址

# info 配置
info:
  app.name: kuangshen-springcloud
  company.name: blog.kuangstudy.com


---
server:
  port: 8001

mybatis:
  type-aliases-package: com.kuang.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml



spring:
  profiles: dev
  application:
    name: springcloud-config-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 3个服务名称一致, 只是请求不一样了
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db02?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息
    prefer-ip-address: true # true 可以显示服务的IP地址

# info 配置
info:
  app.name: kuangshen-springcloud
  company.name: blog.kuangstudy.com

config-eureka.yml

spring:
  profiles:
    active: dev
---
server:
  port: 7001
spring:
  profiles: dev
  application:
    name: springcloud-config-eureka

eureka:
  instance:
    hostname: eureka7001.com #Eureka 服务端的实例名称
  client:
    register-with-eureka: false # 表示是否向eureka注册中心注册自己
    fetch-registry: false  # fetch-registry 如果为false,则表示自己为注册中心
    service-url: # 单机  defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      # 集群(关联)
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

---
server:
  port: 7001
spring:
  profiles: test
  application:
    name: springcloud-config-eureka

eureka:
  instance:
    hostname: eureka7001.com #Eureka 服务端的实例名称
  client:
    register-with-eureka: false # 表示是否向eureka注册中心注册自己
    fetch-registry: false  # fetch-registry 如果为false,则表示自己为注册中心
    service-url: # 单机  defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      # 集群(关联)
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

把配置的文件传到gitee上

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第46张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第47张图片

springcloud-config-eureka-7001

导入依赖


<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">
    <parent>
        <artifactId>springcloudartifactId>
        <groupId>com.kuanggroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>springcloud-config-eureka-7001artifactId>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-configartifactId>
            <version>2.1.1.RELEASEversion>
        dependency>
        
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eureka-serverartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
        dependency>
    dependencies>

project>

resources

application.yml

spring:
  application:
    name: springcloud-config-eureka-7001

bootstrap.yml

spring:
  cloud:
    config:
      name: config-eureka
      lable: master
      profile: dev
      uri: http://localhost:3344

EurekaServer_7001.java

package com.kuang.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);
    }
}

先启动3344端口, 再启动EurekaServer_7001

测试结果:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第48张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第49张图片

springcloud-config-dept-8001

导入依赖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">
    <parent>
        <artifactId>springcloudartifactId>
        <groupId>com.kuanggroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>springcloud-config-dept-8001artifactId>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>
    <dependencies>

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-configartifactId>
            <version>2.1.1.RELEASEversion>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-hystrixartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eurekaartifactId>
            <version>1.4.6.RELEASEversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>

        dependency>

        <dependency>
            <groupId>com.kuanggroupId>
            <artifactId>springcloud-apiartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>

        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
        dependency>

        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-coreartifactId>

        dependency>

        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
        dependency>


        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-testartifactId>
        dependency>

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

        dependency>

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

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>

        dependency>

    dependencies>

project>

resources

application.yml

spring:
  application:
    name: springcloud-config-dept-8001

bootstrap.yml

spring:
  cloud:
    config:
      name: config-dept
      lable: master
      profile: dev
      uri: http://localhost:3344

controller

DeptController.java

package com.kuang.springcloud.controller;

import com.kuang.springcloud.pojo.Dept;
import com.kuang.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

//Controller提供restful服务
@RestController  //以json格式传输
public class DeptController {
    @Autowired //这里就体现了controller调service层
    private DeptService deptService;
    //获取一些配置的信息,得到具体的微服务
    @Autowired
    private DiscoveryClient client;

    @PostMapping("/dept/add")//添加请求一般以post提交  get不安全
    public boolean addDept(Dept dept){
        return deptService.addDept(dept);

    }
    @GetMapping("/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id){
        Dept dept = deptService.queryById(id);
        if (dept==null){
            throw new RuntimeException("Fail");
        }
        return dept;
    }
    @GetMapping ("/dept/list")
    public List queryAll(){
        return deptService.queryAll();
    }

    //注册进来的微服务~ 获取一些消息~
    @GetMapping("/dept/discovery")
    public Object discovery(){
        // 获取微服务列表的清单
        List services = client.getServices();
        System.out.println("discovery=>services:" + services);
        List instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
        for (ServiceInstance instance : instances) {
            System.out.println(
                    instance.getHost()+"\t"
                    + instance.getPort()+"\t"
                    + instance.getUri()+"\t"
                    + instance.getServiceId()

            );


        }
        return this.client;


    }

}

dao

DeptDao.java

package com.kuang.springcloud.dao;

import com.kuang.springcloud.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository //被spring托管
public interface DeptDao {
     

    public boolean addDept(Dept dept);
    public Dept queryById(Long id);//查询部门信息
    public List<Dept> queryAll();

}

service

DeptService.java

package com.kuang.springcloud.service;

import com.kuang.springcloud.pojo.Dept;

import java.util.List;

public interface DeptService {
     
    public boolean addDept(Dept dept);
    public Dept queryById(Long id);
    public List<Dept> queryAll();
}

DeptServiceImpl.java

package com.kuang.springcloud.service;

import com.kuang.springcloud.dao.DeptDao;
import com.kuang.springcloud.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DeptServiceImpl implements DeptService{
     

    @Autowired
    private DeptDao deptDao;
    @Override
    public boolean addDept(Dept dept) {
     
        return deptDao.addDept(dept);
    }

    @Override
    public Dept queryById(Long id) {
     
        return deptDao.queryById(id);
    }

    @Override
    public List<Dept> queryAll() {
     
        return deptDao.queryAll();
    }
}

DeptService_8001.java

package com.kuang.springcloud;
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;


//启动类

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

    }

    //增加一个Servlet
    @Bean
    public ServletRegistrationBean hystrixMetricsStreamServlet(){
     
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
        registrationBean.addUrlMappings("/actuator/hystrix.stream");//访问这个页面就可以被监控了
        return registrationBean;
    }
}

启动这3个端口:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第50张图片

访问测试结果页面

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第51张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第52张图片

在gitee上修改config-dept.yml

spring:
  profiles:
    active: dev
---
server:
  port: 8001

mybatis:
  type-aliases-package: com.kuang.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml



spring:
  profiles: dev
  application:
    name: springcloud-config-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 3个服务名称一致, 只是请求不一样了
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db03?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息
    prefer-ip-address: true # true 可以显示服务的IP地址

# info 配置
info:
  app.name: kuangshen-springcloud
  company.name: blog.kuangstudy.com


---
server:
  port: 8001

mybatis:
  type-aliases-package: com.kuang.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml



spring:
  profiles: test
  application:
    name: springcloud-config-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 3个服务名称一致, 只是请求不一样了
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db02?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456

# Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息
    prefer-ip-address: true # true 可以显示服务的IP地址

# info 配置
info:
  app.name: kuangshen-springcloud
  company.name: blog.kuangstudy.com


需要把上面的三个端口重新启动。

测试结果:

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第53张图片

第113天学习打卡(SpringCloud Zuul路由网关 Config)_第54张图片

B站学习地址:【狂神说Java】SpringCloud最新教程IDEA版_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

你可能感兴趣的:(java)