学习SpringCloud之服务注册与发现Consul

news/2024/11/30 2:40:27/

简介

  • SpringCloudConsulSpringCloudEureka一样是作用于微服务架构中的服务治理。
    由于Eureka已经停止维护,Consul是一个很好的替代品。

  • 除了服务治理以外,Consul还提供一个简易的键/值储存,这可以用于作为动态配置等等。

以下示例均基于SpringCloud的Greenwich.SR1版本,Consul版本为v1.4.4,且需要依赖到之前介绍SpringCloud相关的文章

基础依赖

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

ConsulServer

使用前需先安装、运行Consul的服务端,具体可以参考官网的安装教程。
简单说一下流程:

  1. 在下载页面下载自己环境适用的版本。
  2. 执行以下命令以开发环境启动Consul的服务端。
consul agent -dev -bind=127.0.0.1 -client=0.0.0.0

Consul的默认端口是8500,访问http://localhost:8500可以看到Consul的控制面板。

  • Services:显示所有服务的信息、状态。
  • Nodes:显示所有的节点。
  • Key/Value:显示所有的键值对。
    • http://127.0.0.1:8500/v1/kv/?recurse列出所有的键值对。
    • http://127.0.0.1:8500/v1/kv/{key}获取单个键的值。
  • ACL:访问控制列表配置。
  • Intentions:服务连接配置。

ConsulClient

配置文件application.yml中,指定ConsulServer的地址。

server:port: 6610spring:application:name: consul-clientcloud:consul:host: localhostport: 8500

这里官方文档中提到需要注意一点。

If you use Spring Cloud Consul Config, the above values will need to be placed in bootstrap.yml instead of application.yml.

像Eureka一样,启动一个简单的SpringBoot应用,并作一个简单的controller去测试。

@SpringBootApplication
class ConsulClientStarterfun main(args: Array<String>) {runApplication<ConsulClientStarter>(*args)
}
@RestController
class DemoController {@Value("\${server.port}")var port: String? = null@RequestMapping("/hello")fun hello(@RequestParam("name") name: String): String {return "response from $port: hello $name."}}

启动两个端口分别为66106611ConsulClient,再新建一个模块,以Ribbon的方式去调用服务,测试一下服务发现。

server:port: 6612spring:application:name: consul-ribbon-clientcloud:consul:host: localhostport: 8500
@SpringBootApplication
@EnableDiscoveryClient
class ConsulRibbonClientStarterfun main(args: Array<String>) {runApplication<ConsulRibbonClientStarter>(*args)
}
@RestController
class DemoController {@Autowiredlateinit var restTemplate: RestTemplate@RequestMapping("/hello")fun hello(@RequestParam("name") name: String): String? {return restTemplate.getForObject("http://CONSUL-CLIENT/hello?name=$name", String::class.java)}}

启动好各个服务后,再看看Consul的控制面板中的Services可以看到多了两个服务。
其中ConsulClient有两个实例,ConsulRibbonClient有一个实例。
每个服务的信息中,有一个项为Health Checks健康检查。
这个健康检查是Consul定时访问一个各个服务提供的检查接口。
例如其中一个ConsulClient提供的接口为http://localhost:6610/actuator/health,返回{"status":"UP"}
每个服务也可以单独指定健康检查的接口。

多次访问http://localhost:6612/hello?name=czb1n,页面轮流返回response from 6610: hello czb1n.response from 6611: hello czb1n.

其他

示例代码地址: https://github.com/czb1n/learn-spring-cloud-with-kotlin


http://www.ppmy.cn/news/636563.html

相关文章

Windows XP系统文件一一诠释(1)[最新整理](转BY wang6610----BBS.WUYOU.COM)

Windows XP系统文件一一诠释(1)[最新整理](转BY wang6610----BBS.WUYOU.COM) 2011年07月08日 C:\WINDOWS\system32: 12520437.cpx ...代码页转换表. 12520850.cpx ... 代码页转换表. 6to4svc.dll ....在 IP4网络上提供IPv6 连接的服务 aaaamon.dll ....Aaaa Monitor Dll acled…

2018世界杯原画质直播观看方式

效果图 准备工作 1.下载PotPlayer播放器&#xff08;自行百度下载&#xff09;2 .新建记事本并打开3.将如下代码复制粘贴到记事本里 DAUMPLAYLIST playnamertsp://124.224.238.165/PLTV/88888888/224/3221225890/10000100000000060000000000725782_0.smil topindex0 1*file*rts…

Liunx初始化yum源报错,更换为163镜像源

错误信息&#xff1a;应该是链接镜像源出错 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#7 - "Failed to connect to 2600:1f16:c1:5e01:4180:6610:5482:c1c0: 网络不可达&quo…

2019年杭电多校第三场 1008题Game(HDU6610+带修改莫队+Nim博弈)

题目链接 传送门 题意 给你\(n\)堆石子&#xff0c;每堆有\(a_i\)堆石子&#xff0c;\(q\)次操作&#xff1a; 在\([L,R]\)内有多少个子区间使得\(Alice\)(先手)在\(Nim\)博弈中获胜&#xff1b;交换\(a_{pos},a_{pos1}\)的值。 思路 这题和cf617E差不多。 首先我们知道以下性质…

西门子hid6610_s215楼道交换机配置文档

1。登陆方法&#xff1a; telnet: 192.168.1.1/24 account:admin, password: 没有密码。 switch> en 2。配置管理地址&#xff1a; switch# config (配置好的地址每个vlan都能访问) switch(config)#ip address 222.184.66.110 255.255.255.0 222.184.66.1 switch(con…

6610: Restoring Road Network----反思

6610: Restoring Road Network 时间限制: 1 Sec 内存限制: 128 MB 提交: 908 解决: 189 [提交] [状态] [讨论版] [命题人:admin] 题目描述 In Takahashi Kingdom, which once existed, there are N cities, and some pairs of cities are connected bidirectionally by ro…

HDU - 6610 Game(带修莫队)

题目链接&#xff1a;点击查看 题目大意&#xff1a;给出一个长度为 n 的序列 a&#xff0c;sum 为数列 a 的前缀异或和&#xff0c;再给出 m 次操作&#xff0c;每次操作分为两种类型&#xff1a; 1 l r&#xff1a;询问 sum 在区间 [ l , r ] 内有多少对不重复的数2 pos&am…

Game HDU - 6610(带修莫队)

莫队算法是离线算法&#xff0c;不支持修改&#xff0c;强制在线需要另寻他法。的确&#xff0c;遇到强制在线的题目莫队基本上萎了&#xff0c;但是对于某些允许离线的带修改区间查询来说&#xff0c;莫队还是能大展拳脚的。 讲解&#xff1a;https://www.cnblogs.com/WAMonst…