【Hoxton.SR1版本】Spring Cloud Consul服务注册中心搭建

目录

一、简介

二、Consul安装步骤

三、将服务提供者注册到Consul

四、将服务消费者注册到Consul

五、总结


一、简介

前面介绍了通过Eureka搭建微服务注册中心,其实服务注册中心还有其他几种落地实现,如Zookeeper、Consul等,今天介绍如何搭建Consul服务注册中心。

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

能干嘛:

  • 服务发现,支持 HTTP 和 DNS 协议;
  • 健康监测,支持多种方式,HTTP、TCP、Docker、Shell脚本定制化;
  • KV键值对存储;
  • 多数据中心;
  • 可视化Web页面;
  • 跨平台,支持 Linux、Mac、Windows;

Consul 涉及的角色:

  • client:客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群;
  • server:服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个;

二、Consul安装步骤

使用Consul之前,需要先安装Consul,Consul官网下载地址如下:https://www.consul.io/downloads.html,可以根据需要选择下载对应的版本即可。

下载consul_1.7.1_windows_amd64.zip文件解压后,文件内只有一个consul.exe文件,如下图:

在此文件夹内打开cmd命令窗口,使用如下命令使用开发模式启动:

consul agent -dev 

 

启动成功后,如下图所示:

 我们可以访问Consul Web可视化界面,浏览器访问http://localhost:8500/ui/dc1/services,如下图:

三、将服务提供者注册到Consul

继续在之前的父工程上面新建module:【springcloud-provider-consul-payment8006】

【a】pom.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>springcloud2020</artifactId>
        <groupId>com.wsh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-provider-consul-payment8006</artifactId>

    <dependencies>
        <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <dependency>
            <groupId>com.wsh.springcloud</groupId>
            <artifactId>springcloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--SpringCloud consul-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合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>
        <!--日常通用jar包配置-->
        <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>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

【b】application.yml配置文件

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

【c】主启动类

package com.wsh.springcloud;

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

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

【d】测试controller

package com.wsh.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description Consul测试Controller
 * @Date 2020/8/2 21:20
 * @Author weishihuai
 * 说明:
 */
@RestController
public class PaymentController {
    @Value("${server.port}")
    private String port;

    @RequestMapping(value = "/payment/consul")
    public String paymentConsul() {
        return "spring cloud with consul: " + port;
    }

}

【e】测试结果

下面我们启动此微服务,然后我们观察Consul Web可视化管理界面,如下图所示:

可见,springcloud-provider-consul-payment8006微服务已经成功注册到Consul中。接着我们浏览器访问:http://localhost:8006/payment/consul,成功访问并且返回数据,由此说明我们成功实现了将服务注册进Consul中。

除了可以查看有哪些服务注册进去之外,我们还可以查看具体某个微服务的详细信息,具体如下图所示:

 

四、将服务消费者注册到Consul

新建一个module【springcloud-consumer-consul-order80】,如上所示,也是那些文件:maven依赖、配置文件、启动类等。

【a】pom.xml maven依赖

<?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>springcloud2020</artifactId>
        <groupId>com.wsh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-consumer-consul-order80</artifactId>

    <dependencies>
        <!--SpringCloud consul-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合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>
        <!--日常通用jar包配置-->
        <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>

【b】application.yml配置文件

#服务端口号
server:
  port: 80
spring:
  application:
    name: springcloud-consumer-consul-order
#consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

【c】主启动类

package com.wsh.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

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

    //注入负载均衡的RestTemplate
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

【d】测试Controller

package com.wsh.springcloud.controller;

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

import javax.annotation.Resource;

/**
 * @Description 测试Controller
 * @Date 2020/8/3 20:16
 * @Author weishihuai
 * 说明:
 */
@RestController
public class OrderController {
    //指定服务提供者的application-name,其实也是注册进Consul中的服务名称
    private static final String INVOKE_URL = "http://springcloud-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;
    }
}

【e】测试

下面我们启动此微服务,观察Consul可视化界面:

 

可见,【springcloud-consumer-consul-order80】也成功注册进Consul中,下面我们通过RestTemplate远程调用上一步骤建立的payment微服务,查看接口是否能调用成功,浏览器访问:http://localhost/consumer/payment/consul

如上图所示,可见成功实现了跨服务调用两个同时注册进Consul注册中心的微服务,说明我们的搭建过程是成功的。

五、总结

以上就是Consul服务注册中心搭建的详细过程,相关项目的代码我已经放在Gitee上,有需要的小伙伴可以去拉取进行学习:https://gitee.com/weixiaohuai/springcloud_Hoxton,由于笔者水平有限,如有不对之处,还请小伙伴们指正,相互学习,一起进步。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值