Spring Cloud微服务注册中心Consul入门使用(上)

一、Consul安装使用

1.1 what’s the consul?

Consul是Go语言编写的一个分布式高可用的服务网格解决方案,提供包括服务发现、配置和分段功能在内的全功能控制平面。它的每个功能都可以单独使用,也可以用它来构建完整的服务网格。

为什么要用它呢?因为Eureka很早之前已经宣布不再维护了,但是还有很多替代Eureka的注册中心,例如Nacos、Zookeeper以及接下来要介绍的Consul。

Consul使用Go语言编写,通过HTTP的方式向外提供服务;支持多数据中心;一致性协议使用的是Raft。这些年来Consul一直在活跃更新中,社区活跃度上很可靠。

1.2 Consul的功能

服务发现:

调用的客户端可以通过DNS或HTTP找到要调用的服务

健康检查:

Consul提供了健康检查机制,从简单的服务端是否可以返回200的响应码到较为复杂的内存使用率是否低于90%

使用Key/value进行存储信息:

接入Consul的应用可以根据需要使用Key/Value进行存储信息。提供了易用的HTTP接口来满足用户的动态配置、特征标记、协调和leader选举等功能

多数据中心:

Consul原生就支持多数据中心。这样用户就不用自己来实现多数据中心

1.3 Consul和Consul UI的安装使用

Consul的安装很简单,因为是用Go语言写的,最后是编译完成是一个可执行的文件。支持Window、macOS、Linux等平台。在官网上选择下载的版本即可:https://developer.hashicorp.com/consul/downloads

下载完成后,解压缩,然后执行,例如下面以开发者模式启动。正常启动Consul集群需要至少启动三个Consul

consul agent -dev

$ ./consul agent -dev
==> Starting Consul agent…
Version: ‘1.15.2’
Build Date: ‘2023-03-30 17:51:19 +0000 UTC’
Node ID: ‘cd2c39c3-341c-6478-5daf-ab06807d30a8’
Node name: ‘DESKTOP-ILEN9BL’
Datacenter: ‘dc1’ (Segment: ‘’)
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Gossip Encryption: false
Auto-Encrypt-TLS: false
HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2

==> Log data will now stream in as it occurs:

2023-04-16T20:57:55.312+0800 [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.cd2c39c3-341c-6478-5daf-ab06807d30a8/server.dc1 from= to=
2023-04-16T20:57:55.370+0800 [INFO] agent.server.raft: initial configuration: index=1 servers=“[{Suffrage:Voter ID:cd2c39c3-341c-6478-5daf-ab06807d30a8 Address:127.0.0.1:8300}]”
2023-04-16T20:57:55.370+0800 [INFO] agent.server.raft: entering follower state: follower=“Node at 127.0.0.1:8300 [Follower]” leader-address= leader-id=
2023-04-16T20:57:55.371+0800 [INFO] agent.server.serf.wan: serf: EventMemberJoin: DESKTOP-ILEN9BL.dc1 127.0.0.1
2023-04-16T20:57:55.371+0800 [INFO] agent.server.serf.lan: serf: EventMemberJoin: DESKTOP-ILEN9BL 127.0.0.1
2023-04-16T20:57:55.371+0800 [INFO] agent.router: Initializing LAN area manager
2023-04-16T20:57:55.371+0800 [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.cd2c39c3-341c-6478-5daf-ab06807d30a8/server.dc1 from= to=dc1-127.0.0.1:8300

然后浏览器可以访问:http://localhost:8500/ui/dc1/services。进入Consul的web界面

consul-ui.png

二、Spring Cloud Consul入门使用

2.1 what’s the Spring Cloud Consul?

Spring Cloud是Spring Cloud社区通过Spring Boot自动配置,实现的一套连接Consul使用的服务发现客户端功能。只需要简单的注解便可接入Consul,构建分布式系统。

2.2 Consul在Spring Cloud生态的作用

  • 服务发现与注册,Spring Boot应用可以像Consul注册服务,通过Spring Cloud的服务发现标准DiscoveryClient(spring-cloud-common模块)来发现其他的服务。
  • 支持Ribbon,实现客户端负载均衡
  • 分布式配置中心,通过key/Value存储配置
  • 控制总线,通过Consul events实现总线

2.3 Spring Cloud Consul入门

2.3.1 创建服务提供者(cloud-registry-consul-provider)

引入依赖:

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

编写个测试接口:

@RestController
@RequestMapping("provider")
public class ProviderController {@Value("${server.port}")private String port;@Value("${spring.application.name}")private String appName;@GetMapping("info")public String info() {return "provider name: " + appName + ", port: " + port;}
}

启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class ConsulConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsulConsumerApplication.class, args);}
}

配置文件:

server:port: 8666
spring:application:name: cloud-registry-consul-providercloud:consul:host: 127.0.0.1port: 8500config:enabled: falsediscovery:heartbeat:enabled: true

2.3.2 创建消费者(cloud-registry-consul-consumer)

引入依赖:

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

创建feign客户端接口:

@FeignClient("cloud-registry-consul-provider")
public interface ConsulProviderFeignClient {@GetMapping(value = "provider/info")String getProviderInfo();
}

编写接口:

@RestController
@RequestMapping("consumer")
public class ConsumerController {@Autowiredprivate ConsulProviderFeignClient providerFeignClient;@GetMapping("getProviderInfo")public String getInfo() {return providerFeignClient.getProviderInfo();}
}

启动类:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsulConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsulConsumerApplication.class, args);}
}

配置文件:

server:port: 8080
spring:application:name: cloud-registry-consul-consumercloud:consul:host: 127.0.0.1port: 8500config:enabled: falsediscovery:heartbeat:enabled: true

2.3.3 启动测试

1、启动consul

2、启动服务提供者:cloud-registry-consul-provider

3、启动消费者:cloud-registry-consul-consumer

4、启动完成后,可以看到服务成功注册到Consul

consul-health.png

5、可在浏览器调用

http://localhost:8080/consumer/getProviderInfo

可看到响应:

provider name: cloud-registry-consul-provider, port: 8666

最后

可以关注我的微信公众号,有更多的技术干货文章
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2813254.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

3D工业相机及品牌集合

3D相机可以获取物理世界的空间信息&#xff0c;即立体三维的物理信息&#xff0c;不仅可以拍摄到场景的二维图像&#xff0c;而且能获取物体之间的位置关系&#xff0c;再经过进一步深化处理&#xff0c;还能完成三维建模等应用。 3D相机三种方案 1、结构光 通常采用特定波长…

数字孪生的技术开发平台

数字孪生的开发平台可以基于各种软件和硬件工具来实现&#xff0c;这些平台提供了丰富的功能和工具&#xff0c;帮助开发人员构建、部署和管理数字孪生系统&#xff0c;根据具体的需求和技术要求&#xff0c;开发人员可以选择合适的平台进行开发工作。以下列举了一些常见的数字…

拼多多商品详情数据,item_get-根据ID取拼多多商品详情

item_get-根据ID取商品详情 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥WeChat18305163218api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_sear…

2023年消费者心中的十大信赖品牌,好狄空气能热水器成功上榜

随着环保意识的增强和能源消耗的持续关注&#xff0c;空气能热水器以其高效节能、绿色环保的特性赢得了越来越多消费者的青睐。市场上琳琅满目的空气能热水器品牌让消费者在选择时既兴奋又困惑。究竟哪些品牌能在激烈的竞争中脱颖而出&#xff0c;成为消费者心目中的佼佼者呢&a…

RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信

🚀返回专栏总目录 文章目录 一、spi_transfer二、spi_message三、初始化沉淀、分享、成长,让自己和他人都能有所收获!😄 SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct sp…

【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路设计 + 全流程优化 + 手把手训练自己数据

YOLO v9 思路复现 全流程优化 手把手训练自己数据 提出背景&#xff1a;深层网络的 信息丢失、梯度流偏差YOLO v9 设计逻辑可编程梯度信息&#xff08;PGI&#xff09;&#xff1a;使用PGI改善训练过程广义高效层聚合网络&#xff08;GELAN&#xff09;&#xff1a;使用GELAN…

深度学习神经网络实战:多层感知机,手写数字识别

目的 利用tensorflow.js训练模型&#xff0c;搭建神经网络模型&#xff0c;完成手写数字识别 设计 简单三层神经网络 输入层 28*28个神经原&#xff0c;代表每一张手写数字图片的灰度隐藏层 100个神经原输出层 -10个神经原&#xff0c;分别代表10个数字 代码 // 导入 Ten…

CSS 的盒模型

CSS 的盒模型 在HTML里&#xff0c;每一个元素就相当于是一个矩形的 “盒子” &#xff0c;这个盒子由以下这几个部分构成&#xff1a;1.边框border&#xff0c;2.内容content&#xff0c;3.内边距padding&#xff0c;4.外边距margin 边框border 基础属性描述border-width粗…

【Python笔记-设计模式】中介者模式

一、说明 中介者模式是一种行为设计模式&#xff0c;减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互&#xff0c;迫使它们通过一个中介者对象进行合作。 (一) 解决问题 降低系统中对象之间的直接通信&#xff0c;将复杂的交互转化为通过中介者进行的间接交…

新的一年,如何优化企业库存管理?

随着社会的发展和经济的不断增长&#xff0c;库存管理成为了企业运营中非常重要的一环。库存作为企业的资产之一&#xff0c;直接影响着企业的盈利能力和竞争优势。因此&#xff0c;对企业库存进行科学的分析和管理&#xff0c;成为了确保企业持续稳定发展的必要手段之一。企业…

设计模式(十) - 工厂方式模式

前言 在此前的设计模式&#xff08;四&#xff09;简单工厂模式中我们介绍了简单工厂模式&#xff0c;在这篇文章中我们来介绍下工厂方法模式&#xff0c;它同样是创建型设计模式&#xff0c;而且又有些类似&#xff0c;文章的末尾会介绍他们之间的不同。 1.工厂方法模式简介 …

CentOS删除除了最近5个JAR程序外的所有指定Java程序

帮我写一个shell脚本&#xff0c;ps -eo pid,lstart,cmd --sort-start_time | grep "pgz-admin"查到的结果&#xff0c;返回的所有进程PID&#xff0c;第六个之上的&#xff0c;全部kill 当然&#xff0c;你可以创建一个简单的Shell脚本来完成这个任务。以下是一个例…

探索创造无限可能——Autodesk AutoCAD 2022(CAD 2022)系统要求

随着科技的不断进步和发展&#xff0c;计算机辅助设计&#xff08;CAD&#xff09;已经成为现代设计行业中不可或缺的一部分。在众多CAD软件中&#xff0c;Autodesk AutoCAD 2022&#xff08;CAD 2022&#xff09;无疑是最受欢迎和广泛应用的一款软件。作为一款全球领先的CAD软…

(十八)devops持续集成开发——使用docker安装部署jenkins服务

前言 本节内容介绍如何使用docker容器来部署安装jenkins流水线服务。关于docker容器的安装本节内容不做介绍。请读者提前安装。 正文 ①使用docker查找jenkins官方镜像 ② 拉取jenkins官方镜像jenkins/jenkins&#xff0c;选择一个最新稳定版本&#xff0c;避免一些插件不兼…

日更【系统架构设计师知识总结2】指令系统(结合真题)

【原创精华】结合老师的讲授、耗费三个小时的精华总结对正在备考的你一定有用&#xff01;&#xff01;自己一点点手打、总结的脑图&#xff0c;把散落在课本以及老师讲授的知识点合并汇总&#xff0c;反复提炼语言&#xff0c;形成知识框架。希望能给同样在学习的伙伴一点帮助…

如何理解介电常数与耗散因子

目录 电介质的极化过程 介电常数的定义 介电常数的物理意义 耗散因子的定义 耗散因子的物理意义 实际应用 结语 电介质的极化过程 电偶极子被定义为一对极性相反但相距很近的等量电荷,与每个偶极子相关联的一个矢量成为偶极矩,如果为每个电荷的带电量,为从负电荷到正电…

OpenHarmony开发之Stage模型卡片服务详解~

介绍 本示例展示了Stage模型卡片提供方的创建与使用。 用到了卡片扩展模块接口&#xff0c;ohos.app.form.FormExtensionAbility。 卡片信息和状态等相关类型和枚举接口&#xff0c;ohos.app.form.formInfo 。 卡片提供方相关接口的能力接口&#xff0c;ohos.app.form.form…

力扣● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

● 1049. 最后一块石头的重量 II 题目要把石头分成两堆&#xff0c;这两堆的重量差值最小。相撞之后剩下的石头重量就最小。其实就是要尽量把石头分为差不多重量的两堆&#xff0c;和昨天的● 416. 分割等和子集相似&#xff0c;这样就转换成了01背包问题。 和416题一样&…

【Git教程】(五)分支 —— 并行式开发,分支相关操作(创建、切换、删除)~

Git教程 分支 1️⃣ 并行式开发2️⃣ 修复旧版本中的 bug3️⃣ 分支4️⃣ 当前活跃分支5️⃣ 重置分支指针6️⃣ 删除分支7️⃣ 清理提交对象&#x1f33e; 总结 对于版本提交为什么不能依次进行&#xff0c;以便形成一条直线型的提交历史记录&#xff0c;我们认为有 以下两个…

unity37——巧妙运用URP管线基础shader/Lit材质,给头发做出还不错的发丝效果.(应急用,在没时间单独写shader的情况下)

上面两个都是用基础Lit材质调整出来的。不管是&#xff0c;高模&#xff0c;还是低模。虽然没有单的的hair shader那么多可以做效果的滑块去调整效果&#xff0c;但是贵在简单、省事、建模容易、而且还省面。 下面上干货&#xff1a; 1。正常我们游戏里的头发&#xff0c;按照…