springcloud干货之服务注册与发现(Eureka)

 更新时间:2018年01月24日 10:25:09   作者:陈明羽  
这篇文章主要介绍了springcloud干货之服务注册与发现(Eureka) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

使用Eureka实现服务治理

作用:实现服务治理(服务注册与发现)

简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

项目实战:

服务注册中心 :eureka-server

作用:服务注册中心提供服务注册功能

服务提供方:eureka-client

作用:注册服务到服务注册中心

服务注册中心 :eureka-server

新建一个springboot项目:eureka-server,其pom.xml配置如下:

 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
  </properties>
  <dependencies>
   <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
   </dependency>
  </dependencies>
  <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>

想要实现一个服务注册中心的功能非常简单,只需要在项目的启动类EurekaServerApplication上使用@EnableEurekaServer注解即可

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

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

spring.application.name=eureka-server
server.port=1001
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

启动EurekaServerApplication,访问 http://localhost:9001/可以看到Eureka的页面,从红框的位置可以看到没有任务服务实例注册到当前的服务注册中心

 

服务提供方 :eureka-client

每一个实例注册之后需要向注册中心发送心跳,当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。

新建一个springboot项目:eureka-client,其pom.xml配置如下:

 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
  </properties>
  <dependencies>
   <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>
  </dependencies>
  <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>

想要实现一个服务提供方也很简单,只要在项目的启动类EurekaClientApplication上使用@EnableEurekaClient注解即可

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

在application.properties中进行如下配置

spring.application.name=eureka-client
server.port=9002
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/

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

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

使用server.port属性设置不同的端口。

启动EurekaClientApplication类

刷新 http://localhost:9001/,可以看到咱们的服务提供方已经注册到了服务注册中心

 

在新建一个DiscoveryController

   使用discoveryClient.getServices()获取已经注册的服务名,使用@value将配置文件中的信息赋值到ip

@RestController
public class DiscoveryController {
 
 @Autowired
 private DiscoveryClient discoveryClient;
 @Value("${server.port}")
 private String ip;
 
 @GetMapping("/client")
 public String client() {
  String services = "Services: " + discoveryClient.getServices()+" ip :"+ip;
  
  System.out.println(services);
  return services;
 }
}

访问:http://localhost:9002/client

 

最后说明一下@EnableEurekaClient 与@EnableDiscoveryClient这两个注解

首先这个两个注解都可以实现服务发现的功能,在spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等)

@EnableEurekaClient基于spring-cloud-netflix。服务采用eureka作为注册中心,使用场景较为单一。

@EnableDiscoveryClient基于spring-cloud-commons。服务采用其他注册中心。

GitHub:https://github.com/mingyuHub/springcloud

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 全面解析SpringBoot文件上传功能

    全面解析SpringBoot文件上传功能

    这篇文章主要为大家全面解析SpringBoot文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Java的最大栈深度与JVM核心知识介绍

    Java的最大栈深度与JVM核心知识介绍

    这篇文章主要有两个部分,一部分介绍JAVA的最大栈深度,第二部分介绍了JVM核心知识,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • 浅析java移位符的具体使用

    浅析java移位符的具体使用

    这篇文章主要介绍了浅析java移位符的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • spring框架下@value注解属性static无法获取值问题

    spring框架下@value注解属性static无法获取值问题

    这篇文章主要介绍了spring框架下@value注解属性static无法获取值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring Boot下的Job定时任务

    Spring Boot下的Job定时任务

    编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务使用的非常方便,下面总结一下如何使用,感兴趣的朋友参考下吧
    2017-05-05
  • JAVA调用JavaScript的方法示例

    JAVA调用JavaScript的方法示例

    本文主要介绍了JAVA调用JavaScript的方法示例,主要介绍了两种方式,一种是使用Java的ScriptEngine接口,另一种是使用Java的URLConnection类来获取JS文件,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 举例讲解Java的RTTI运行时类型识别机制

    举例讲解Java的RTTI运行时类型识别机制

    这篇文章主要介绍了Java的RTTI运行时类型识别机制,包括泛化的Class引用以及类型检查instanceof等知识点,需要的朋友可以参考下
    2016-05-05
  • SpringMVC执行过程详细讲解

    SpringMVC执行过程详细讲解

    MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,MVC分层有助于管理和架构复杂的应用程序
    2022-08-08
  • java持久层框架mybatis防止sql注入的方法

    java持久层框架mybatis防止sql注入的方法

    下面小编就为大家带来一篇java持久层框架mybatis防止sql注入的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • SpringBoot logback日志框架使用过程解析

    SpringBoot logback日志框架使用过程解析

    这篇文章主要介绍了SpringBoot logback日志框架使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论