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

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

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

前言

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

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

一 、搭建Eureka的服务端

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

 <dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
 </dependencies>
  
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

 新建 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中添加依赖

 <!--springBoot的核心文件-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!--web依赖-->
    <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-server</artifactId>
    </dependency>

 新建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文件中添加依赖

  <dependencies>
        <!--springBoot的核心文件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--web依赖-->
        <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>

    </dependencies>

 新建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<ServiceInstance> 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 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容