服务注册与发现——Consul

  • 一、Consul简介
  • 1、官网
  • https://www.consul.io/docs/intro
  • 2、什么是consul
  • 3、consul的特点
  • 二、安装与运行
  • 三、服务提供者注册到Consul服务注册中心
  • 1、pom
  • 2、yaml配置文件
  • 3、验证
  • 四、服务消费者注册到Consul服务注册中心
  • 1、yaml配置文件
  • 2、config配置类:使当前微服务能够使用其他微服务
  • 3、Controller
  • 4、验证


一、Consul简介

1、官网

https://www.consul.io/docs/intro

2、什么是consul

Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。提供了微服务系统中的 服务治理配置中心控制总线 等功能。

Consul需要一个数据平面,并支持代理和本机集成模型。

Consul附带了一个简单的内置代理,因此一切都可以直接使用,还支持Envoy等第三方代理集成。

3、consul的特点

  • 服务发现Service Discovery:Consul的客户端可以注册服务,例如 apimysql,其他客户端可以使用Consul来发现给定服务的提供者。提供HTTP和DNS两种发现方式。
  • 健康监测Health Checking:客户端可以查询监视群集的运行状况。
  • KV存储:Key、Value的存储方式
  • 多数据中心:满足一致性、分许容错性的系统,通常性能不是特别高。满足CAP中的CP
  • 具有可视化Web界面

二、安装与运行

在官网下载windows64版本后,双击解压后得到consul.exe

consul 和 prometheus 服务发现 operator consul服务注册与发现_java

在当前目录下进入cmd中,可以查看和使用consul

consul 和 prometheus 服务发现 operator consul服务注册与发现_java_02

打开本地8500端口查看集群状态

consul 和 prometheus 服务发现 operator consul服务注册与发现_微服务_03

默认绑定的端口

consul 和 prometheus 服务发现 operator consul服务注册与发现_TCP_04

修改默认端口:打开consul.exe的根目录 ,在次目录下创建一个 basic.json 的文本,以及一个data命名的空文件夹,文本内容如下:

{
  "ports": {
    "server": 9300,
    "serf_lan": 9301,
    "serf_wan": 9302,
    "http": 9500,
    "dns": 9600
  }
}

Consul最多需要6个不同的端口才能正常工作,有些使用TCP,UDP或两种协议。下面我们记录每个端口的要求。

端口号

协议

功能

RPC:8300

TCP

agent server 使用的,用于处理其他agent发来的请求

Serf LAN:8301

TCP 、UDP

agent使用此端口处理LAN中的gossip

Serf WAN:8302

TCP 、UDP

agent server使用此端口处理WAN中的与其他server的gossip

8400

TCP

agent用于处理从CLI来的RPC请求

HTTP API:8500

TCP

agent用于处理HTTP API

DNS:8600

TCP 、UDP

agent用于处理 DNS 查询

三、服务提供者注册到Consul服务注册中心

1、pom

<!--SpringCloud consul-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2、yaml配置文件

server:
  port: 8006

spring:
  application:
    name: consul-Order
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        hostname: 127.0.0.1
        service-name: ${spring.application.name}

3、验证

先运行consul,再运行项目,可以看到已经注册到consul中了

consul 和 prometheus 服务发现 operator consul服务注册与发现_微服务_05

四、服务消费者注册到Consul服务注册中心

1、yaml配置文件

server:
  port: 80

spring:
  application:
    name: consul-payment
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        hostname: 127.0.0.1
        service-name: ${spring.application.name}

2、config配置类:使当前微服务能够使用其他微服务

package org.jun.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;

/**
 * @author junfeng.lin
 * @date 2021/2/9 16:43
 */
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced//使用该注解赋予RestTemplate负载均衡的能力
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

3、Controller

package org.jun.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author junfeng.lin
 * @date 2021/2/9 16:36
 */
@RestController
public class myController {
    //要访问的服务提供方的微服务名称
    public static final String INVOKE_URL = "http://consul-Order";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/showConsumer")
    public String paymentInfo() {
        String re = restTemplate.getForObject(INVOKE_URL + "/showOrder", String.class);
        return re;
    }
}

4、验证

先运行consul,再运行项目,可以看到已经注册到consul中了

consul 和 prometheus 服务发现 operator consul服务注册与发现_后端_06

访问给定的url,实际上是访问其他服务提供者的服务

consul 和 prometheus 服务发现 operator consul服务注册与发现_java_07