当前位置: 首页 > article >正文

微服务分布式(二、注册中心Consul)

首先我们需要安装consul,到官网下载Consul

Install | Consul | HashiCorp Developer

在解压的consul目录下 执行启动命令

consul agent -dev 启动服务

-dev表示开发模式   -server表示服务模式

启动后在浏览器访问8500端口
http://localhost:8500/可以看到服务管理界面

项目要注册到中心需要做一些改动

一、添加pom依赖

添加cloud依赖

<dependencyManagement>
    <dependencies>
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>${spring-cloud.version}</version>
          <type>pom</type>
          <scope>import</scope>
       </dependency>
    </dependencies>
</dependencyManagement>

添加consul依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

二、添加yml文件中的consul配置

spring:
  application:
    name: test-demo  #注册到注册中心名称
  cloud:
    consul:
      host: localhost #注册中心服务ip
      port: 8500
      discovery:
        heartbeat:
          enabled: true
        service-name: ${spring.application.name}
        prefer-ip-address: true

三、启动类添加注解

@EnableDiscoveryClient  应用可以自动注册到服务注册中心。
@EnableDiscoveryClient
@SpringBootApplication
public class Mis001Application {

	public static void main(String[] args) {
		SpringApplication.run(Mis001Application.class, args);
	}

}

到这里我们就配置好了项目的注册,启动后该服务会自动注册到注册中心

启动项目后我们在注册中心可以看到注册的服务,可以看到我们注册的服务

通过

LoadBalancerClient和DiscoveryClient 可以读取注册中心服务的信息

操作Consul的K/v存储

我们先在Consul中新建一个文件

写完之后点击下面的保存

下面我们修改我们的项目

1.首先我们在pom文件中添加依赖

		<!--consul 添加K/V存储-->
		<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>

2.在配置文件中添加consul中的config配置信息

spring:
  application:
    name: test-demo  #注册到注册中心名称
  cloud:
    consul:
      host: localhost #注册中心服务ip
      port: 8500
      discovery:
        heartbeat:
          enabled: true
        service-name: ${spring.application.name}
        prefer-ip-address: true
      config:
        profile-separator: ',' #默认的分隔符为  ","  我们自定义为"-"
        format: yaml  #文件格式为yml
        fail-fast: true
        prefix: config  #基础文件夹名称
        default-context: application
        data-key: data

新建Myconfig类


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

/**
 * 获取consult config 的key/vlue
 */
@RefreshScope
@ConfigurationProperties(prefix = "jdbc")
public class MyConfig {
    private String username;
    private String password;
    private My my;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public My getMy() {
        return my;
    }

    public void setMy(My my) {
        this.my = my;
    }
}
My 类
public class My {
    private String year;

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }
}

新建ConfigController

@RestController
public class ConfigController {
    @Autowired
    private MyConfig myConfig;
    @RequestMapping("/getMyConfig")
    public String getMyConfig(){
        return myConfig.toString();
    }
    @RequestMapping("/getUsername")
    public String getUsername(){
        return myConfig.getUsername();
    }
    @RequestMapping("/getYear")
    public String getYear(){
        return myConfig.getMy().getYear();
    }
}

启动类添加注解 使 @ConfigurationProperties 注解的类生效。

@EnableConfigurationProperties({MyConfig.class})

到此我们完成配置,可以启动项目访问我们controller中的方法获取到我们在Consul的配置文件里的值

但是这里有一个问题,开始我配置的内容写到了application-uat配置文件中,启动后获取不到方法,然后我把内容写到bootstrap.yml中就可以访问到了

bootstrap.yml

#bootstrap.yml是系统级的,优先级更加高
spring:
  application:
    name: test-demo
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        prefer-ip-address: true
      config:
        profile-separator: ',' #默认的分隔符为  ","  我们自定义为"-"
        format: yaml  #文件格式为yml
        fail-fast: true
        prefix: config  #基础文件夹名称
        default-context: application
        data-key: data


http://www.kler.cn/a/452660.html

相关文章:

  • 服务器上加入SFTP------(小白篇 1)
  • 目录jangow-01-1.0.1靶机
  • 004-spring-注解aop的使用
  • 【求职面试】驾照的种类
  • Shion(时间追踪工具) v0.13.2
  • 圣诞节文化交流会在洛杉矶成功举办
  • 【全栈开发】----用pymysql库连接MySQL,批量存入
  • 浙江肿瘤医院病理库存储及NAS共享存储(磁盘阵列)方案-Infortrend普安科技
  • SQL执行计划解读
  • 【每日学点鸿蒙知识】获取是否有网接口、获取udid报错、本地通知、Json转Map、Window10安装Hyper-v
  • 《网络对抗》—— Web安全基础实践
  • 【山西长治】《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准》(长财行[2022]25号)-省市费用标准解读系列32
  • 【安全编码】Web平台如何设计防止重放攻击
  • MyBatis中动态SQL执行原理
  • AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
  • Redis 安装部署[主从、哨兵、集群](linux版)
  • 解决 fatal: detected dubious ownership in repository at ‘XXXX‘ 问题
  • 《计算机组成及汇编语言原理》阅读笔记:p86-p115
  • 理解并使用 Linux 内核的字符设备
  • 鸿蒙开发面试准备和经验
  • RabbitMQ中的普通Confirm模式:深入解析与最佳实践
  • 【spring-cloud-gateway总结】
  • 20241225在ubuntu20.04.5下监控SSD
  • 重温设计模式--5、职责链模式
  • 基于 Nginx 的网站服务器与 LNMP 平台搭建指南
  • 使用ForceBindIP绑定应用到指定IP