前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >04Consul服务注册与发现

04Consul服务注册与发现

作者头像
Remember_Ray
发布2020-10-29 11:16:46
3580
发布2020-10-29 11:16:46
举报
文章被收录于专栏:Ray学习笔记Ray学习笔记

Spring Cloud Consul 中文文档

安装并运行 Consul

以 Ubuntu 为例

https://learn.hashicorp.com/tutorials/consul/get-started-install

代码语言:javascript
复制
sudo apt-get update && sudo apt-get install consul

consul

# 查看Consul版本
consul veresion

# 启动Consul的三种方式 -dev | -server  | client
consul agent -dev      #以dev模式运行,这种模式启动一个单节点的Consul环境,它不适用于生产环境。该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
consul agent -server   #以server模式启动
consul agent           #默认是以client模式运行,client非常轻量级,它注册服务、运行healthchecks、转发query到servers。agent必须运行于集群上的每一个节点。

Consul默认是只能127.0.0.0 能访问

配置指定IP能够访问

代码语言:javascript
复制
consul agent -dev -client 10.128.223.231
 
# 发现果然可以使用http://10.128.223.231:8500/ui 访问了。

配置所有IP都能够访问

代码语言:javascript
复制
consul agent -dev -client 0.0.0.0

测试

Ubuntu 服务器上访问:http://127.0.0.1:8500

Windows 上访问 Ubuntu 服务器IP+端口:http://192.168.116.128:8500/

服务提供者 cloud-provider-consul-payment8006

pom

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloud_H_2020</artifactId>
        <groupId>com.ray</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>9-cloud-provider-consul-payment8006</artifactId>

    <dependencies>
        <dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
            <groupId>com.ray</groupId>
            <artifactId>1-cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <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>
        <!-- SpringCloud consul server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

yml

代码语言:javascript
复制
# consul 服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment

  cloud:
    consul:
      # consul 注册中心IP
      host: 192.168.116.128
      port: 8500
      discovery:
        # 对外暴露的名称
        service-name: ${spring.application.name}

main

代码语言:javascript
复制
package com.ray.springcloud;

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

/**
 * @Description:
 * @Author Administrator
 * @Date 2020/10/11 10:40
 * @Version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient  // 该注解用于向使用 consul 或者 zookeeper 作为注册中心时注册服务
public class PaymentMain8006 {

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

controller

代码语言:javascript
复制
package com.ray.springcloud.controller;

import cn.hutool.core.lang.UUID;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author Administrator
 * @Date 2020/10/11 10:41
 * @Version 1.0
 */
@Slf4j
@RestController
@RequestMapping(value = "/payment")
public class PaymentController {

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

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

测试

一、启动 Consul 和 8006 端口

代码语言:javascript
复制
consul agent -dev -client 0.0.0.0

二、查看 Consul 视图工具

三、测试接口

http://localhost:8006/payment/consul

四、解决上面的 Health Checks 红色错误问题

参考文章

打开心跳协议

代码语言:javascript
复制
# consul 服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment

  cloud:
    consul:
      # consul 注册中心IP
      host: 192.168.116.128
      port: 8500
      discovery:
        # 对外暴露的名称
        service-name: ${spring.application.name}
        # 打开心跳协议
        heartbeat:
          enabled: true

服务消费者 cloud-consumer-consul-order80

pom

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloud_H_2020</artifactId>
        <groupId>com.ray</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>10-cloud-consumer-consul-order80</artifactId>

    <dependencies>
        <dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
            <groupId>com.ray</groupId>
            <artifactId>1-cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <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>
        <!--SpringCloud consul-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

yml

代码语言:javascript
复制
# consul 消费端口号
server:
  port: 80
spring:
  application:
    name: cloud-consumer-order
  cloud:
    consul:
      # consul 注册中心IP
      host: 192.168.116.128
      port: 8500
      discovery:
        # 对外暴露的名称
        service-name: ${spring.application.name}
        # 打开心跳协议
        heartbeat:
          enabled: true

main

代码语言:javascript
复制
package com.ray.springcloud;

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

/**
 * @Description:
 * @Author Administrator
 * @Date 2020/10/11 11:30
 * @Version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient // 该注解用于向使用 consul 或者 zookeeper 作为注册中心时注册服务
public class OrderConsulMain80 {

    public static void main(String[] args) {
        SpringApplication.run(OrderConsulMain80.class, args);
    }
}

config

代码语言:javascript
复制
package com.ray.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @Description: 相当于封装了 HttpClient
 * @Author Ray
 * @Date 2020/10/07 11:40
 * @Version 1.0
 */
@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

controller

代码语言:javascript
复制
package com.ray.springcloud.controller;

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

import javax.annotation.Resource;

/**
 * @Description:
 * @Author Administrator
 * @Date 2020/10/11 11:32
 * @Version 1.0
 */
@RequestMapping(value = "/consumer")
@RestController
@Slf4j
public class OrderConsulController {

    // 与 consul 服务器上面的提供者名称一致
    public static final String INVOKE_URL = "http://consul-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/payment/consul")
    public String paymentInfo() {
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
        return result;
    }
}

测试

一、运行 Consul 和 启动 80、8006端口

二、测试接口

http://localhost/consumer/payment/consul

三、Consul 是临时节点

关闭端口 80、8006 后,查看 Consul 面板,发现立刻出现红色打叉,说明 Consul 是 CP(一致性、容错性)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-15|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装并运行 Consul
    • 测试
    • 服务提供者 cloud-provider-consul-payment8006
      • pom
        • yml
          • main
            • controller
              • 测试
              • 服务消费者 cloud-consumer-consul-order80
                • pom
                  • yml
                    • main
                      • config
                        • controller
                          • 测试
                          相关产品与服务
                          微服务引擎 TSE
                          微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档