本教程是关于Spring云Netflix Eureka的。 在这里,我们将创建eureka发现服务器和微服务,这些服务本身将注册到发现服务器以及将使用netflix客户端API来发现服务并使用该服务公开的微服务的客户端,下面将通过示例示例进行说明。每个发现服务器,服务和客户端的3个不同的spring boot应用程序。此外,我们还将研究默认的eureka仪表板和该仪表板中可用的各种有用信息。
Spring Cloud Netflix使用简单的基于注释的配置为Spring Boot应用程序提供Netflix OSS集成。现在是时候创建微服务而不是批量应用程序并将这些微服务部署到云了。 在这种架构中,服务发现是关键原则之一,服务发现可根据需要自动执行多个实例创建过程,并提供微服务的高可用性,这里我们将使用Eureka作为Netflix Service Discovery Server and Client。
Spring Cloud Eureka发现服务器
发现服务器是所有可用服务的注册表。不同的服务可以在该服务器上自行注册和注销。使用spring boot实施eureka发现服务器非常简单。 为此,首先我们将创建一个具有start.spring.io以下依赖项的spring boot应用程序,并将其导入我们的IDE中。
这带来了以下Maven依赖关系。启用Spring Cloud所需的依赖关系是spring-cloud-dependencies。
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>pring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</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>
我们在application.properties
定义了以下属性。在这里,spring.application.name提供了该服务的唯一标识符。在启动发现服务器时,它将尝试向其对等发现服务器注册以获取我们没有的高可用性本教程。我们没有发现服务器的多个实例。因此eureka.client.register-with-eureka设置为false。
同样,我们具有eureka.client.fetch-registry属性,该属性指示此客户端是否应从eureka服务器获取eureka注册信息。 并且server.port定义了我们的发现服务器将在其上运行的端口。
spring.application.name=discovery-server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
server.port=8761
现在让我们定义我们的DiscoveryServerApplication。@ EnableEurekaServer将启用eureka服务器配置。 当我们将此类作为Java程序运行时,它将在http:// localhost:8761 / eureka /处添加新的对等节点,并且我们的微服务将调用该URL进行自身注册。
DiscoveryServerApplication.java
package com.devglan.discoveryserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class DiscoveryServerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
发现服务器就是这样。 我们的发现服务器已准备就绪,可以接受来自http:// localhost:8761 / eureka上任何服务的注册请求。
Spring Cloud Eureka服务
发现服务器准备就绪后,现在让我们创建微服务 。 同样,这将是spring boot app,我们将使用spring boot starter下载示例项目。
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</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>
该模块将充当微服务,并在启动时将其自身注册到发现服务器。为此注册,我们需要在application.properties
配置有关发现服务器的信息。下面是entrys.spring.application.name是唯一标识符对于此服务,eureka.client.service-url.defaultZone是服务光盘服务器的URL。
spring.application.name=eureka-service
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
server.port=8085
要将此应用程序配置为eureka服务和发现服务器的客户端,我们需要使用@EnableDiscoveryClient注释我们的spring boot应用程序
package com.devglan.eurekaservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaServiceApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServiceApplication.class, args);
}
}
以下是控制器类,我们在其中为客户端应用程序公开了微服务。
GreetingController.java
package com.devglan.eurekaservice.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/")
public String greeting(){
return "Hello from" ;
}
}
Spring Cloud Eureka客户端
现在是时候定义我们的客户了,为此,我们将再次使用spring starter生成以下项目。
该客户端将与eureka服务发现服务器进行交互,并使用eureka客户端发现服务,然后使用上面我们的服务实现公开的微服务。以下是示例pom.xml文件。
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</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>
application.properties
文件中需要以下条目。 由于这是一个客户项目,因此我们不希望它注册到发现服务器。 但是在某些情况下,应用程序既可以是客户端又可以是服务器。在这种情况下,eureka.client.register-with-eureka将为真。
application.properties
spring.application.name=eureka-client
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
eureka.client.register-with-eureka=false
以下是我们的Application类。 它带有@EnableDiscoveryClient注释,以将该应用程序注册为发现客户端。
package com.devglan.eurekaclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
现在,我们将定义控制器,它将在根级别公开一个API。 这个API将从发现服务器发现服务并调用服务。在这里,我们已经自动连接了eureka客户端,并且getNextServerFromEureka()接受两个参数。 第一个参数是微服务应用程序的服务标识符。 我们上面的服务实现已使用名称为eureka-service的发现客户端注册了自己,并且eureka客户端应用程序将使用相同的名称来发现服务。
一旦发现该服务,客户端将调用微服务。记住,我们在上面的服务实现中公开了一个greeting API,并且客户端将调用相同的API。
ClientController.java
package com.devglan.eurekaclient.controller;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ClientController {
@Autowired
private EurekaClient eurekaClient;
@Autowired
private RestTemplateBuilder restTemplateBuilder;
@GetMapping("/")
public String invokeService(){
RestTemplate restTemplate = restTemplateBuilder.build();
InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("eureka-service", false);
String serviceBaseUrl = instanceInfo.getHomePageUrl();
return restTemplate.getForObject(serviceBaseUrl, String.class);
}
}
测试应用
要测试应用程序,请首先启动发现服务器。 为此,我们需要将DiscoveryServerApplication.java
作为Java应用程序运行。 您可以检查控制台并找到类似的日志,如下所示。 您还可以在发现服务器公开的控制台中看到URL http:// localhost:8761 / eureka / ,以注册服务。
现在,启动服务,将EurekaServiceApplication.java作为Java应用程序运行。 您还可以运行该服务的多个实例。所有实例都将在发现服务器中注册。成功注册该服务后,您将从发现客户端获得204响应。
现在,以类似的方式通过将EurekaClientApplication.java
作为Java应用程序运行EurekaClientApplication.java
启动客户端。
现在从URL上输入URL http:// localhost:8080 ,从eureka服务应用程序中以Hello的形式检查字符串响应。
Spring Cloud Eureka仪表板
您可能已经在发现服务器实现中的application.properties
文件中注意到,我们配置的端口为8761。在该端口上,Spring cloud eureka提供了一个默认启用的仪表板,该仪表板显示有用的元数据和服务状态。在这里我们可以检查关于发现服务器副本的信息(在本例中为1,该副本在localhost上运行)。类似地,我们还具有关于发现服务器的注册服务的信息以及当前状态。
结论
在本教程中,我们了解了Spring Cloud netflix eureka的实现。 我们实现了发现服务器,应用程序服务和应用程序客户端。可以从此处下载源。如果您有任何要添加或共享的内容,请在下面的评论部分中共享。
翻译自: https://www.javacodegeeks.com/2018/03/spring-cloud-netflix-eureka.html