发表于: 2020-09-16 23:05:06

1 1404


今天完成的事:

服务注册与发现Eureka。

项目目录:

父模块

<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.3.3.RELEASE</version>
       <relativePath/>
   </parent>
   <modules>
       <module>eureka-server</module>
       <module>eureka-client</module>
   </modules>
   <groupId>com.jnshu</groupId>
   <artifactId>task9</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>task9</name>
   <packaging>pom</packaging>
   <properties>
       <java.version>1.8</java.version>
   </properties>
<dependencyManagement>
   <dependencies>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>Hoxton.SR8</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>

服务注册中心配置

<parent>
  <groupId>com.jnshu</groupId>
  <artifactId>task9</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <relativePath/>
</parent>
<dependencies>
  <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  </dependency>
  <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
  </dependency>
</dependencies>
<build>
  <plugins>
     <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
  </plugins>

首先通过server.port指定EurekaServer的端口为8761。在默认情况下Eureka Server会向自己注册,这时候需要配置eureka.client.registerWithEureka和eureka.client.fetchRegistry为false,防止自己注册自己。

server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
   fetch-registry: false
   service-url:
defaultZone:
http://${eureka.instance.hostname}:${server.port}/eureka/

然后在启动类上加上@EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

客户端配置

<dependencies>
  <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  </dependency>
  <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</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>
  <!--devtools热部署-->
  <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional>
     <scope>true</scope>
  </dependency>
</dependencies>

在工程的配置文件bootstrap.yml写Erueka Client客户端的相关配置。

eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 8762
     
spring:
application:
name: eureka-client

1.bootstrap.yml(bootstrap.properties)与application.yml(application.properties)执行顺序

bootstrap.yml(bootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等

application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

bootstrap.yml 先于 application.yml 加载

2典型的应用场景如下:

当使用 Spring Cloud Config Server 的时候,应该在 bootstrap.yml 里面指定 spring.application.name 和 spring.cloud.config.server.git.uri

和一些加密/解密的信息

技术上,bootstrap.yml 是被一个父级的 Spring ApplicationContext 加载的。这个父级的 Spring ApplicationContext是先加载的,在加载application.yml 的 ApplicationContext之前。

为何需要把 config server 的信息放在 bootstrap.yml 里?

当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),需要一些提早的引导配置。因此,把 config server 信息放在 bootstrap.yml,用来加载在这个时期真正需要的配置信息。

测试配置是否生效:

启动注册中心和客户端

可以看到客户端已经向注册中心注册了。

在客户端中写一个api接口.测试

@RestController
public class HiController {
@Value("${server.port}")
String port;
   @GetMapping("/hi")
public String home(@RequestParam String name){
return "hi"+name+", i am from port:" +port;
   }
}

明天的计划

分析Eureka的源码。

遇到的问题:

收获:

springCloud的服务注册中心和客户端的配置。


返回列表 返回列表
评论

    分享到