SpringCloud分布式微服务搭建

Posted linjiaqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud分布式微服务搭建相关的知识,希望对你有一定的参考价值。

本例子是一个springcloud的configserver,client例子

利用git存储各个服务的配置文件

server获取配置文件的仓库位置,并把server注册到eureka中,同时为了实现HA,多开几个server

client通过server获得git的地址,运行时利用获得的git配置文件来配置服务自身。

这样子服务的配置修改更加方便

git上的配置文件仓库地址:https://github.com/linjiaqin/springcloud-config-repo

 

本例子代码:https://github.com/linjiaqin/scdemo

一.ConfigServer端的配置 

1.引导类

package com.ljq;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigserverApplication {

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

}

 2.配置文件

server.port=9000
spring.application.name=config-server-9000
#表示配置中心所在仓库的位置
spring.cloud.config.server.git.uri=https://github.com/linjiaqin/springcloud-config-repo.git
#仓库路径下的的相对搜索位置,可以配置多个
spring.cloud.config.server.git.search-paths=scdemo
#git的用户名
spring.cloud.config.server.git.username=×××××××
#git的密码
spring.cloud.config.server.git.password=×××××××

 3.可以直接看server获取git上配置文件的json效果

技术图片

4. 为了实现高可用,开启两个configserver

 已经写入start-all.sh的一键脚本中

#开启两个config server
cd /home/linjiaqin/log_stream_platform/source/scdemo/configserver
nohup mvn spring-boot:run -Dserver.port=40001 > /dev/null 2>&1 &
nohup mvn spring-boot:run -Dserver.port=40002 > /dev/null 2>&1 &

5. 必须先开启configserver,才能开启configclient,configclient获取到server的地址之后就无所谓了

 

二.客户端

任何一个服务都可以是configclient

通过eureka获取到configserver的serverID,然后找到一个server地址去获取到git的地址,label指定了master分支,profile指定了dev配置文件

然后运行这个configclient的时候就会按照获取到的git上配置文件来运行

1.下面这个本地配置文件必须名为bootstrap

#配置服务名
spring.application.name=config-client
#服务id
server.port=50000
#配置对应文件规则中的{profile}部分
spring.cloud.config.profile=dev
#配置对应文件规则中的{label}
spring.cloud.config.label=master
#配置中心的地址,有了eureka之后不再手动配置
#spring.cloud.config.uri=http://localhost:9000/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server

eureka.client.serviceUrl.defaultZone=http://mu01:8761/eureka,http://cu01:8762/eureka,http://cu02:8763/eureka

 2.Controller

package com.ljq;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class HelloController {
    //value注解的作用是获得配置文件上的对应的key
    @Value("${Parameter}")
    private String Parameter;

    @Value("${server.port}")
    private String port;
    @Autowired
    private Environment environment;
    @GetMapping("/get_name")
    public String name(){
        return "Parameter:"+Parameter;
    }
    @GetMapping("/get_port")
    public String port(){
        return "Port:"+port;
    }
    @GetMapping("/get_name_env")
    public String name_env(){
        return environment.getProperty("Parameter","undefine");
    }
}

 

 

技术图片

 

 

3. git上的dev配置文件

Parameter:dev
spring.application.name=config-client-by-git-dev-properties
#服务id
server.port=50001

因此启动configclient时是以这个配置文件启动的,优先级比本地的要高


 技术图片

 

以上是关于SpringCloud分布式微服务搭建的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud分布式微服务搭建

分布式微服务Spring Cloud框架搭建详细流程

Spring Cloud分布式微服务架构图

分享Spring Cloud分布式微服务架构图

分享Spring Cloud分布式微服务架构图

分享Spring Cloud分布式微服务架构图