SpringCloud学习 - Eureka服务注册与发现

  1. Eureka服务注册与发现

书签:

(1)Eureka服务启动

(2)Eureka客户端注册服务

(3)Eureka客户端发现服务

(4)Eureka服务集群

(5)Eureka服务其他细节

  1. Eureka服务启动

新建项目eureka-server,

pom.xml 配置

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>cn.ywj</groupId>
   <artifactId>eureka-provider</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>eureka-provider</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Finchley.SR1</spring-cloud.version>
   </properties>

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


      <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-test</artifactId>
         <scope>test</scope>
      </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>

 

 

application.yml 配置如下:

#应用名
spring:
  application:
    name: eureka-server
# 端口号
server:
  port: 8080
# eureka配置
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false # 禁止到Eureka器中获取注册信息
    register-with-eureka: false # 禁止将自己作为客户端注册信息到Eureka服务器
    serviceUrl:
      defaultZone: http://127.0.0.1:8080/eureka/ # 告诉别人服务的注册和发现地址

 

启动类上加入注解@EnableEurekaServer 即可:

package cn.ywj.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

 

启动项目,访问http://127.0.0.1:8080/ 如下:

 

OK.

 

  1. Eureka客户端注册服务

新建项目:eureka-provider

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>cn.ywj</groupId>
   <artifactId>eureka-provider</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>eureka-provider</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Finchley.SR1</spring-cloud.version>
   </properties>

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


      <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-test</artifactId>
         <scope>test</scope>
      </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>

 

application.yml 配置:

#应用名
spring:
  application:
    name: eureka-provider
# 端口号
server:
  port: 8081
# eureka配置
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8080/eureka/ # 服务的注册地址

 

启动类加入注解:@EnableEurekaClient

package cn.ywj.eurekaprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class EurekaProviderApplication {

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

 

启动eureka-server项目,再启动eureka-provider,访问http://127.0.0.1:8080/ 如下图:

Instances currently registered with Eureka 有刚才eureka-provider项目的注册信息

 

  1. Eureka客户端发现服务

新那一个项目:eureka-consumer

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>cn.ywj</groupId>
   <artifactId>eureka-consumer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>eureka-consumer</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Finchley.SR1</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <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-test</artifactId>
         <scope>test</scope>
      </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>

 

 

application.yml 配置

#应用名
spring:
  application:
    name: eureka-consumer
# 端口号
server:
  port: 8082
# eureka配置
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8080/eureka/ # 服务的发现地址

 

修改eureka-provider项目,提供一个接口:

package cn.ywj.eurekaprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {

   @GetMapping("/t")
   public Object t(){// 提供一个接口
      return "msg from provider";
   }

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

 

eureka-consumer项目启动类修改:

package cn.ywj.eurekaconsumer;

import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@RestController
public class EurekaConsumerApplication {

   @Bean
   public RestTemplate getRestTemplate () {// 注入一个RestTemplate
      return new RestTemplate() ;
   }

   @Autowired
   private RestTemplate restTemplate;

   @Autowired
   private EurekaClient eurekaClient;

   @RequestMapping("/t")
   public Object t(){

      InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("EUREKA-PROVIDER", false);// 通过服务名可以拿到地址
      String str = restTemplate.getForObject(instanceInfo.getHomePageUrl()+"/t", String.class);
      return str;
   }

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

 

分别启动项目:eureka-server、eureka-provider、eureka-consumer 访问:http://localhost:8082/t 即可获取信息:

msg from provider

 

  1. Eureka服务集群

只需修改eureka-server的application.yml中的端口号和defaultZone即可,idea可以一个项目多次启动,所以可以不用创建多个server项目,每次修改application.yml后重新启动项目即可

先配置一下hosts文件:

127.0.0.1 eureka0

127.0.0.1 eureka1

127.0.0.1 eureka2

eureka-server项目下创建3个yml:

application-yml8080.yml

application-yml8180.yml

application-yml8280.yml

配置中除了port、hostname、defaultZone 相对应的变化,其他的不变

 

application-yml8080.yml

#应用名
spring:
  application:
    name: eureka-server
  profiles:
    active: yml8080
# 端口号
server:
  port: 8080
# eureka配置
eureka:
  instance:
    hostname: eureka0
  client:
    fetch-registry: false # 禁止到Eureka器中获取注册信息
    register-with-eureka: false # 禁止将自己作为客户端注册信息到Eureka服务器
    serviceUrl:
      defaultZone: http://eureka1:8180/eureka/,http://eureka2:8280/eureka/

 

application-yml8180.yml

#应用名
spring:
  application:
    name: eureka-server
  profiles:
    active: yml8180
# 端口号
server:
  port: 8180
# eureka配置
eureka:
  instance:
    hostname: eureka1
  client:
    fetch-registry: false # 禁止到Eureka器中获取注册信息
    register-with-eureka: false # 禁止将自己作为客户端注册信息到Eureka服务器
    serviceUrl:
      defaultZone: http://eureka0:8080/eureka/,http://eureka2:8280/eureka/

 

application-yml8280.yml

#应用名
spring:
  application:
    name: eureka-server
  profiles:
    active: yml8280
# 端口号
server:
  port: 8280
# eureka配置
eureka:
  instance:
    hostname: eureka2
  client:
    fetch-registry: false # 禁止到Eureka器中获取注册信息
    register-with-eureka: false # 禁止将自己作为客户端注册信息到Eureka服务器
    serviceUrl:
      defaultZone: http://eureka0:8080/eureka/,http://eureka1:8180/eureka/

 

然后在idea里设置program arguments : --spring.profiles.active=yml8280 (三个启动器,分别对应)

 

然后分别启动这3个启动器即可,访问:http://eureka0:8080/ 

 

接着eureka-provider项目yml修改defaultZone为三个地址即可:

defaultZone: http://eureka0:8080/eureka/,http://eureka1:8180/eureka/,http://eureka2:8280/eureka/

 

  1. Eureka服务其他细节

1、eureka-provider显示Ip:

eureka:

  instance:

    prefer-ip-address: true

  1. 自我保护功能关闭:

eureka:
  server:
    enable-self-preservation: false #关闭

猜你喜欢

转载自blog.csdn.net/u013845177/article/details/83001190