SpringCloud从入门到精通(三)

Consul 概述

Consul 是由 HashiCorp 基于 Go 语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务
用于实现分布式系统的服务发现与配置。
使用起来也较 为简单。具有天然可移植性 ( 支持 Linux windows Mac OS X) ;安装包仅包含一个可执行文件,方便部署 。
官网地址: https://www.consul.io
启动 consul 软件。
SpringCloud从入门到精通(三)_第1张图片

 

dev 模式:不会持久化数据
启动成功
SpringCloud从入门到精通(三)_第2张图片

控制台
SpringCloud从入门到精通(三)_第3张图片

 

Consul 快速入门

SpringCloud从入门到精通(三)_第4张图片

 

1. 搭建 Provider Consumer 服务。
2. 使用 RestTemplate 完成远程调用。
3. Provider 服务注册到 Consul 中。
4. Consumer 服务通过从 Consul 中抓取 Provider 地址完成远程调用

Provider pom.xml

    
    
        org.springframework.cloud
        spring-cloud-starter-consul-discovery
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
application.yml
server:
  port: 8000
spring:
  cloud:
    consul:
      host: localhost # consul 服务端的 ip
      port: 8500 # consul 服务端的端口 默认8500
      discovery:
        service-name: ${spring.application.name} # 当前应用注册到consul的名称
        prefer-ip-address: true # 注册ip
  application:
    name: consul-provider # 应用名称
consumer pom.xml

  
  
    org.springframework.cloud
    spring-cloud-starter-consul-discovery
  
  
    org.springframework.boot
    spring-boot-starter-web
  
  
    org.springframework.boot
    spring-boot-starter-test
    test
  
  
    org.springframework.boot
    spring-boot-starter-actuator
  
application.yml
server:
  port: 9000
spring:
  cloud:
    consul:
      host: localhost # consul 服务端的 ip
      port: 8500 # consul 服务端的端口 默认8500
      discovery:
        service-name: ${spring.application.name} # 当前应用注册到consul的名称
        prefer-ip-address: true # 注册ip
  application:
    name: consul-consumer # 应用名称
OrderController
/**
* 服务的调用方
*/
@RestController
@RequestMapping("/order")
public class OrderController {
  @Autowired
  private RestTemplate restTemplate;

  @Autowired
  private DiscoveryClient discoveryClient;
  @GetMapping("/goods/{id}")
  public Goods findGoodsById(@PathVariable("id") int id){
    //演示discoveryClient 使用
    List instances = discoveryClient.getInstances("consul-PROVIDER");
    //判断集合是否有数据
    if(instances == null || instances.size() == 0){
      //集合没有数据
     return null;
    }
    ServiceInstance instance = instances.get(0);
    String host = instance.getHost();//获取ip
    int port = instance.getPort();//获取端口
    System.out.println(host);
    System.out.println(port);
    String url = "http://"+host+":"+port+"/goods/findOne/"+id;
    // 3. 调用方法
    Goods goods = restTemplate.getForObject(url, Goods.class);
    return goods;
  }
}

SpringCloud从入门到精通(三)_第5张图片

你可能感兴趣的:(SpringCloud,spring,cloud,分布式,spring)