Spring Cloud 框架 -- Consul 的安装以及 Consul 的注册与消费
Consul 介绍
在 Spring Cloud 中,大部分组件都有备选方案,例如注册中心,除了常见的 Eureka 之外,还有 zookeeper 和 Consul。
Consul 是 HashiCorp 公司推出来的开源产品。主要提供了:
- 服务发现
- 服务隔离
- 服务配置等功能
相比 Eureka 和zookeeper,Consul 配置更加一站式,因为它内置了很多微服务常见的需求:服务发现与注册、分布式一致性协议实现、健康检查、键值对存储、多数据中心等,我们不再需要借助第三方组件来实现这些功能。
1、在官网下载 Consul
Consul 的下载网址:https://www.consul.io/downloads
下载之后,就是一个 Consul 的 ZIP 压缩文件:
再解压,如下图:
2、将 Consul 目录添加至系统路径 Path
我解压后的 Consul 位于 D:\Java\Consul\consul 下,然后将其添加进环境变量中:
3、启动 Consul
打开命令提示符,输入命令:
consul agent -dev
回车,如下图:
打开浏览器,输入 localhost:8500 ,即可打开 Consul 的管理页面:
Consul 的注册与消费
Consul 的单节点注册
首先我们来创建一个服务提供者,就是一个普通的 Spring Boot 项目,添加如下依赖:
项目创建好后,添加如下配置:
# 给服务起个别名
spring.application.name=consul-provider
server.port=2000
# Consul 相关配置
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consul-provider
在项目启动类上开启服务发现的功能:
@SpringBootApplication
@EnableDiscoveryClient // 开启服务发现的功能
public class ConsulProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ConsulProviderApplication.class, args);
}
}
最后添加一个测试接口:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
启动项目,访问 Consul 后台管理页面 http://localhost:8500
,看到如下信息,表示 Consul 已经注册成功了:
Consul 集群注册
为了区分集群中是哪一个 provider 提供的服务,我们修改一下 Consul 中的接口:
@RestController
public class HelloController {
@Value("${server.port}")
Integer port;
@GetMapping("/hello")
public String hello(){
return "hello>>"+ port;
}
}
修改完成后,对项目进行打包。打包成功后,命令行执行如下命令,启动两个 provider 实例:
java -jar consul-provider-0.0.1-SNAPSHOT.jar --server.port=2001
java -jar consul-provider-0.0.1-SNAPSHOT.jar --server.port=2000
启动成功后,再去 Consul 的后台管理页面,如下图:
这样就实现了 Consul 的集群注册。
Consul 的消费
首先创建一个消费实例,创建方式和 consul-provider 一致.
创建完后,添加如下配置:
spring.application.name=consul-consumer
server.port=2002
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consul-consumer
开启服务发现, 并添加 RestTemplate:
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsulConsumerApplication.class, args);
}
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
}
最会,提供一个服务调用的方法:
@RestController
public class HelloController {
@Autowired
LoadBalancerClient loadBalancerClient;
@Autowired
RestTemplate restTemplate;
@GetMapping("/hello")
public String hello(){
ServiceInstance choose = loadBalancerClient.choose("consul-provider");
System.out.println("服务地址:"+ choose.getUri());
System.out.println("服务名称:"+ choose.getServiceId());
String s = restTemplate.getForObject(choose.getUri() + "/hello", String.class);
System.out.println(s);
return "hello";
}
}
启动项目,打开 localhost:8500
,即可看到 consul-consumer 已经注册到 Consul 中了:
浏览器输入 http://localhost:2002/hello
, 如下图:
成功实现 Conusul 的服务注册与消费。
每天学习一点点,每天进步一点点。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法