专栏首页朝雨忆轻尘Spring Boot + Spring Cloud 实现权限管理系统 后端篇

Spring Boot + Spring Cloud 实现权限管理系统 后端篇

什么是 Consul

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

Consul 安装

访问 Consul 官网 ,根据操作系统类型,选择下载 Consul 的最新版本。我这里选择windows版本。

下载下来是一个zip压缩包,解压之后,是一个exe可执行文件。

 打开CMD终端,进入consul.exe所在目录,执行如下命令启动Consul服务。

cd C:\consul_1.3.0_windows_amd64  # 进入consul.exe所在目录

consul agent -dev        # 启动服务, -dev 表示开发模式运行,另外还有 -server 表示服务模式运行

启动过程信息如下图所示。

启动成功之后,访问 http://localhost:8500 , 可以查看 Consul 管理界面。

kitty-monitor改造

改造 kitty-monitor 工程,作为服务注册到注册中心。

添加依赖

添加Spring Cloud依赖文件,Consul注册中心依赖。

pom.xml

<!--consul-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--srping cloud-->
<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>

配置文件

修改配置文件,添加服务注册配置。

application.yml

server:
  port: 8000
spring:
  application:
    name: kitty-monitor
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${spring.application.name}    # 注册到consul的服务名称

启动类

修改启动类,添加 @EnableDiscoveryClient 注解,开启服务发现支持。

KittyMonitorApplication.java

package com.louis.kitty.monitor;

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

import de.codecentric.boot.admin.server.config.EnableAdminServer;

/**
 * 启动器
 * @author Louis
 * @date Oct 29, 2018
 */
@EnableAdminServer
@EnableDiscoveryClient
@SpringBootApplication
public class KittyMonitorApplication {

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

测试效果

启动服务监控服务器,发现服务已经成功注册到注册中心。

查看服务监控管理界面,看到如下界面就没问题了。

kitty-backup改造

改造 kitty-backup工程,作为服务注册到注册中心。

添加依赖

添加Spring Cloud依赖文件,Consul注册中心依赖。

pom.xml

<!--consul-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--srping cloud-->
<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>

配置文件

修改配置文件,添加服务注册配置,健康检查接口开放配置。

application.yml

# tomcat
server:
  port: 8002
# spring boot admin
spring:
  application:
    name: kitty-backup
  boot:
    admin:
      client:
        url: "http://localhost:8000"
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${spring.application.name}    # 注册到consul的服务名称
# 开放健康检查接口
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
# backup datasource
kitty:
  backup:
    datasource:
      host: localhost
      userName: root
      password: 123456
      database: kitty

启动类

修改启动类,添加 @EnableDiscoveryClient 注解,开启服务发现支持。

KittyBackupApplication.java

package com.louis.kitty.backup;

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

/**
 * 启动器
 * @author Louis
 * @date Oct 29, 2018
 */
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages={"com.louis.kitty"})
public class KittyBackupApplication {

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

测试效果

启动服务监控服务器发现服务已经成功注册到注册中心。

查看服务监控管理界面,发现服务已经在监控列表里了。

点击服务,进入详情页面,可以看到服务相关的各种指标信息,比如进程、线程、内存使用、垃圾回收等等。

kitty-admin改造

同理,改造 kitty-admin工程,作为服务注册到注册中心。

添加依赖

添加Spring Cloud依赖文件,Consul注册中心依赖。

pom.xml

<!--consul-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--srping cloud-->
<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>

配置文件

修改配置文件,添加服务注册配置,健康检查接口开放配置。

application.yml

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 8001
    #context-path: /kitty-admin
# DataSource
spring:
  datasource:
    name: druidDataSource
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/kitty?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
      username: root
      password: 123456
      filters: stat,wall,log4j,config
      max-active: 100
      initial-size: 1
      max-wait: 60000
      min-idle: 1
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: select 'x'
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-open-prepared-statements: 50
      max-pool-prepared-statement-per-connection-size: 20
  # spring boot admin
  application:
    name: kitty-admin
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${spring.application.name}    # 注册到consul的服务名称
  boot:
    admin:
      client:
        url: "http://localhost:8000"
# 开放健康检查接口
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
# pagehelper   
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql

启动类

修改启动类,添加 @EnableDiscoveryClient 注解,开启服务发现支持。

KittyAdminApplication.java

package com.louis.kitty.admin;

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

/**
 * 启动器
 * @author Louis
 * @date Oct 29, 2018
 */
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages={"com.louis.kitty"})
public class KittyAdminApplication {

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

测试效果

启动服务监控服务器,发现服务已经成功注册到注册中心。

,查看服务监控管理界面,发现服务已经在监控列表里了。

但是点击进入详情页,发现并没有展示上面备份服务一样的信息,而是显示“invalid token”信息。

那是监控服务器到客户端获取健康信息失败了,因为获取信息的接口被我们的Shiro给拦截了。

修改Shiro配置,使监控信息获取接口无需进行登录认证,添加如下图所示内容。

ShiroConfig.java

修改完成之后,重启服务,在此查看详情页面,终于成功获取到监控信息了。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)

    前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢。

    朝雨忆轻尘
  • Spring Boot + Spring Cloud 构建微服务系统(一):服务注册和发现(Consul)

    Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”...

    朝雨忆轻尘
  • Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)

    如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多。此时,往往某一个基础服务信息变更,都...

    朝雨忆轻尘
  • c++ 网络编程(五)TCP/IP LINUX下 socket编程 多种I/O函数 -以及readv和writev函数用法

    原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html

    徐飞机
  • 硬核干货!2020最新Java最常见面试题汇总。Guide哥倾心整理!

    大家好,我是Guide哥!这篇文章最开始是在我的知识星球分享过,分享之后里面的题目引起了大家的共鸣,所以拿出来分享一下,希望对大家有帮助!觉得不错的话,一定要看...

    Guide哥
  • 即使你不是“钢铁侠”,也可以知道未来城市交通是什么样

    还记得漫威超级英雄电影《钢铁侠1》里,钢铁侠最终被炸毁的那座豪宅“自由之城”吗? 挥一挥手出现的环幕银屏、可以辅助研发盔甲的机器手臂、甚至于保护斯塔克生命安全的...

    企鹅号小编
  • 【回顾】无人驾驶汽车在2017年经历了哪些大事件?

    随着越来越多无人驾驶汽车在今年上路,也有更多人开始注意这些车子,可以确定的是,它们不再是新鲜产物。 但这些无人驾驶汽车在进行公开驾驶测试时也暴露了一些基本弱点,...

    机器人网
  • Apache Maven WAR Plugin

    Apache Maven WAR插件负责收集所有工件的依赖性,web应用程序的类和资源,包装成一个web应用程序存档。

    用户3004328
  • C#----汉字转拼音

    上一篇博客中介绍的是动态加载EasyUI控件显示到前台,里面包括按钮控件,而且每一个设备有可能有不同的命令和参数,不过总共可以显示的有八种不同的按钮,公用的,那...

    令仔很忙
  • OpenDaylight与Mininet应用实战之OpenFlow1.0协议分析二

    1 打开wireshark并创建拓扑 按照章节一搭建平台,启动ODL,并打开wireshark。进入装有Mininet的VM,通过mn命令指定网络拓扑及指定此O...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券