Spring Cloud Netflix尤里卡

本教程是关于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中。

Spring Cloud Netflix尤里卡_第1张图片

这带来了以下Maven依赖关系。启用Spring Cloud所需的依赖关系是spring-cloud-dependencies。

pom.xml


		
			org.springframework.boot
			pring-boot-starter-actuator
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

我们在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下载示例项目。

Spring Cloud Netflix尤里卡_第2张图片 这是pom文件。

pom.xml


		
			org.springframework.boot
			spring-boot-starter-actuator
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

该模块将充当微服务,并在启动时将其自身注册到发现服务器。为此注册,我们需要在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生成以下项目。

Spring Cloud Netflix尤里卡_第3张图片

该客户端将与eureka服务发现服务器进行交互,并使用eureka客户端发现服务,然后使用上面我们的服务实现公开的微服务。以下是示例pom.xml文件。

pom.xml


		
			org.springframework.boot
			spring-boot-starter-actuator
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

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 / ,以注册服务。

Spring Cloud Netflix尤里卡_第4张图片

现在,启动服务,将EurekaServiceApplication.java作为Java应用程序运行。 您还可以运行该服务的多个实例。所有实例都将在发现服务器中注册。成功注册该服务后,您将从发现客户端获得204响应。

Spring Cloud Netflix尤里卡_第5张图片

现在,以类似的方式通过将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尤里卡_第6张图片

结论

在本教程中,我们了解了Spring Cloud netflix eureka的实现。 我们实现了发现服务器,应用程序服务和应用程序客户端。可以从此处下载源。如果您有任何要添加或共享的内容,请在下面的评论部分中共享。

翻译自: https://www.javacodegeeks.com/2018/03/spring-cloud-netflix-eureka.html

你可能感兴趣的:(Spring Cloud Netflix尤里卡)