一篇文章带你快速了解Consul,实战consul注册中心

什么是Consul

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

Consul提供了微服务系统中的服务治理配置中心控制总线等功能。

这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格

Consul具有很多优点

  • 基于 Raft 协议
  • 比较简洁
  • 支持健康检查
  • 同时支持 HTTP 和 DNS 协议
  • 支持跨数据中心的 WAN 集群提供图形界面跨平台
  • 支持 Linux、Mac、Windows

Consul安装

linxu安装

Centos7安装consul详解(服务器+虚拟机)

windows安装

进入 Consul官网

image-20201201225113359

选择对应的版本,下载到本地

进入consul解压位置,在地址栏输入cmd进入命令行

image-20201129204728634
启动Consul服务端

//启动consul服务
consul agent -dev  

image-20201129204855604

大家尽量使用docker进行安装测试,更加方便简单,并且对以后工作中使用docker很有帮助

测试Consul连通

输入网址

http://localhost:8500/

跳转到Consul监控界面则表示启动成功!

image-20201129205322970

Consul服务注册

Consul的功能很强大,这里我们就先使用它服务注册功能

实验目的:

模拟用户访问发送请求,微服务提供方搭建一个小型集群,采用轮询方式接受请求并相应给客户端

1、服务提供者8007、8008和8009

建moudle

创建三个moudle

cloud-providerconsul-payment8007

cloud-providerconsul-payment8008

cloud-providerconsul-payment8009

改pom

这里使用的springboot与springcloud对应的版本为

<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR1</spring.cloud.version>

在每个模块中添加springboot与consul整合包依赖

<!--SpringBoot整合consul客户端-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

写yml

三个模块的配置大体相同,只有端口不同

server:
  port: 8007
#服务别名 ---注册到服务中心
spring:
  application:
    name: consul-provider-payment
####consul注册中匈地址
  cloud:
    consul:
      host: localhost		//主机ip
      port: 8500
      discovery:
        service-name: ${spring.application.name}

主启动

在主启动类上添加@EnableDiscoveryClient注解开启服务发现功能

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

业务类

因为我们测试的是consul的注册中心功能,所以我们只需要简单的实现服务调用功能即可。

于是我们简单的区别出集群中三个服务提供者的端口即可验证

三个模块的业务类都相同

package com.lejia.springcloud.controller

@RestController
@Slf4j
@RequestMapping("/payment")
public class PaymentController {

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

	//验证当前服务提供者的端口,即可验证实现了集群访问功能
    @GetMapping(value="/consul")
    public String paymentConsul(){

        return "SpringCloud with Consul:"+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}

启动测试

启动项目之前不要忘记先启动consul服务端哦

image-20201201232001224

image-20201201232201228

2、服务消费者80

服务消费者主要的功能等同于用户,其调用服务端暴露的端口来实现真实的访问场景

建moudle

cloud-consumerconsul-order80

改pom

与服务提供者相同

写yml

server:
  port: 80
###注册到服务中心的服务名
spring:
  application:
    name: cloud-consumerconsul-order
###consul注册中心
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

主启动

在主启动上添加@EnableDiscoveryClient开启服务发现

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

业务类

新建配置类

package com.lejia.springcloud.config;

新建RestTemplate对象,其主要功能为进行远程服务的调用

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced	//开启负载均衡功能 默认为轮询
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

新建controller

package com.lejia.springcloud.controller;

暴露给用户的访问接口,实现远程访问服务端提供的集群服务

@RestController
@Slf4j
@RequestMapping("/consumer")
public class OrderConsulController {

    private final String INVOCATION_URL = "http://consul-provider-payment";

    @Resource
    private RestTemplate restTemplate;

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

启动测试

image-20201201233134304

查看consul监控界面,可以发现我们的服务都已经注册到中心上了

image-20201201233215561

3、服务访问测试

输入暴露给用户访问的接口测试

http://localhost/consumer/payment/consul

image-20201201233644231

image-20201201233656935

image-20201201233715833

连续三次访问,我们可以看出,服务由集群中8007/8008/8009分别提供,我们想要实现的初步目标已经达成了。

在实际生产中,我们要进行的不单单是简单的轮询算法,而是会根据实际情况来选择适合的负载均衡算法,如果你对此感兴趣,可以自行查找其他关于负载均衡的文章。

感谢你的观看,你的每一个点赞都是对我最大的帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值