SpringCloud基础 Consul的引入

前言

首先是为什么引入consul这个组件

我们知道微服务分为很多个模块,这里模块中相互调用,我使用硬编码的模式是不好的

比如微服务模块需要更新的时候,我们使用硬编码的方式可能需要修改很多个地方

但是使用consul之后,就引入了注册中心,我们只需要将对应的服务注册为节点

这样我们可以按照节点的名称去访问对应的服务,即使有多个服务器也可以通过算法来进行访问,比如轮询算法等等

所以我们引入了consul来达成微服务的服务端的负载均衡以及服务治理注册发现等功能

简介

首先还是挂一个官网的地址

www.consul.io

主要功能就是以下几点:

服务发现

健康检测

kv存储

多数据中心

可视化web界面

我们只需要在官网下载对应的版本

解压后只是一个孤零零的exe文件

然后我们输入consul agent -dev即可以开发者模式打开,再在浏览器访问8500端口即可

接着我们应该在idea中将服务给注册进consul了

我们需要修改pom文件,修改yml文件 修改主启动类

pom文件加上这个依赖

<!--SpringCloud consul discovery -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

在yml文件加上这几行

 ####Spring Cloud Consul for Service Discovery
spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

最后给主启动类加上这个注解@EnableDiscoveryClient

标记开启服务发现

注意对应的RestTemplate配置也需要加上负载均衡的注解

java 复制代码
@Configuration
public class RestTemplateConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }
}

对应的在consul中加入对应节点的文件夹以及内容,然后我们就可以在本地接口中访问了

因为对应的微服务每个都需要配置文件等,我们觉得大多配置文件显得很冗余

所以consul这里可以帮助我们保存对应的配置文件

这时候我们又需要加上对应的pom文件依赖了

java 复制代码
<!--SpringCloud consul config-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

可以理解为是一个全局配置文件的作用

然后需要新增一个boostrap的yml文件

java 复制代码
spring:
  application:
    name: cloud-payment-service
    ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
      config:
        profile-separator: '-' # default value is ",",we update '-'
        format: YAML

有人问为啥有了application.yml还需要这个呢

其实可以理解为application.yml是用户级别的配置文件

这里的bootstrap配置文件是系统级别的配置文件,优先级更高

两者是共存的,但是bootstrap的配置文件是优先加载的

这里加入这个我们是希望consul的配置先加载,然后对应的微服务从中获取到全局配置

然后我们需要在web网页中书写对应的配置信息

首先我们需要创建config文件夹

在键值对中输入config/即可创建

然后按照对应的微服务创建对应的文件夹

最后以data文件(非文件夹)结尾,我们就可以找到data中存储的yml文件了

接着我们就可以使用@Value注解来从对应的配置文件中取到信息了

默认是访问不带dev和prod的文件

但是我们可以通过application.yml文件进行设置

随后我们就可以使用controller进行访问拿到对应配置了

consul在window的服务注册和保存文件这里简述

可以建一个mydata文件夹进行保存

修改执行以下脚本即可,并完成开机自启动

@echo.服务启动......  
@echo off  
@sc create Consul binpath= "D:\devSoft\consul_1.17.0_windows_386\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir D:\devSoft\consul_1.17.0_windows_386\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause

服务端负载均衡和客户端的区别

服务端负载均衡主要是nginx等

客户端consul可以完成

服务段主要是处理请求,将请求均匀的分配到空闲的服务器

客户端主要是向注册中心拉取节点数据,找到可以访问的节点发起请求

相关推荐
维李设论16 小时前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
Java程序之猿1 天前
微服务分布式(二、注册中心Consul)
分布式·微服务·consul
Doker 多克1 天前
IntelliJ IDEA Docker集成
spring cloud·docker·intellij-idea
Hello Dam1 天前
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
spring cloud·微服务·云原生·架构·gateway·登录验证·单点登录
小马爱打代码1 天前
SpringCloud(注册中心+OpenFeign+网关+配置中心+服务保护+分布式事务)
分布式·spring·spring cloud
小笨猪-1 天前
统⼀服务⼊⼝-Gateway
java·spring cloud·微服务·gateway
岁月变迁呀2 天前
Spring Cloud Gateway 源码
java·spring·spring cloud·gateway
岁月变迁呀2 天前
Eureka服务注册源码
spring cloud·eureka
橘子在努力2 天前
【橘子微服务】spring cloud function的编程模型
spring cloud·微服务·架构