SpringCloud基础教程(二)-服务发现 Eureka

 我的博客:兰陵笑笑生,欢迎浏览博客!

 上一章 SpringCloud基础教程(一)-微服务与springCloud当中,我们介绍了什么是微服务的架构,以及微服务架构的常用组件。本章将继续探索SpringClud当中的服务发现,Eureka。

前言

 Eureka 是Netflix开源的一款提供服务注册和发现的产品,SpringCloud集成并包装了它。通俗的讲,Eureka就是一个服务中心,是将所有的可以提供的服务都注册到这里去管理。调用者需要的时候就去注册中心获取,然后在发起调用。

 所以,服务中心是非常的重要的,一旦宕机,会影响全部的服务,为此,我们需要搭建Eureka的集群。

一 、搭建Eureka的服务端

 新建Maven项目,在pom.xml文件中引入org.springframework.cloud的依赖,import表示需要时在导入,此处的SpringCloud版本是Greenwich.SR3,早期的eureka依赖和当前不大一样,artifactId 是spring-cloud-starter-eureka-server。这里用的是发行版比较新的,SpringBoot使用的是2.1.1版本,如下:

 
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    
 
  

        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.SR3
                pom
                import
            
        

 新建 EurekaServerApplication.java类,添加@EnableEurekaServer注解:

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://localhost:8080/ 就可以看到如下图的监控页面。

file

 服务端application.yml配置文件

#eureka 服务端
spring:
  application:
    name: eureka-server

server:
  port: 8080

eureka:
  instance:
    hostname: 192.168.0.102 #服务端的实例名称
  client:
    service-url:
       # 设置与注册中心交互的url ,
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
       #false表示自己就是服务中心
    fetch-registry: false
    #不注册自己到注册中心
    register-with-eureka: false


二 、Eureka服务提供方

 新建maven项目为服务提供方,并在pom.xml中添加依赖

 
    
        org.springframework.boot
        spring-boot-starter
    
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    

 新建ServerProviderApplication.java启动类和 ProviderController.java控制器

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

@SpringBootApplication
@EnableEurekaClient
public class ServerProviderApplication {

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

}

控制器

@RestController
public class ProviderController {

    @RequestMapping("/sayHello")
    public String sayHello(String name) {
        return "hello!,"+name;
    }
}

 在application.yml配置eureka的服务地址和自身的服务名称

#服务提供方
spring:
  application:
    name: server-provider

server:
  port: 9001

eureka:
  instance:
    hostname: 192.168.0.102 #eureka服务端的实例名称
  client:
    service-url:
       # 与注册中心交互的url
      defaultZone: http://${eureka.instance.hostname}:8080/eureka/

启动ServerProviderApplication后,再去查看Eureka的监控页面,应该可以看到服务已经注册到Eureka了

file

三、Eureka服务调用方

 新建maven项目,为服务调用方,在pom.xml文件中添加依赖

  
        
        
            org.springframework.boot
            spring-boot-starter
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

    

 新建ServerConsumerApplication.java启动类,添加@EnableEurekaClient注解:

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

@SpringBootApplication
@EnableEurekaClient
public class ServerConsumerApplication {

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

}

 编写控制器,

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
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;

import java.util.List;

@RestController
public class ConsumerController {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    private DiscoveryClient discoveryClient;

    @Autowired
    RestTemplate restTemplate;
    
    @RequestMapping("/sayHello")
    public String sayHello(String name) {
        
         List instances = 
             discoveryClient.getInstances("server-provider");
        
        if (!instances.isEmpty()) {
             ServiceInstance serviceInstance = instances.get(0);
             String res = restTemplate.getForObject(
                 serviceInstance.getUri().toString()  + "/sayHello?name="
                 + name, String.class);
            return res;
        }
        return "failed";
    }

}

 此时,启动调用方服务,我们通过HTTP请求调用/sayHello接口,就可以看到服务方从Eureka获取服务提供方的信息,并进行调用返回信息了。如下图:

file

四 、总结

 这一篇文章简单的介绍了Eureka组件的使用,并结合示例搭建了服务提供方、调用方等服务。能够对Eureka注册中心进行初步的了解和使用。

 以上就是本期的分享,你还可以关注本博客的#Spring Cloud基础教程!#

本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的:(SpringCloud基础教程(二)-服务发现 Eureka)