【SpringCloud】Consul-服务注册中心及配置中心快速入门

本文详细介绍了如何使用SpringCloud的Consul作为服务注册中心和配置中心,包括下载安装、服务注册、配置文件管理、动态刷新配置以及数据持久化的设置。
摘要由CSDN通过智能技术生成

【SpringCloud】Consul-服务注册中心及配置中心快速入门

1. 下载安装及启动

Consul下载地址:下载地址

Spring Cloud Consul 文档地址:文档地址

下载完毕,以开发模式启动Consul:

consul agent -dev

启动成功,进入可视化界面:http://localhost:8500:

image-20240423203830876


2. 服务注册

2.1 引入依赖

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

2.2 yml配置

spring:
  application:
    name: cloud-payment-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

2.3 启动类配置

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

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

2.4 测试

启动SpringBoot服务,检查服务是否注册成功。

image-20240423204328423

修改接口,测试接口调用是否成功:

@RestController
public class OrderController {

    //public static final String PaymentSrv_URL = "http://localhost:8001";//先写死,硬编码
    public static final String PaymentSrv_URL = "http://cloud-payment-service";//改成服务名

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/pay/get/{id}")
    public ResultData getPayInfo(@PathVariable("id") Integer id) {
        return restTemplate.getForObject(PaymentSrv_URL + "/pay/get/" + id, ResultData.class);
    }
}

在测试之前,别忘了将 RestTemplate 添加一个 @LoadBalanced 负载均衡注解,因为该服务可能有多个,所以要使用负载均衡策略:

@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

测试该接口,发现测试成功:

image-20240423204928656


3. 服务配置

3.1 引入依赖

<!--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>

3.2 yml配置

原配置文件 application.yml 的内容:

server:
  port: 8001

# ==========applicationName + druid-mysql8 driver===================
spring:
  application:
    name: cloud-payment-service
  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
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

# ========================mybatis===================
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.zhj.cloud.entities
  configuration:
    map-underscore-to-camel-case: true

改造后的配置文件分为两部分:

  1. application.yml:
  2. bootstrap.yml

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.zhj.cloud.entities
  configuration:
    map-underscore-to-camel-case: true

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 '-';比如默认是cloud,payment,ervice 修改后为cloud-payment-service
        format: YAML

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

3.3 创建配置文件

打开 Consul 可视化界面,点击 Create:

image-20240423212700109

以官网配置为例:

image-20240423212819991

首先要创建一个 Config 文件夹,然后创建各个子文件夹,最后的data文件就是配置文件。

我们创建这三个配置文件:

  • config/cloud-payment-service/data:默认环境,default
  • config/cloud-payment-service-dev/data:开发环境,dev
  • config/cloud-payment-service-prod/data:生产环境,prod

注意:如果输入结尾是’/',则当前为文件夹,下方的文本框会消失。

image-20240423213239432

config/cloud-payment-service/data 为例,默认环境的配置如下,其他几个环境操作都相同。

image-20240423213738757


3.4 动态刷新配置

在启动类上添加 @RefreshScope 注解即可开启动态刷新配置的功能,默认每隔55s刷新一次配置。


3.5 测试

在控制器中添加如下代码:

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

@GetMapping(value = "/pay/get/info")
private String getInfoByConsul(@Value("${com.zhj}") String str) {
    return "com.zhj: " + str + "\t" + "port: " + port;
}

调用该接口:

image-20240423215022888

修改配置文件的 spring.profiles.active 的值为 prod ,再次测试:

image-20240423215215072


4. 数据持久化

每当 Consul 重启之后,上次配置的内容都会丢失。这是由于 Consul 没有配置数据持久化。现在配置数据持久化。

在 Consul 文件夹下创建两个文件:

  • mydata文件夹
  • consul_start.bat 文件

image-20240424231038337

编辑 consul_start.bat 文件的内容如下:

@echo.服务启动......  
@echo off  
@sc create Consul binpath= "D:\program\consul\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir D:\program\consul\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause

注意:在第三行中使用自己的路径。

右键bat文件,点击 以管理员身份运行。弹出命令窗口,提示成功。如果没有提示成功,则说明失败了,自己找找原因。

image-20240424231314981

此时,Consul 就以后台进程的方式运行了,并且支持数据持久化了。

那么我们以后就不用刻意去启动Consul了,每次关机重启之后Consul都会自己启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值