蚂蚁课堂: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搭建的主要内容,如果未能解决你的问题,请参考以下文章

蚂蚁课堂:class工具类

蚂蚁课堂(每特学院)-2期

蚂蚁课堂:外网映射

蚂蚁课堂:阿波罗

渣渣菜鸡的蚂蚁金服面试经历

速来围观老田的蚂蚁金服Java面试经历!