美文网首页
《从搭建微服务框架到深入理解Spring Cloud---(一)

《从搭建微服务框架到深入理解Spring Cloud---(一)

作者: Dufresne_gogogo | 来源:发表于2018-11-27 10:13 被阅读0次

    搭建配置中心

    导入依赖

    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
     <artifactId>sakura</artifactId>
     <groupId>com.warm-sun</groupId>
     <version>1.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
    ​
     <artifactId>service-config</artifactId>
     <name>service-config</name>
     <packaging>jar</packaging>
     <description> 配置中心</description>
     <dependencies>
     <!--配置中心-->
     <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-server</artifactId>
     </dependency>
     <!--web 模块-->
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <exclusions>
     <!--排除tomcat依赖-->
     <exclusion>
     <artifactId>spring-boot-starter-tomcat</artifactId>
     <groupId>org.springframework.boot</groupId>
     </exclusion>
     </exclusions>
     </dependency>
     <!--undertow容器-->
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-undertow</artifactId>
     </dependency>
     </dependencies>
    ​
    ​
     <build>
     <plugins>
     <plugin>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     <configuration>
     <finalName>${project.name}</finalName>
     </configuration>
     </plugin>
     <plugin>
     <groupId>com.spotify</groupId>
     <artifactId>docker-maven-plugin</artifactId>
     <version>0.4.12</version>
     <configuration>
     <imageName>${registry.url}/${project.name}:0.0.1</imageName>
     <dockerHost>${docker.url}</dockerHost>
     <dockerDirectory>${project.basedir}</dockerDirectory>
     <resources>
     <resource>
     <targetPath>/</targetPath>
     <directory>${project.build.directory}</directory>
     <include>${project.build.finalName}.jar</include>
     </resource>
     </resources>
     <serverId>docker-hub</serverId>
     <registryUrl>https://index.docker.io/v1/</registryUrl>
     </configuration>
     </plugin>
     </plugins>
     </build>
    ​
    </project> 
    

    编写启动类

    package com.warmsun.config;
    ​
    import org.springframework.boot.SpringApplication;
    import org.springframework.cloud.client.SpringCloudApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    ​
    /**
     * 配置中心
     */
    @EnableConfigServer
    @SpringCloudApplication
    public class SakuraConfigApplication {
     public static void main(String[] args) {
     SpringApplication.run(SakuraConfigApplication.class,args);
     }
    }
    

    我们来对比之前的eureka搭建的主类,发现这里我们用的是@SpringCloudApplication注解,而eureka的主类上用的是@SpringBootApplication 注解,那我们来看一下SpringCloudApplication注解干了什么事情:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableCircuitBreaker
    public @interface SpringCloudApplication {
    }
    

    导入了@SpringBootApplication注解,导入@EnableDiscoveryClient注解,改注解能导入config配置,不管你是Spring-cloud-config还是其他的例如:Apollo等,@EnableCircuitBreake 导入一个断路器实现。@EnableDiscoveryClient和@EnableCircuitBreake 我们可能还不是很了解,先不急,后面我们会一一解析

    编写配置

    server:
     port: 2001
    ​
    spring:
     application:
     name: service-config
     #配置环境
     profiles: dev
     cloud:
     config:
     server:
     git:
     uri: https://github.com/JamariRay/athena-config.git
     #如过你的项目是私有,那么在下面配置你的git信息,如果是公开的,删除下面的2配置
     username: ××××
     password: ××××××
    ​
    eureka:
     instance:
     prefer-ip-address: true
     client:
     service-url:
     defaultZone: http://sakura:Sakura*&^999@${eureka.instance.hostname}:${server.port}/eureka/
    

    编写其他的微服务配置

    在github上 创建一个athena-config项目,然后克隆到本地,编写好后,push到github,这样我们的config项目就能读取到相应微服务的信息了。

    application-dev:

    # redis 相关
    spring:
     redis:
     password:
     host: localhost
    # 暴露监控端点
    management:
     endpoints:
     web:
     exposure:
     include: '*'
    ​
    # feign 配置
    feign:
     hystrix:
     enabled: true
     okhttp:
     enabled: true
     httpclient:
     enabled: false
     client:
     config:
     feignName:
     connectTimeout: 10000
     readTimeout: 10000
     compression:
     request:
     enabled: true
     response:
     enabled: true
    # hystrix If you need to use ThreadLocal bound variables in your RequestInterceptor`s
    # you will need to either set the thread isolation strategy for Hystrix to `SEMAPHORE or disable Hystrix in Feign.
    hystrix:
     command:
     default:
     execution:
     isolation:
     strategy: SEMAPHORE
     thread:
     timeoutInMilliseconds: 60000
     shareSecurityContext: true
    ​
    #请求处理的超时时间
    ribbon:
     ReadTimeout: 10000
     ConnectTimeout: 10000
    

    加-dev是因为当前坏境为开发环境,在service-config项目下已经配置了profiles:dev所以这里也要对应,其他的微服务配置

    # 数据源
    spring:
     datasource:
     type: com.zaxxer.hikari.HikariDataSource
     driver-class-name: com.mysql.jdbc.Driver
     username: root
     password: 123456
     url: jdbc:mysql://localhost:3306/sakura?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
    

    好了微服务注册中心就搭好了,更多搭建信息参见spring的官方文档.

    好了搭建微服务配置中心 就到这里了,源码解析我会在后面分享!

    相关文章

      网友评论

          本文标题:《从搭建微服务框架到深入理解Spring Cloud---(一)

          本文链接:https://www.haomeiwen.com/subject/xbgwqqtx.html