微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现

eureka-server

eureka服务端,提供服务的注册与发现,类似于zookeeper

新建spring-boot工程,pom依赖:


<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 定义springcloud的版本为Dalston版 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Dalston.SR1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

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


@EnableEurekaServer
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
        	//启动方式区别于springboot
		new SpringApplicationBuilder(Application.class).web(true).run(args);
	}

}

注册中心配置

默认情况下,注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties进行配置,具体配置信息如下:

# 该服务中心名字
spring.application.name=eureka-server
#端口号
server.port=10000

eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

logging.file=${spring.application.name}.log

接下来,打开浏览器,访问127.0.0.1:10000

eureka注册中心.png

显然,注册中心还没有任何服务提供者以及消费者:


eureka-client

我们接下来创建提供服务的客户端,并向服务注册中心注册自己。

新建spring-boot工程,命名为eureka-client,pom依赖:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

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

<!-- 定义springcloud的版本为Dalston版 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Dalston.SR1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

然后创建一个接口服务,如下:


@RestController
public class EurekaController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/client")
    public String client() {
        String services = "Services: " + discoveryClient.getServices();
        System.out.println(services);
        return services;
    }

}

接下来是启动类,注意在启动类加上@EnableDiscoveryClient注解,具体如下:


@EnableDiscoveryClient
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		new SpringApplicationBuilder(Application.class).web(true).run(args);
	}

}

application.properties 配置


spring.application.name=eureka-client

server.port=2000

eureka.client.serviceUrl.defaultZone=http://localhost:10000/eureka/


通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。

eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。

启动项目,浏览器访问127.0.0.1:10000

eureka1.png

如上,证明服务提供方注册成功


eureka-consumer

通过上面两步,我们已经成功地将服务提供者:eureka-client注册到了Eureka服务注册中心了,同时我们也通过DiscoveryClient接口的getServices获取了当前客户端缓存的所有服务清单,那么接下来我们要学习的就是:如何去消费服务提供者的接口

新建spring-boot工程,命名为eureka-consumer,pom依赖:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</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-actuator</artifactId>
</dependency>

<!-- 定义springcloud的版本为Dalston版 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Dalston.SR1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

配置application.properties,指定服务注册中心


spring.application.name=eureka-consumer

server.port=2100

eureka.client.serviceUrl.defaultZone=http://localhost:10000/eureka/


创建应用主类,注意注解@EnableDiscoveryClient,和之前服务提供者写法一致


@EnableDiscoveryClient
@SpringBootApplication
public class Application{
  @Bean
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }
  public static void main(String[] args) {
    new SpringApplicationBuilder(Application.class).web(true).run(args);
  }
}

创建一个接口用来消费eureka-client提供的接口


@RestController
public class ConsumerController{
  
  @Autowired
  private LoadBalancerClient loadBalancerClient;
  
  @Autowired
  RestTemplate restTemplate;
  
  @GetMapping("/consumer")
  public String consumer() {
    ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");
    String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/client";
    System.out.println(url);
    return restTemplate.getForObject(url, String.class);
  }

可以看到,我们注入了LoadBalancerClient和RestTemplate,并在/consumer接口的实现中,先通过loadBalancerClientchoose函数来负载均衡的选出一个eureka-client的服务实例,这个服务实例的基本信息存储在ServiceInstance中,然后通过这些对象中的信息拼接出访问/client接口的详细地址,最后再利用RestTemplate对象实现对服务提供者接口的调用。


如上,基于eureka的服务注册,发现,消费已经全部完成.

[本文参考:程序员DD教程]
原文地址:https://www.cnblogs.com/leihuazhe/p/7732163.html