SpringCloud-Eureka之配置中心配置

本文详细介绍了Spring Cloud Config配置中心的搭建过程,包括配置中心的创建、GitHub仓库的准备、application.yml的配置,以及客户端如何访问配置信息。通过配置,实现了配置中心与Eureka注册中心的集成,使得服务能够从GitHub仓库获取配置信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringCloud-Eureka之配置中心配置

一、什么是配置中心
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,
需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更,都会引起一系列的更新和重启,
运维苦不堪言也容易出错,配置中心便是解决此类问题的灵丹妙药。

二、Spring Cloud Config
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,
server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。
Spring cloud使用git或svn存放配置文件,默认情况下使用git,我们先以git为例做一套示例

三、构建项目

构建多模块的Maven项目
springcloud0502 主模块 quickstart项目
eureka-server-cluster 子模块 springboot项目
eureka-cluster1/eureka-cluster1(2个注册中心集群)
eureka-provider 子模块 springboot项目
生产者集群(provider1/provider2),同时此生产者也访问了配置中心里面的配置信息
eureka-consumer 子模块 springboot项目
Feign访问生产集群,Feign默认集成了Ribbon,默认实现了负载均衡的效果。
config-server 子模块 springcloud的配置中心
config-server1/config-server1(2个配置中心集群)

配置config-server的POM依赖
通过start.spring.io创建,dependencies要选择Config Server,会有两个选项,要先其中带有git/svn的
网址如需下:

https://start.spring.io/

在这里插入图片描述
点击下载,打开pom 复制到server-config子模块中

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.zking</groupId>
	<artifactId>server-config</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>server-config</name>
	<description>配置中心</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
	</dependencies>

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

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

依赖添加完毕后,接下来就是我们的github仓库了
四、准备GitHub仓库
从仓库获取yml配置文件
在GitHub仓库中新建一个仓库,一个私库

在这里插入图片描述
将文件夹上传到私库中
在这里插入图片描述
在这里插入图片描述
三个文件内容为:
在这里插入图片描述
其他两个分别为:

config:
  hello:  hello Im prod private
config:
  hello:  hello Im test private

上传到私库后,在你的github添加你的公钥,我们用SSH协议进行读取
生成公钥,这里有坑,用的新版本命令生成是不行的,要用老版本
请先删除C:\Users\Administrator.ssh目录,重新生成ssh key

ssh-keygen -m PEM -t rsa -b 4096

新版本的命令生成:id_rsa的第一行“BEGIN OPENSSH PRIVATE KEY”
老版本的命令生成:id_rsa的第一行“BEGIN RSA PRIVATE KEY”
将自己的公钥(id_rsa.pub)添加到GitHub中
在这里插入图片描述
五、配置application.yml

---
server:
  port: 8001
spring:
  profiles: serverconfig1
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          ## 私库,ssh,需要ssh private-key
          uri: 你自己的私库地址,注意使用ssh协议
          search-paths: config-repo
          label: master
          ignore-local-ssh-settings: true
          # | 不能省略 不要手贱
          private-key: |
                        你自己的私钥
                       
# 服务注册与发现相关配置
eureka:
  client:
    # 注册中心地址
    serviceUrl:
      defaultZone: http://peer1:7101/eureka/,http://peer2:7102/eureka/
---
server:
  port: 8002
spring:
  profiles: serverconfig2
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          ## 私库,ssh,需要ssh private-key
          uri: 你自己的仓库地址,注意是ssh协议
          search-paths: config-repo
          label: master
          ignore-local-ssh-settings: true
          private-key: |
                        你自己的私钥
# 服务注册与发现相关配置
eureka:
  client:
    # 注册中心地址
    serviceUrl:
      defaultZone: http://peer1:7101/eureka/,http://peer2:7102/eureka/







在启动类中配置注解

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ServerConfigApplication {

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

}

给端口配置启动项
在这里插入图片描述
分别给两个端口配置启动项
在这里插入图片描述
在这里插入图片描述
自动测试一下
5.测试
http://localhost:8001/spring-cloud-config-dev.yml
http://localhost:8001/spring-cloud-config-test.yml
http://localhost:8001/spring-cloud-config-prod.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
能看到已经能访问到github仓库中的配置文件信息了
server搞起来之后,最终还是要在业务项目中去获取server端的配置信息
接下来就是配置config-client

六、配置client端
创建及编辑子模块config-client,它其实就是一个普通springboot项目,只不过添加了spring-cloud-config-client依赖,可以访问springcloud配置中心里面的配置信息.
config-client可以是生产者可以为消费者还可以为其他。。。
下面配置消费者eureka-provider作为config-client
config-client -> config-server -> github

1.配置pom
注1:通过start.spring.io创建,dependencies要选择Config Client
注2:入了两个坑:
坑一:网上大部分帖子导入依赖均为:“spring-cloud-config-client”,新版中其实是“spring-cloud-starter-config”, 最后还是通过start.spring.io查找生成pom,对比后才发现问题
坑二:start.spring.io生成的依赖中少了spring-boot-starter-web,tomcat无法启动
添加依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

注3:此模块不要引入spring-cloud-config-server依赖
添加一个yml文件bootstrap.yml
在这里插入图片描述

spring:
  cloud:
    config:
      name: spring-cloud-config               #对应spring-cloud-config-dev.yml的{spring-cloud-config}部分
      profile: dev                           #对应spring-cloud-config-dev.yml的{dev}部分
     ## remove 下面代码已注释,因为不再通过URL直接访问配置中心,而是生产者->注册中心->配置中心->获得Git中的配置信息
     #spring.cloud.config.uri = http://localhost:8001/         #配置中心的具体地址()
      label: master                           #对应git的分支。如果配置中心使用的是本地存储,则该参数无用
     ## add
      discovery:
        enabled: true                          #true是从配置中心读取文件
        service-id: config-server              #指定配置中心的service-id,便于扩展为高可用配置集群(目前已启用)
# 服务注册与发现相关配置
eureka:
  client:
    # 注册中心地址
    serviceUrl:
      defaultZone: http://peer1:7101/eureka/,http://peer2:7102/eureka/

配置application.yml

---
# 配置端口
server:
  port: 7201
# 服务名称
spring:
  profiles: provider1
  application:
    name: eureka-provider
# 服务注册与发现相关配置
eureka:
  client:
    # 注册中心地址
    serviceUrl:
      defaultZone: http://peer1:7101/eureka/,http://peer2:7102/eureka/
---
# \u7AEF\u53E3\u53F7
server:
  port: 7202
# \u670D\u52A1\u540D\u79F0
spring:
  profiles: provider2
  application:
    name: eureka-provider
# \u670D\u52A1\u6CE8\u518C\u4E0E\u53D1\u73B0\u76F8\u5173\u914D\u7F6E
eureka:
  client:
    # \u6CE8\u518C\u4E2D\u5FC3\u5730\u5740
    serviceUrl:
      defaultZone: http://peer1:7101/eureka/,http://peer2:7102/eureka/

添加controller层代码
在这里插入图片描述

package com.zking.eurekaprovider.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

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

    @Value("${config.hello}")
    private String msg;

    @RequestMapping("/hello")
    public String hello(){
        return "您好,我是生产者["+port+"]"+"配置内容"+msg;
    }
}

config-client配置完毕
使用我们消费者去调用此方法
七、消费者代码
feign层

package com.zking.eurekaconsumer.service;

import com.zking.eurekaconsumer.service.impl.HelloFeignServiceFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;

@Service
@FeignClient(value = "eureka-provider")
public interface HelloFeignService {

    @RequestMapping("/hello")
    public String hello();

}

controller层

package com.zking.eurekaconsumer.controller;

import com.zking.eurekaconsumer.service.HelloFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private HelloFeignService helloFeignService;

    @RequestMapping("/test")
    public String test(){
        return helloFeignService.hello();
    }
}

大致结构
在这里插入图片描述
HelloFeignServiceFallBack是熔断器不用管他不需要添加,请忽略

消费者配置完毕

启动服务
在这里插入图片描述

调用我们的消费者的端口
测试一下看看
测试结果
在这里插入图片描述
我们的消费者调用了我们的生产者拿到了github中的配置文件

总结
config-server配置中心 是往 eureka-server注册中心进行注册
而我们的config-client也是往eureka-server进行注册
用过注册中心流程可为:
eureka-consumer -->eureka-provider–>config-server–>GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值