SpringCloud微服务之-----服务注册和发现Consul

时间:2024-6-20    作者:老大夫    分类: SpringCloud


各个微服务在不同端口都是灵活变动的,如果在代码里写死,修改会很麻烦。

不使用Eureka:1.停止更新、2.使用麻烦,有自我保护机制、3.注册中心与业务模块耦合度高、4.阿里的Nacos

Consult已经纳入Spring管理

使用

服务注册与发现

服务注册

  1. 在业务的pom中引入consul的依赖
       <!--SpringCloud consul discovery -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
  1. 在业务的application.yml配置文件中配置consul
spring:
  application:
    name: cloud-payment-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
  1. 启动类添加注解@EnableDiscoveryClient

  1. 启动服务,就会被发现了。(首次入驻服务可能比较慢)。

  2. 使用微服务名称来定位地址

  1. consul自带负载均衡,需要在RestTemplate的配置类上加注解@LoadBalanced

三个注册中心的异同点

P是一定要保证的。
AP和CP的区别就是当各个服务之间数据未完成同步时数据不一致时,
AP注重可用性拿到数据就会返回,
CP注重一致性,未完成同步拿不到数据。

Consul既可以完成服务注册还可以完成配置中心,而Eureka是不支持配置中心的。

Consul配置中心,一次通知,处处生效

  1. 修改POM,在微服务POM中加入
<!--SpringCloud consul config-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. 在resources下建立bootstrap.yml配置文件,全局配置交给Consul管理,微服务个性化设置在application.yml中

bootstrap.yml

spring:
  application:
    name: cloud-payment-service
    ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
      config:
        profile-separator: '-' # default value is ",",we update '-'
        format: YAML

# config/cloud-payment-service/data
#       /cloud-payment-service-dev/data
#       /cloud-payment-service-prod/data

application.yml

server:
  port: 8001

# ==========applicationName + druid-mysql8 driver===================
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
    username: root
    password: 123456
  profiles:
    active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置

# ========================mybatis===================
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.cloud.entities
  configuration:
    map-underscore-to-camel-case: true
  1. 在consul中建立key

建立config文件夹

在config中继续建立文件夹

再在文件夹中建立data文件就可以了,注意:文本不能使用缩进tab,只能是一个空格

动态刷新,配置中心更新,微服务也能跟着跟新,不然只能等到重启服务了

  1. 主启动类添加注解@RefreshScope就可以了
spring:
  application:
    name: cloud-payment-service
    ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
      config:
        profile-separator: '-' # default value is ",",we update '-'
        format: YAML
        watch:
          wait-time: 1//配置同步等待时间,默认55秒

Consul配置的持久化问题,Consul重启配置文件会丢失

将Consul注册进Windows服务中,开机就会启动,这样微服务启动就会注册进来

  1. 找个位置建立文件夹

  1. bat的代码,替换里面的路径为你建立的文件,然后右键管理员运行
@echo.服务启动......  
@echo off  
@sc create Consul binpath= "C:\DEV\myConsulData\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir C:\DEV\myConsulData\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause
  1. consul就会运行,数据会存在mydata文件夹下,可以localhost:8500 验证一下


扫描二维码,在手机上阅读

推荐阅读: