目录

一、简介

二、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: localhostport: 8500discovery:#hostname: 127.0.0.1service-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: localhostport: 8500discovery:#hostname: 127.0.0.1service-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@LoadBalancedpublic 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";@Resourceprivate 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,由于笔者水平有限,如有不对之处,还请小伙伴们指正,相互学习,一起进步。

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

  1. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  2. eureka集群只注册一个_一、Spring Cloud Eureka服务注册中心

    Sping boot Eureka是服务中心,管理各种服务功能包括服务的注册.发现.熔断.负载.降级等.Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装. 在du ...

  3. spring cloud微服务注册中心EurekaServer

    注册中心EurekaServer pom文件: <?xml version="1.0" encoding="UTF-8"?> <project ...

  4. Spring cloud实现服务注册及发现

    为什么80%的码农都做不了架构师?>>>    服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访 ...

  5. Spring Cloud之服务注册与发现机制

    一.复杂与简单并存 1.背景: 到底是复杂好还是简单好,这是一个没有答案的问题,也是一个哲学问题.见仁见智啦.事物整体肯定是向复杂化方向发展,但是向人们呈现时应尽量简单化.用一句话来说就是:功能复杂化 ...

  6. consul服务注册中心

    一.consul 服务注册中心 官网地址:https://www.consul.io/ Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现.服务隔离.服务配置,这些 ...

  7. Consul 服务注册中心

    Consul 服务注册中心 Consul 是什么? Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发. 提供了微服务系统中的服务治理.配置中心.控 ...

  8. spring cloud集成nacos注册中心、配置中心、服务远程调用

    简介 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构建.交付和 ...

  9. 【Spring Cloud Alibaba】Spring Cloud Alibaba 服务注册与发现实践

    1. 简介 服务注册与发现是微服务架构体系中最关键的组件之一.如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容.Nacos Disc ...

  10. 用ZooKeeper做为注册中心搭建基于Spring Cloud实现服务注册与发现

    前提: 先安装好ZooKeeper的环境,搭建参考:http://www.cnblogs.com/EasonJim/p/7482961.html 说明: 可以再简单的理解为有两方协作,一个是服务提供这 ...

最新文章

  1. Zookeeper架构
  2. UA MATH566 统计理论 证明UMVUE的方法
  3. Yii框架 ajax案例
  4. vue子父组件间传值
  5. 优酷视频如何进行连续播放?
  6. android奔溃日志手机查看
  7. python三层for循环_Python基础入门-For循环
  8. Python的Turtle绘制纳兹咩的娘口三三
  9. 在51CTO学习数通HCNP的经历
  10. JAVA之进制转换(全)
  11. unity网络实战开发(丛林战争)-正式开发阶段(015-游戏场景及开始界面UI搭建)
  12. MS发起的PDP上下文激活过程----PPP和PDP激活是什么区别
  13. 计算机组成与原理第三章答,计算机组成与原理第三章答案.doc
  14. 东北人讲java_东北人,请你讲东北话(内附东北话速成)
  15. mysql数据库有什么应用场景_科普:云数据库MySQL的几种应用场景
  16. 红米note3android耗电,红米Note3全网 flyme6 完美精简 省电优化 DPI设置 流畅实用-刷机之家...
  17. 单片机应用系统设计技术——智能温控器
  18. cuda相关的dockerfile build时异常处理
  19. CPU和cache的区别、RAM和ROM的区别、常见的名称缩写
  20. 【Python】(2022.07.03)在Jupyter Notebook中调用Stata17并绘制3D图展示回归结果的边际效应

热门文章

  1. 翻译: 如何使用Xcode构建xcframework
  2. 翻译:PropertyWrapper swift 5 aop特性
  3. 相同的树 深度优先搜索
  4. 2021-09-06LS是交替最小二乘(alternating least squares)的简称,用交替最小二乘求解的一个协同推荐算法。
  5. 语义分割Swin Transformer
  6. 237.删除链表中的节点
  7. RMSProp均方根反向传播法
  8. 将大于2的偶数分解成两个素数之和
  9. python copy.copy和copy.deepcopy
  10. 一. 图模型(graphical model, GM)的表示