服务注册中心-Consul

Consul官方文档

​ 官方文档:https://www.consul.io/docs/intro

​ 中文文档:https://www.springcloud.cc/spring-cloud-consul.html

Consul简介

​ Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。

​ 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

​ 它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议;支持跨数据中心的WAN集群;提供图形界面;跨平台,支持Linux、Mac、Windows。

Consul主要特点

Consul 的主要特点是:

  • 服务发现:Consul 的客户端可以注册一个服务,例如 apimysql,其他客户端可以使用 Consul 来发现给定服务的提供者。使用 DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。
  • 健康检查:Consul 客户端可以提供任意数量的健康检查,要么与给定的服务相关联(“网络服务器是否返回 200 OK”),要么与本地节点(“内存利用率是否低于 90%”)相关联。操作员可以使用此信息来监控集群健康状况,并且服务发现组件可以使用它来将流量路由到不健康的主机之外。
  • KV 存储:应用程序可以将 Consul 的分层键/值存储用于多种目的,包括动态配置、功能标记、协调、领导选举等。简单的 HTTP API 使其易于使用。
  • 安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。 意图 可用于定义允许哪些服务进行通信。可以通过实时更改意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。

Consul 旨在对 DevOps 社区和应用程序开发人员友好,使其非常适合现代、弹性的基础设施。

Consul下载

​ https://www.consul.io/downloads.html

安装并运行Consul

  1. 下载完成后只有一个consul.exe文件,使用开发模式启动 consul agent -dev。
  2. 通过http://localhost:8500地址访问Consul的首页。
  3. 结果页面
    image

Springcloud中Consul的使用

服务提供者

  • 新建Module支付服务cloud-providerconsul-payment8006模块

    image

    image

    image

  • POM文件

    <!--?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>cloud2020</artifactid>
            <groupid>com.atguigu.springcloud</groupid>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelversion>4.0.0</modelversion>
    
        <artifactid>cloud-providerconsul-payment8006</artifactid>
        <description>支付服务的提供者之注册中心consul</description>
    
        <dependencies>
            <!--SpringCloud consul-server-->
            <dependency>
                <groupid>org.springframework.cloud</groupid>
                <artifactid>spring-cloud-starter-consul-discovery</artifactid>
            </dependency>
            <dependency>
                <groupid>com.atguigu.springcloud</groupid>
                <artifactid>cloud-api-common</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>
            <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文件
    application.yml

    server:
      # consul服务端口
      port: 8006
    spring:
      application:
        name: cloud-provider-payment
      cloud:
        consul:
          # consul注册中心地址
          host: localhost
          port: 8500
          discovery:
            hostname: 127.0.0.1
            service-name: ${spring.application.name}
    
  • 主启动类

    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);
        }
    }
     
    
  • 业务类Controller

package com.atguigu.springcloud.controller;

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;

import java.util.UUID;


@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();
    }
}
 
 

  • 验证运行
    启动PaymentMain8006启动类,访问Consul首页http://localhost:8500查看是否加载到consul控制中心。

image

​ 访问网址http://localhost:8006/payment/consul 查看是否显示信息。

服务消费者

  • 新建Module消费服务cloud-consumerconsul-order80

    步骤同上

  • POM文件

    application.xml

    <!--?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>cloud2020</artifactid>
            <groupid>com.atguigu.springcloud</groupid>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelversion>4.0.0</modelversion>
    
        <artifactid>cloud-consumerconsul-payment80</artifactid>
        <description>服务消费者之注册中心consul</description>
    
        <dependencies>
            <!--SpringCloud consul-server-->
            <dependency>
                <groupid>org.springframework.cloud</groupid>
                <artifactid>spring-cloud-starter-consul-discovery</artifactid>
            </dependency>
            <dependency>
                <groupid>com.atguigu.springcloud</groupid>
                <artifactid>cloud-api-common</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>
            <!--热部署-->
            <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文件

    server:
      port: 80
    spring:
      application:
        name: cloud-consumer-order
      cloud:
        consul:
          # consul注册中心地址
          host: localhost
          port: 8500
          discovery:
            hostname: 127.0.0.1
            service-name: ${spring.application.name}
    
    
  • 主启动类

    package com.atguigu.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
     * @author zzyy
     * @date 2020/02/18 17:20
     **/
    @SpringBootApplication
    @EnableDiscoveryClient
    public class OrderConsulMain80 {
        public static void main(String[] args) {
            SpringApplication.run(OrderConsulMain80.class, args);
        }
    }
    
  • 配置bean

    package com.whpu.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;
    
    @Configuration
    public class ApplicationContextConfig {
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
     
    
  • Controller

    package com.whpu.springcloud.controller;
    
    import com.whpu.springcloud.entities.CommonResult;
    import com.whpu.springcloud.entities.Payment;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    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 PAYMENT_URL = "http://localhost:8006";
        public static final String INVOKE_URL = "http://cloud-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;
        }
    }
    
    
  • 验证测试

    访问 http://localhost/consumer/payment/consul

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值