springcloud之consul

springcloud学习笔记,第三章,consul分布式服务发现和配置管理系统。

  • consul的安装和之前一样,放在linux虚拟机上。同样写一个服务提供者和消费者,查看是否注册进consul,再测试下服务调用,结束。
  • consul版本:consul_1.8.3_linux_amd64.zip

consul简介:

  • 之前的博客已经介绍了两种微服务发现与注册的框架,一个是eureka(翻译:int. 我发现了,我找到了),一个是zookeeper(直译为动物园管理员),以及最后的这个consul(翻译:n. 领事;(古罗马的)两执政官之一)。他们三个取名或多或少都有发现与管理的意思,很有趣。

    不过在我写这篇博客的时候,无意中在OSCHINA看到了关于consul的这句话:

  • 或许有其他的原因,他们也给了个合理的解释。但是咋们还是得继续努力。

consul的安装:

  • 因为需要unzip命令,结果yum下载不了。这里踩了很多坑,网卡配置需要严谨。我在虚拟机创建时网卡设置为的是桥接模式。之前由于未和物理主机设置同一网段,导致ping不同外网。但是可以ping通物理主机,物理主机也可以ping通它,好奇怪。

  • 安装consul:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    unzip  consul_1.8.3_linux_amd64.zip

    #解压之后只有一个consul文件,将该文件复制到bin目录下
    cp -rp consul /bin/

    #执行一下
    consul

    我就直接去看UI 界面
    [root@localhost consul]# consul agent -dev -ui
    游览器本地:http://ip地址:8500/

    我在虚拟机中为了其他机器能访问 加参数-client
    [root@localhost consul]# consul agent -dev -ui -client 0.0.0.0

服务提供者注册进consul:

  1. 建module,cloud-provider-consul-payment8006

  2. pom:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!--consul-->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <!--web开发依赖-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  3. yml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    server:
    port: 8006

    spring:
    application:
    name: consul-provider-payment
    cloud:
    consul:
    host: 192.168.0.11
    port: 8500
    discovery:
    service-name: ${spring.application.name}
  4. 主启动类:

    无特别。

  5. controller,随便写一个:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @RestController
    @Slf4j
    public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping(value = "/payment/consul")
    public String paymentConsul(){
    return "springcloud with consul:"+serverPort+"\t"+ UUID.randomUUID().toString();
    }

    }
  6. 启动测试:

  7. 这时,consul的ui界面这里出现了一个错误(大致意思我理解为服务检查错误):

    百度解决方案时,说是主机映射的问题。

    修改主机映射文件hosts之后,完美解决服务未发现问题。

服务消费者注册进consul:

  1. 建model,cloud-consumer-consul-order80

  2. pom

  3. yml

  4. 主启动类

  5. RestTemplate和之前都是一样的

  6. controller

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @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;
    }
    }

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信