spring cloud篇-(使用consul作为注册中心和配置中心)

本文档详细介绍了如何使用Consul作为注册中心和配置中心,包括Consul的安装、微服务项目构建、服务启动、健康检查配置、负载均衡、配置动态更新等步骤。通过SpringBoot构建product和consumer项目,展示了服务间的调用和负载均衡,并利用Consul进行配置管理。
摘要由CSDN通过智能技术生成

consul安装

这里根据我之前一篇关于consul集群搭建的博客安装的
博客地址如下: docker篇-(docker-compose搭建consul高可用主从集群)

初始化项目

项目分为product和consumer两个项目,来演示微服务直接服务通讯,同时这里构建项目使用的spring boot版本为2.3.10
项目使用Spring Initializr构建
在这里插入图片描述

构建product

点击next
在这里插入图片描述
服务提供者,我们选择两个组件,点击next
在这里插入图片描述
点击finish
在这里插入图片描述

构建consumer

点击next
在这里插入图片描述
这里因为要调用product暴露的服务,所以选择ribbon做负载均衡,点击next
在这里插入图片描述
点击finish
在这里插入图片描述

启动服务

启动product

1.在product项目里面添加application.yml,并加入如下配置
在这里插入图片描述

application.yml

spring:
  application:
    name: product
  cloud:
    consul:
      host: 192.168.101.180 #这里是consul服务端的地址
      port: 80 #这是consul服务端的端口
      discovery:
        health-check-timeout: 10s #检测超时时间
        health-check-critical-timeout: 30s #设置超时30秒之后,注销服务,这里数字要大于心跳检测的数字
        heartbeat:
          enabled: true
          ttl-value: 10 #这里开启心跳检测,设置10s提交一次心跳,用于consul与服务不在同一个网段的情况,支持存活检测,由于是启动10秒之后提交心跳,同时我这里consul和服务不在同一个网段,所以在项目启动成功之后,在consul上面需要等待十秒之后才能看到检测成功
        prefer-ip-address: true
        instance-group: default #设置实例所在组
server:
  port: 9900

2.创建controller,添加一个接口,用于consumer调用
在这里插入图片描述

package com.lhstack.consul.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author lhstack
 */
@RestController
@RequestMapping
public class ProductController {

    @Autowired
    private ServerProperties serverProperties;

    /**
     * 打印product的服务端的端口
     * @return
     */
    @GetMapping
    public int getPort() {
        return serverProperties.getPort();
    }
}

3.启动product项目,查看consul上面注册情况
启动之后这个异常先不用管,这应该是一个bug,但是不影响心跳提交
在这里插入图片描述
服务注册成功如下
在这里插入图片描述

启动consumer,调用product服务

1.在consumer项目添加application.yml文件,并添加如下配置
在这里插入图片描述
application.yml

spring:
  application:
    name: consumer
  cloud:
    consul:
      host: 192.168.101.180 #这里是consul服务端的地址
      port: 80 #这是consul服务端的端口
      discovery:
        health-check-timeout: 10s #检测超时时间
        health-check-critical-timeout: 30s #设置超时30秒之后,注销服务,这里数字要大于心跳检测的数字
        heartbeat:
          enabled: true
          ttl-value: 10 #这里开启心跳检测,设置10s提交一次心跳,用于consul与服务不在同一个网段的情况,支持存活检测,由于是启动10秒之后提交心跳,同时我这里consul和服务不在同一个网段,所以在项目启动成功之后,在consul上面需要等待十秒之后才能看到检测成功
        prefer-ip-address: true
        instance-group: default #与product必须属于同一个组
server:
  port: 8080

2.创建controller,调用product服务提供的接口
在这里插入图片描述

ConsumerController.java

package com.lhstack.consul.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author lhstack
 */
@RequestMapping
@RestController
public class ConsumerController {

    /**
     * 注入负载均衡客户端
     */
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    /**
     * 构建http客户端
     */
    public RestTemplate restTemplate = new RestTemplate();

    /**
     * 调用product服务接口
     * @return
     */
    @GetMapping
    public Integer getPort(){
        ServiceInstance product = loadBalancerClient.choose("product");
        return restTemplate.getForObject(product.getUri().toString(),Integer.class);
    }
}

3.启动类上面添加@EnableDiscoveryClient注解,标识需要开启服务发现
在这里插入图片描述
4.启动项目,在consul上面查看注册情况
同样,这个异常也不用管
在这里插入图片描述

在这里插入图片描述
5.使用浏览器访问consumer的接口,成功调用了product服务暴露的接口
在这里插入图片描述
6.再启动一个product服务,测试负载均衡情况
这里选择允许并行启动
在这里插入图片描述
修改端口
在这里插入图片描述
多请求几次,测试负载均衡
在这里插入图片描述
在这里插入图片描述

使用consul作为配置中心

在product和consumer项目的pom文件里面添加config依赖

在这里插入图片描述

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>

在product和consumer添加bootstrap.yml

product配置如下,并且删除之前的application.yml文件
在这里插入图片描述

spring:
  application:
    name: product
  cloud:
    consul:
      config:
        format: yaml
        prefix: config #配置前缀
        default-context: application #默认全局配置
        profile-separator: "-" #配置文件名称和环境的连接符,这里修改为- ,例如 ${spring.application.name}-${spring.profiles.active}
        data-key: data #这是config的数据key
      host: 192.168.101.180
      port: 80
  profiles:
    active: dev

consumer配置如下
在这里插入图片描述

spring:
  application:
    name: consumer
  cloud:
    consul:
      config:
        format: yaml
        prefix: config #配置前缀
        default-context: application #默认全局配置
        profile-separator: "-" #配置文件名称和环境的连接符,这里修改为- ,例如 ${spring.application.name}-${spring.profiles.active}
        data-key: data #这是config的数据key
      host: 192.168.101.180
      port: 80
  profiles:
    active: dev

consul配置如下格式

因为配置格式选的yaml格式,所以内容也是yaml格式
通用配置
在这里插入图片描述
product配置
"-"为${spring.cloud.consul.config.profile-separator}
在这里插入图片描述
consumer配置
在这里插入图片描述

启动项目

product加载配置成功了
在这里插入图片描述
服务也注册成功
在这里插入图片描述
consumer加载配置成功
在这里插入图片描述
服务注册成功
在这里插入图片描述
服务调用情况
在这里插入图片描述

配置动态更新

在product项目的controller上面加上RefreshScoe注解,如下
在这里插入图片描述
修改配置,将端口修改为9990
在这里插入图片描述
控制台也打印出来配置修改成功
在这里插入图片描述
使用consumer调用,配置也正确更新,如果出现服务调用失败情况,请等待一会儿,等consul缓存更新,就能拉取到正确的服务列表
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值