Spring Cloud Consul服务注册与发现

简介: Spring Cloud Consul是HashiCorp( Vagrant的创建者)开发的一个服务发现与配置项目,与Docker容器可以无缝集成。Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用。

Spring Cloud ConsulHashiCorpVagrant的创建者)开发的一个服务发现与配置项目,与Docker容器可以无缝集成。Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用。用Go语言开发,基于 Mozilla Public License 2.0 的协议开源。

Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:

1.服务发现
Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务。
2.健康检查
Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%).这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机。
3.Key/Value存储
应用程序可用根据自己的需要使用Consul的层级的Key/Value存储
比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用。
4.多数据中心
Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

Consul服务端安装

由于Spring Cloud ConsulHashiCorp公司开发,并不是开发SpringPivotal团队,所以下载Consul官方的服务端
Consul官网地址:https://www.consul.io/
Consul服务端下载地址:https://www.consul.io/downloads.html

对应自己的操作系统选择下载
QQ截图20180617224540.png
进行环境变量配置

在系统变量Path下加上解压的根目录
例如解压的是E盘下consul文件夹就写E:\consul

QQ截图20180617225216.png

验证是否配置成功

cmd中输入consul

QQ截图20180618111240.png

出现以上信息就是配置成功了

启动服务端

windows系统在cmd下输入consul agent -dev看到以下界面就是启动成功,
如果启动不了可以在cmd进入到consul根目录再输入consul agent -dev

QQ截图20180617225535.png

需要关闭服务端在cmd中按Ctrl+C就好了
成功启动会Consul代理输出了一些日志信息。例如版本号,端口号(默认是8500)

在浏览器中输入http://localhost:8500/可以进入到consul服务注册中心
的界面(强烈推荐使用谷歌浏览器)

QQ截图20180617225937.png

SpringCloud与Consul客户端集成

引入Spring Cloud Consul服务发现依赖和web依赖(不然注册不了)

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

在启动类中加上@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudConsulApplication {

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

在配置文件中加入Spring Cloud Consul相关配置

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
  application:
    name: springcloud-consul
server:
  port: 9999

刷新下服务注册中心的页面

QQ截图20180617233523.png

可以发现服务是注册上去了,但是服务状态为critical,说明这个服务还是失败的

Consul规定了外部脚本退出码代表的语义:
正常passing
告警warning
失败critical

解决方法:

1.需要手动加一个GET方法的健康检测API

@RestController
public class HealthApi {
    @GetMapping("/health")
    public String health(){
        return "hello consul";
    }
}

然后在配置文件中加上spring.cloud.consul.discovery.health-check-path的路径

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        health-check-path: /health
  application:
    name: springcloud-consul
server:
  port: 9999

重新启动客户端

QQ截图20180618105626.png

可以看到我们注册的服务已经passing 通过了,说明服务注册成功
其实在cmd上也可以看到

QQ截图20180618105934.png

Service 'springcloud-consul' check中可以看到我们自定义的健康检测和返回结果
QQ截图20180618113359.png

Consul用于检查运行状况端点的间隔默认是10s,每过10秒检测一次
2.加入actuator依赖(推荐使用)

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

不需要改spring.cloud.consul.discovery.health-check-path,
默认的就行,默认是/actuator/health

QQ截图20180618112541.png

通过健康检测可以看到服务状态是UP,服务已经注册到Consul

目录
相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
13286 60
|
9月前
|
存储 Java 数据库
Spring Boot 注册登录系统:问题总结与优化实践
在Spring Boot开发中,注册登录模块常面临数据库设计、密码加密、权限配置及用户体验等问题。本文以便利店销售系统为例,详细解析四大类问题:数据库字段约束(如默认值缺失)、密码加密(明文存储风险)、Spring Security配置(路径权限不当)以及表单交互(数据丢失与提示不足)。通过优化数据库结构、引入BCrypt加密、完善安全配置和改进用户交互,提供了一套全面的解决方案,助力开发者构建更 robust 的系统。
317 0
|
6月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
652 0
|
10月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
7310 7
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
347 0
|
11月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
753 7
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
330 6
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
229 5