详解springcloud组件consul服务治理

Consul是一款由HashiCorp公司开源的,用于服务治理的软件,Spring Cloud Consul对其进行了封装。Consul具有如下特点:

  • 服务注册 - 自动注册和取消注册服务实例的网络位置
  • 运行状况检查 - 检测服务实例何时启动并运行
  • 分布式配置 - 确保所有服务实例使用相同的配置

Consul agent有两种运行模式:Server和Client。这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上 的应用服务无关。 以Server模式运行的Consul agent节点用于维护Consul集群的状态,官方建议每个Consul Cluster至少有3个或以上的运行在Server mode的Agent,Client节点不限。

安装Consul

Consul下载地址:https://www.consul.io/downloads.html,本文选择windows 64bit 版本进行演示。

下载后解压,然后在解压目录下运行./consul命令:

可以看到Consul所包含的命令,使用consul [命令] --help可以查看某个命令的具体用法。

执行下面这条命令来启动一个Consul agent

-dev表示创建一个开发环境下的server节点,在该模式下不会有任何持久化操作,即不会有任何数据写入到磁盘,所以这个模式适合用于开发过程,而不适用于生产环境。

启动后,默认的端口号为8500,访问http://localhost:8500

当前就一个consul服务。接下来我们开始创建服务提供者和服务消费者。

cloud-provider-consul-payment8005 服务提供者

pom的依赖

<?xml version="1.0" encoding="UTF-8"?>
<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>springcloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-consul-payment8005</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-api-conmmon</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--swagger 整合swagger需要的依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <!--swagger ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <!--SpringBoot热部署配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

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

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

编写application.yml配置文件

server:
  port: 8005
spring:
  application:
    name: server-provider-consul
  cloud:
    consul:
      host: localhost  #consul的ip地址
      port: 8500    #consul的段端口号
      discovery:
        register-health-check: false  #不进行检查机制
        service-name: ${spring.application.name}

然后在配置文件里添加如下配置:

spring.cloud.consul.hostspring.cloud.consul.port配置了consul的ip和端口;spring.cloud.consul.discovery.service-name配置了该服务在consul里注册的服务名称;spring.cloud.consul.discovery.register-health-check用于开启健康检查,spring.cloud.consul.discovery.health-check-interval配置了健康检查的周期为10秒,spring.cloud.consul.discovery.health-check-path配置了健康检查路径。

接着新建ConsulController

package com.shiwen.controller;

import com.shiwen.entity.CommonResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

/**
 * @author wangjie
 * @Title: ConsulController
 * @Description: consul测试类
 * @company: 西安石文软件有限公司
 * @date 2020/10/910:44
 */
@RestController
@RequestMapping("/consul")
public class ConsulController {

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

    @RequestMapping("/payment")
    public CommonResult getPayment(){
        return  new CommonResult(200,"consul"+serverPort, UUID.randomUUID().toString());
    }

}

最后,要开启服务注册与发行,需要在Spring Boot入口类上添加@EnableDiscoveryClient注解:

package com.shiwen;

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

/**
 * @author wangjie
 * @Title: ProviderConsulApplication8005
 * @Description: consul服务治理
 * @company: 西安石文软件有限公司
 * @date 2020/10/910:28
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderConsulApplication8005 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderConsulApplication8005.class,args);
    }
}

准备完毕后,打包项目,然后启动两个实例,端口号分别为8005和8006,启动后,再次访问consul管理界面:

服务提供者注册成功,接下来开始搭建服务消费者。

cloud-provider-consul-order80

pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<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>springcloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-consul-order80</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--swagger 整合swagger需要的依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <!--swagger ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>

        <!--SpringBoot热部署配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-api-conmmon</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <fork>true</fork> <!-- fork: 如果没有配置该项配置,devtools不会起作用的,即应用不会restear -->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

配置application.yml:

server:
  port: 80
spring:
  application:
    name: server-consumer
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        register-health-check: false
        service-name: ${spring.application.name}

同样的,需要开启服务注册与发现需要在入口类上添加@EnableDiscoveryClient注解。

接着创建ConsulController来消费cloud-provider-consul-payment8005提供的payment服务:

package com.shiwen.controller;

import com.shiwen.entity.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author wangjie
 * @Title: ConsulController
 * @Description: 调用
 * @company: 西安石文软件有限公司
 * @date 2020/10/911:57
 */
@RestController
@RequestMapping("/order")
public class ConsulController {

    private String sonsulUrl="http://server-provider-consul";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/info")
    public CommonResult getCommonInfor(){
       return restTemplate.getForObject(sonsulUrl+"/consul/payment",CommonResult.class);
    }
}

sonsulUrl的值为服务提供者在consul注册中心的实例名称,即server-provider-consul。通过DiscoveryClient我们可以获取到所有名称为server-provider-consul的服务实例信息。consul内置了Ribbon,所以我们还可以通过@LoadBalanced标注的RestTemplate来实现负载均衡服务调用打包部署项目,

访问:http://localhost/order/info

再次访问http://localhost/order/info

到此这篇关于springcloud组件consul服务治理的文章就介绍到这了,更多相关springcloud consul服务治理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud微服务架构实战之微服务治理功能的实现

    微服务治理 Spring Cloud 工具套件为微服务治理提供了全面的技术支持.这些治理工具主要包括服务的注册与发现.负载均衡管理.动态路由.服务降级和故障转移.链路跟踪.服务监控等.微服务治理的主要功能组件如下: 注册管理服务组件Eureka,提供服务注册和发现的功能. 负载均衡服务组件Ribbon,提供负载均衡调度管理的功能. 边缘代理服务组件Zuul,提供网关服务和动态路由的功能. 断路器组件Hystrix,提供容错机制.服务降级.故障转移等功能. 聚合服务事件流组件Turbine,可用来

  • SpringCloud与Consul集成实现负载均衡功能

    负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术.负载均衡将特定的业务(网络服务.网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性.负载均衡基本概念有:实服务.实服务组.虚服务.调度算法.持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡. 一.背景 SpringCloud微服务目前比较流行,其中大都在使用的服务注册与发现是Eureka,最近研究了Consul的集群搭建,现使用Consul实现服务的负载均衡.其主要拓扑结构

  • SpringCloud中的Consul详解

    目录 1. Consul 简介 2. 专业名词 3. Consul 的优势 4. 特性 5. Consul与Eureka的区别 6. Consul 安装 6.1 docker-compose安装 7. Quick Start 7.1 启动consul服务 7.2 创建客户端-provider 7.2.1 引入依赖坐标 7.2.2 配置application.yml 7.2.3 添加测试方法 7.3 创建客户端-comsumer 7.3.1 配置application.yml 7.3.2 添加支持

  • SpringCloud整合Consul的实现

    下载安装Consul 访问Consul 官网 下载 Consul 的最新版本,我这里是 consul_1.9.1. 这里以 Windows 为例,下载下来是一个 consul_1.9.1_windows_amd64.zip 的压缩包,解压是是一个 consul.exe 的执行文件. 启动Consul cd 到对应的目录下,使用 cmd 启动 Consul cd E:\迅雷下载\consul_1.9.1_windows_amd64 #cmd启动: consul agent -dev # -dev表

  • SpringCloud Eureka服务治理之服务注册服务发现

    目录 什么是Eureka Eureka核心概念服务注册和服务发现 服务注册 服务发现 Eureka实战 Eureka服务端单节点构建 Eureka服务端集群构建 Eureka客户端构建 什么是Eureka Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架

  • Springcloud服务注册consul客户端过程解析

    1.版本说明 springboot 2.2.5.RELEASE springcloud Hoxton.SR6 2.依赖 <!--引入consul client依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependen

  • 详解springcloud组件consul服务治理

    Consul是一款由HashiCorp公司开源的,用于服务治理的软件,Spring Cloud Consul对其进行了封装.Consul具有如下特点: 服务注册 - 自动注册和取消注册服务实例的网络位置 运行状况检查 - 检测服务实例何时启动并运行 分布式配置 - 确保所有服务实例使用相同的配置 Consul agent有两种运行模式:Server和Client.这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上 的应用服务无关. 以Server模式运行的

  • 详解SpringCloud使用Consul做注册中心

    简介: Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对. 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品. 一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 , Consul 提供了微服务中服务注册发现注册,微服务中的分布式配置中心,可以单独使用,也可

  • 详解SpringCloud服务认证(JWT)

     - JWT JWT(JSON Web Token), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景.JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密. - JWT与其它的区别 通常情况下,把API直接暴露出去是风险很大的,不说别的

  • 详解SpringCloud微服务之Rest

    目录 一.什么是RestTemplate? 二.四种请求方式 2.1 GET请求 2.2 POST请求 2.3 PUT请求 2.4 DELETE请求 一.什么是RestTemplate? RestTemplate 是一个HTTP客户端,在Spring Cloud的服务调用方使用它我们可以方便的调用HTTP接口,支持GET.POST.PUT.DELETE等方法. 二.四种请求方式 首先注入Bean对象 @Configuration public class MyConfig { @Bean pub

  • 详解prometheus监控golang服务实践记录

    一.prometheus基本原理介绍 prometheus是基于metric采样的监控,可以自定义监控指标,如:服务每秒请求数.请求失败数.请求执行时间等,每经过一个时间间隔,数据都会从运行的服务中流出,存储到一个时间序列数据库中,之后可通过PromQL语法查询. 主要特点: 多维数据模型,时间序列数据通过metric名以key.value的形式标识: 使用PromQL语法灵活地查询数据: 不需要依赖分布式存储,各服务器节点是独立自治的: 时间序列的收集,通过 HTTP 调用,基于pull 模型

  • 详解Angular组件之中间人模式

    一.中间人模式 该组件树中除了组件1以外,每个组件都有一个父组件可以扮演中间人的角色.顶级的中间人是组件1,它可以使组件2,组件3,组件6之间互相通讯.依次类推,组件2是组件4和组件5的中间人.组件3是组件7和组件8的中间人. 中间人负责从一个组件接收数据并将其传递给另一个组件. 二.例子 股票报价组件为例,假设交易员在监看着报价组件的价格,当股票价格达到某一个值的时候,交易员会点一个购买按钮,来购买股票.问题:报价组件并不知道应该如何下单来买股票,它只是用来监控股票价格的.所以报价组件在这时应

  • 详解SpringCloud新一代网关Gateway

    一.概述简介 1.1.简介 SpringCloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本.而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty. Spring Cloud Gat

  • 详解SpringCloud的负载均衡

    目录 一.什么是负载均衡 二.负载均衡的简单分类 三.为什么需要做负载均衡 四.springCloud如何开启负载均衡 五.IRule 1.RandomRule:表示随机策略,它将从服务清单中随机选择一个服务: 2.ClientConfigEnabledRoundRobinRule:ClientConfigEnabledRoundRobinRule并没有实现什么特殊的处理逻辑,但是他的子类可以实现一些高级策略, 当一些本身的策略无法实现某些需求的时候,它也可以做为父类帮助实现某些策略,一般情况下

  • Spring Cloud详解实现声明式微服务调用OpenFeign方法

    目录 OpenFeign介绍 项目实战 创建项目 启动项目验证 总结 OpenFeign介绍 一开始,我们使用原生的 DiscoveryClient 发现服务和使用RestTemplate进行服务间调用,然后我们自己手动开发了一个负载均衡组件,最后介绍了负载均衡组件Ribbon.每个章节调用服务的方式也有所不同,共同点则是都是基于RestTemplate 来实现的,想必大家都会觉得这样的调用方式有点麻烦,每次调用前都要写请求协议,服务名称,接口名称.组装参数.处理响应数据类型,这些都是一些重复的

  • 一文详解Golang中consul的基本使用

    目录 consul consul的安装和部署 docker安装 consul镜像的启动 启动一个tcp_health_check的服务注册 http版 服务发现 consul consul是一个开源服务注册和服务发现的中心,可以用于微服务的注册和服务之间的调用的发现,帮助上游服务找到下游服务的具体ip:port或者是domain,也可以使用dns的方式让consul帮你去做转发,具体介绍请看consul的官网,consul区分server-agent和client-agent,client-ag

随机推荐