栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringCloud实战---第十一篇:使用Consul服务注册中心

SpringCloud实战---第十一篇:使用Consul服务注册中心

前言 说起来容易做起来难,一步一步都干完!!! 学习一定要自己动手搞一搞,不能只眼会。 学习笔记是跟着尚硅谷的视频学的:https://www.bilibili.com/video/BV18E411x7eT?p=1 场景大纲

我们以这样一个场景来学习、构建我们的微服务,可以看到,使用Consule做注册中心也是只需要改变注册中心的选型即可。


关于Consul
  • 是一套开源的分布式服务发现和配置管理系统
  • 用Go语言开发的
  • consul自带web图形化界面
  • consul官网 https://www.consul.io/
  • consul入门中文网址: https://www.springcloud.cc/spring-cloud-consul.html
  • 如果不使用nacos,consul将是Eureka的最佳替换方案
  • consul安装十分简单,傻瓜式安装
安装 1. 下载安装包

从官网下载安装包,我们学习用的,下个Windows x 64的即可

下载的慢,抽个烟,发会呆。。。。。。
官网下载太慢,学习时下载我百度网盘上的吧。。。

链接:https://pan.baidu.com/s/1xbe2JcvQEtko7Eb4MUXnBQ 
提取码:5ixl
2. 官网安装说明(动画片,很简单,需要自己看): https://learn.hashicorp.com/consul/getting-started/install.html 3. 启动

下载完成后解压,在解压目录上输入cmd,回车进入小黑窗口

执行命令,以开发模式启动

consul agent -dev
4. 访问localhost:8500,可以看到consul注册中心的web页面

5. 关闭Consul关掉cmd窗口即可 服务提供者模块cloud-providerconsul-payment8006 1. 创建子模块
cloud-providerconsul-payment8006
2. 添加POM依赖


    
        cloud2021
        com.atguigu.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-providerconsul-payment8006

    
        
        
            com.atguigu.springcloud
            cloud-api-commons
            ${project.version}
        
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            cn.hutool
            hutool-all
            RELEASE
            test
        
        
            cn.hutool
            hutool-all
            RELEASE
            test
        
    


3. 添加applicaiton.yml
###consul服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment
####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

4. 编写启动类
package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8006.class,args);
    }
}

5. 编写Controller
package com.atguigu.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@Slf4j
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/consul")
    public String paymentConsul(){
        return "consul service port:"+serverPort;
    }

}

6. 验证测试

启动8006

查看consul页面,服务已经注册进来

可以一步步点击consul-provider-payment,查看详细信息


服务消费者模块cloud-custonconsul-order80

1. 创建模块
cloud-custonconsul-order80
2. 添加POM依赖


    
        cloud2021
        com.atguigu.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-custonconsul-order80

    
        
        
            com.atguigu.springcloud
            cloud-api-commons
            ${project.version}
        
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            cn.hutool
            hutool-all
            RELEASE
            test
        
        
            cn.hutool
            hutool-all
            RELEASE
            test
        
    



3. 添加applicstion.yml
###consul服务端口号
server:
  port: 80

spring:
  application:
    name: consul-customer-payment
####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}
4. 添加启动类
package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsulMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderConsulMain80.class, args);
    }
}
5. 将zk80工程的config和controller搞过来

注意:这里controller调用的是另一个微服务cloud-provider-payment的接口





多自己操作,提高下搞代码的速度,实在懒得不行直接粘贴下面的吧就~~

package com.atguigu.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;


@RestController
@Slf4j
public class OrderConsulController
{
    public static final String INVOKE_URL = "http://consul-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/consul")
    public String paymentInfo()
    {
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul",String.class);
        return result;
    }
}
6. 启动测试

先启动8006,再启动consul80
访问localhost:8500
两个服务都注册上来了
使用80调用8006微服务

http://localhost/consumer/payment/consul

完美~~~


Eureka、Zookeeper、Consul的对比 之前几篇提到的CAP介绍

C:Consistency(强一致性)
A: Availability(可用性)
P: Partition tolerance(分区容错性)
CAP理论关注粒度是数据(我们这里就是微服务信息),而不是整体系统设计的策略

AP(Eureka): AP架构当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。结论:违背了一致性C的要求,只满足可用性和分区容错,即AP(保障健康的服务,允许心跳停止的服务继续存在)。
CP(Zookeeper/Consul): CP架构当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性结论:违背了可用性A的要求,只满足一致性和分区容错,即CP (保障服务一致,发现心跳停止的服务立即干掉)。
这里的存在和干掉,操作的都是注册中心的注册表(zk下是文件形式存储的,Eureka和Consul下是KV形式存储的)。

总结
  • consul官网 https://www.consul.io/
  • consul开发模式启动命令consul agent -dev
  • consul的web页面端口8500
  • 如果没有nacos,consul会是替代Eureka的最优选择
  • consul和zookeeper做注册中心一样,也是CP
  • CPA是软件架构的三大诉求,不能同时满足(是自相矛盾的),只能根据场景牺牲某一方保障另外的两个。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号