• spring cloud consul基础扫盲


    前言

    最近一段时间开始了一个新项目,几个同事共同开发,同时使用了PHP和JAVA两种语言,分成了各个模块,在相互调用时的配置难以维护,于是就开始寻找服务发现的方案,spring 系列的目前提供了eureka、consul、zookeeper,最终选择consul.

    eureka

    eureka由JAVA语言开发,在spring cloud中使用方便,容易配置,是首先想到的方案,但基于以下原因放弃:

    1. 目前spring集成的为1.X版本,且2.0已闭源,前景不明朗;
    2. 与其它语言协同开发时,非JAVA语言需要开启一个sidecar进程才可以通信;

    consul

    consul由GO语言开发,是专门用来做服务发现的,具有服务注册、服务必现、服务检测、UI管理、命令管理、API管理、数据存储等;且spring在此基础上做了封装,优先采用;

    zookeeper

    zooKeeper最先使用于hadoop集群管理,用来维护集群状态,是一个大而全的组件,学习成本略高

    consul安装

    1. 从官网下载相应平台的包: 官网地址;
    2. 解压到指定目录,直接运行即可: consul agent -server -bootstrap-expect=1 -data-dir=/data/data/consul/consul1 -node=master_1 -bind=0.0.0.0 -client=0.0.0.0 -enable-script-checks=true -config-dir=/etc/consul/consul1 -ui
    3. 至此consul安装完成,其它常规操作(如集群部署、常用命令)请参考官方文档或CSDN博客

    spring-cloud配置

    1. 引入依赖包
    //consul-all包含consul-bus、consul-discovery、consul-config三部分
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-consul-all</artifactId>
    		</dependency>
    
    1. application.yml/bootstrap.yml配置
    spring:
      cloud:
        consul:
          host: 192.168.1.40
          port: 8500
          discovery:
            heartbeat:
              enabled: true
            enabled: true
            register: true
            deregister: true
            prefer-ip-address: true
            instance-id: ${spring.application.name}:${random.value}
    #        只查询有效的记录
            query-passing: true
          config:
    #      在consul中配置的key路径为: config/cloud-consul/key 在启动或更新时会覆盖项目中原先配置
            format: key_value
            enabled: true
    #        所有项目共用的配置 consul的配置路径为: config/application/key
            default-context: application
            data-key: data
            prefix: config
    
    1. 在入口中加入服务发现注解
    @SpringBootApplication
    @EnableDiscoveryClient
    
    1. 获取指定服务的信息
    //通过feign或restTemplate即可远程调用
        @Autowired
        private ConsulDiscoveryClient discoveryClient;
        
        public List<ServiceInstance> test2(String serviceName){
            List<ServiceInstance> instanceList = discoveryClient.getInstances(serviceName);
            return instanceList;
        }
    
    1. 至此,一个简单的服务注册发现完工,可以到consul ui界面查询相关信息,默认为8500端口

    consul-config

    consul自带数据存储功能,是config-client和config-server的替代方案,由于上文已经引入consul-all功能,已包含consul-config功能,所以consul的配置位置要由application.yml转到bootstrap.yml中,以官方的说明,consul中的数据将会在一个特定的启动阶段加入到spring容器中,当consul中数据变更时,会触发refresh操作,完成参数的热更新;

    1. 配置参数
    	config:
    #      在consul中配置的key路径为: config/cloud-consul/key 在启动或更新时会覆盖项目中原先配置
            format: key_value
            enabled: true
    #        所有项目共用的配置 consul的配置路径为: config/application/key
            default-context: application
            data-key: data
            prefix: config
    
    
    1. 通过consul-ui或命令设置属性

    2. 在需要同步更新的类上加上@RefreshScope的注解

    3. 更改consul中的key值,触发更新

    注意内容:
    全局的配置属性所在路径:/config/application//config/application,profile,项目配置属性所有路径: /config/service-name/config/service-name,profile

    可能会现现的坑

    • consul默认绑定IP为127.0.0.1,可通过-client= 和 -bind来修改
    • 负载均衡器会选取失效的服务节点 请确保query-passing的属性为true
    • 在spring项目关闭时,会触发服务自动注销,如因意外情况造成失效的节点未注销,可能会造成异常情况(因consul不能自动剔除失效节点),特别是上query-passing的属性为false时,需要手动注销失效节点,方法请参考consul官方文档;

    重要说明

    最好的教程就是官方文档,把consul和spring-cloud-consul文档过一遍,大部分问题都可以解决,如果有一些弄不清楚,就google吧.............. 如果发现有任何错误,欢迎各位大神指正

  • 相关阅读:
    Android之SurfaceView学习(一)
    AS3的加载机制(带例子) 转载
    Timer与TimerTask的用法
    A*寻路初探 GameDev.net (转载)
    解决在Sql Server2005查询分析器中读取Excel表出现的一些问题
    svn更改用户问题
    MVC4 WEBAPI初探
    使用WORD2013发布blog
    一个IIS中可否支持两个版本的Freamwork
    web打印也能分页
  • 原文地址:https://www.cnblogs.com/417xiaoliu/p/9614553.html
Copyright © 2020-2023  润新知