蚂蚁课堂:Consul搭建
Posted xjatj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蚂蚁课堂:Consul搭建相关的知识,希望对你有一定的参考价值。
使用Consul来替换Eureka
Consul简介
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。
它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows
Consul 整合SpringCloud 学习网站:https://springcloud.cc/spring-cloud-consul.html
Consul下载地址https://www.consul.io/downloads.html
Consul环境搭建
官方下载地址下载window版,解压得到一个可执行文件。
设置环境变量,让我们直接在cmd里可直接使用consul使命。在path后面添加consul所在目录例如D:softconsul_1.1.0_windows_amd64
启动consul命
consul agent -dev -ui -node=cy
-dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问。
测试访问地址:http://localhost:8500
Consul客户端
Maven依赖信息
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <!-- 管理依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- SpringBoot整合Web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SpringCloud consul-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> </dependencies> <!-- 注意: 这里必须要添加, 否者各种依赖有问题 --> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> |
客户端配置文件
###eureka 服务端口号 server: port: 8502 spring: application: name: consul-order ####consul注册中心地址 cloud: consul: host: localhost port: 8500 discovery: hostname: 192.168.18.220 |
DiscoveryClient用法
discoveryClient接口 可以获取注册中心上的实例信息。
@EnableDiscoveryClient 开启其他注册中心 比如consul、zookeeper
@SpringBootApplication @EnableDiscoveryClient publicclass AppMember { publicstaticvoid main(String[] args) { SpringApplication.run(AppMember.class, args); } }
|
获取注册中心上信息
@RequestMapping("/getServiceUrl") public List<String> getServiceUrl() { List<ServiceInstance> list = discoveryClient.getInstances("zk-member"); List<String> services = new ArrayList<>(); for (ServiceInstance serviceInstance : list) { if (serviceInstance != null) { services.add(serviceInstance.getUri().toString()); } } return services; }
|
@EnableDiscoveryClient 与@EnableEurekaClient区别
1,@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现; 适合于consul、zookeeper注册中心
2,@EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;
@RestController public class OrderApiController {
@Autowired private RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient;
// 订单服务调用会员服务 @RequestMapping("/getOrder") public String getOrder() { // 有两种方式,一种是采用服务别名方式调用,另一种是直接调用 使用别名去注册中心上获取对应的服务调用地址 String serviceUrl = getServiceUrl("consul-member") + "/getMember"; String result = restTemplate.getForObject(serviceUrl, String.class); System.out.println("订单服务调用会员服务result:" + result); return result; }
public String getServiceUrl(String name) { List<ServiceInstance> list = discoveryClient.getInstances(name); if (list != null && !list.isEmpty()) { return list.get(0).getUri().toString(); } return null; } } |
以上是关于蚂蚁课堂:Consul搭建的主要内容,如果未能解决你的问题,请参考以下文章