springcloud微服务体系(二)—2.0G版 Consul注册中心搭建

本文介绍了在SpringCloud 2.0体系中选择Consul作为注册中心的原因,包括其完善的功能和与SpringCloud的良好集成。详细阐述了Consul在Linux上的下载、安装及环境变量设置过程,并提供了后台启动服务的方法。接着讲解了如何在客户端配置Consul,包括添加依赖、配置文件和自定义注册标识。最后,展示了客户端启动后的效果,并分享了完整的代码示例仓库。

引言

Springcloud体系中 注册中心目前主流的有多种方案如 eureka、zookeeper、Consul等。

eureka:Springcloud1.0版本的黄金搭档,但目前已宣布停止更新了。
zookeeper:拥有完整的生态体系和社区资源,但和springcloud 契合度不高,灵活性较差。
Consul: 目前Consul 自身功能,和springcloud 对其集成的支持都相对较为完善,而且运维的复杂度较为简单。

因此在2.0后 普遍使用consul作为体系中的注册中心。consul要作为独立的程序部署,再在客户端中引入jar包,进行远程通讯。

Consul部署

一、下载、安装(liunx)

使用wget加粗样式下载安装包 官方地址:https://www.consul.io/downloads.html
完成后将文件 解压

unzip consul_1.1.0_linux_amd64.zip

得到一个文件consul

设置环境变量

vi /etc/profile

根据路径写入
export CONSUL_HOME=/springcloud/consul/
export PATH=$PATH:$MAVEN_HOME/bin:$CONSUL_HOME

保存
source  /etc/profile

查看是否成功
在这里插入图片描述

启动服务端

生产环境
使用nohup 后台启动
对于运行日志,可是使用dev/null 直接抛弃,或者使用定时任务 切分文件

nohup consul agent -server -ui -bootstrap-expect=1 -data-dir=/datadish/lost+found/consul/data -node=lhm-springcould-consul -advertise=47.103.37.69 -bind=0.0.0.0 -client=0.0.0.0 &

下面是我自己写的定时任务,可做参考

# Author: Lhm
# Last Update: 2018.02.24
# Description: nohup.out 日志分割

this_path='/datadish/lost+found/sonsul/data/log'   #根据脚本所在路径
current_date=`date -d "-1 day" "+%Y%m%d"`   #列出时间
cd $this_path
echo $this_path
echo $current_date

do_split () {
    [ ! -d logs ] && mkdir -p logs
    split -b 10m -d -a 4 ./nohup.out   ./logs/nohup-${current_date}  #切分10兆每块至logs文件中,格式为:nohup-xxxxxxxxxx
    if [ $? -eq 0 ];then
        echo "Split is finished!"
    else
        echo "Split is Failed!"
        exit 1
    fi
}

do_del_log() {
    find ./logs -type f -ctime +7 | xargs rm -rf #清理7天前创建的日志
    cat /dev/null > nohup.out #清空当前目录的nohup.out文件
}

if do_split ;then
    do_del_log
    echo "nohup is split Success"
else
    echo "nohup is split Failure"
    exit 2
fi

# crontab -e 添加定时任务:每周第一天的1点执行一次
#0 1 * * */1 /server/scripts/clearNohup.sh &>/dev/null

对于consul启动的命令,可以查看下面这个链接
https://blog.youkuaiyun.com/liuzhuchen/article/details/81913562

启动后查看效果 端口默认是8500
在这里插入图片描述

配置客户端

添加pom

        <!-- 安全检查 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- consul注册中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

填写配置文件

spring:
  cloud:
    consul:
      host: 192.168.125.125
      port: 8500
      enabled: true
      discovery:
        enabled: true
        serviceName: security
        port: ${server.port}
        health-check-path: /actuator/health
        health-check-interval: 10s
        tags: security
        prefer-ip-address: true

自定义注册标识

package com.lhm.springcloud.security.config;

import com.ecwid.consul.v1.ConsulClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties;
import org.springframework.cloud.consul.discovery.HeartbeatProperties;
import org.springframework.cloud.consul.discovery.TtlScheduler;
import org.springframework.cloud.consul.serviceregistry.ConsulRegistration;
import org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName RpsConsulServiceRegistryConfig
 * @Author liuheming
 * @Date 2019/4/26 15:07
 * @Version 1.0
 **/
@Configuration
public class RpsConsulServiceRegistryConfig {
    @Autowired(required = false)
    private TtlScheduler ttlScheduler;

    @Bean
    public MyConsulServiceRegistry consulServiceRegistry(
            ConsulClient consulClient,
            ConsulDiscoveryProperties properties,
            HeartbeatProperties heartbeatProperties) {
        return new MyConsulServiceRegistry(
                consulClient, properties, ttlScheduler, heartbeatProperties);
    }

    class MyConsulServiceRegistry extends ConsulServiceRegistry {

        public MyConsulServiceRegistry(ConsulClient client, ConsulDiscoveryProperties properties, TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties) {
            super(client, properties, ttlScheduler, heartbeatProperties);
        }

        @Override
        public void register(ConsulRegistration reg) {
            reg.getService().setId(reg.getService().getName() + "-" + reg.getService().getAddress() + "-" + reg.getService().getPort());
            super.register(reg);
        }

    }
}

启动客户端,最终效果如下
在这里插入图片描述

完整代码

https://github.com/liuheming/springcloudDemo.git

课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口出口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的代网关Spring Cloud Gateway更加强大。15、微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton本项目源码37个,Edgware本项目26个,2230页高清PDF正课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值