SpringCloud 服务的注册与发现_1

SpringCloud 服务发现组件 Eureka

1. 服务概念 (注册中心)

服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。

 

2. 服务注册和发现

Eureka介绍:

Netflix开源了他们另一个架构——Eureka开发的服务发现框架,它是一个RESTful服务,用来定位运行在AWS域(Region)中的中间层服务。

Eureka由两个组件组成:Eureka服务器Eureka客户端Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是GoogleChubby一个开源的实现,是HadoopHbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

 

所有的服务端及访问服务的客户端都需要连接到注册管理器(eureka服务器)。服务在启动时会自动注册自己到eureka服务器,每一个服务都有一个名字,这个名字会被注册到eureka服务器。使用服务的一方只需要使用该名字加上方法名就可以调用到服务。

Spring cloud的服务注册及发现,不仅仅只有eureka,还支持ZookeeperConsul。默认情况下是eurekaspring 封装了eureka,使其非常简单易用,只需要比传统应用增加一行代码就可以使用了,这一行代码就是一个注解。我们按以下步骤实现服务注册和发现功能。

 

1)首选需要建立eureka服务器

你只需要创建一个空的maven工程,并引入spring boot的相关starter即可,然后创建一个近乎空的执行类,工程如下图:

 

 

Main类中我们加入如下代码:

package cn.et;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 
@SpringBootApplication
@EnableEurekaServer
public class Main {
 
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}


可以看到只需要使用@EnableEurekaServer注解就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用。至于真正的EurekaServerNetflix公司的开源项目,也是可以单独下载使用的。

 

application.yml配置文件中使用如下配置:


server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/


  在application.properties配置文件中使用如下配置:

  server.port=8761

  eureka.instance.hostname=localhost

  eureka.client.registerWithEureka=false

  eureka.client.fetchRegistry=false

  eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/


 做完这些后当然,还要改一下pom文件,增加eureka-serverstarter即可:

 

<dependency>

                            <groupId>org.springframework.cloud</groupId>

                            <artifactId>spring-cloud-starter-eureka-server</artifactId>

</dependency>

 

详细配置如下: pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.et</groupId>
  <artifactId>SPRINGCLOUD_EUREKASERVER</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>
</project>


如此eureka服务器就完成了,在命令行启动就可以了。

 

2)让服务使用eureka服务器

 

application.name是指定进行服务注册时该服务的名称。这个名称就是后面调用服务时的服务标识符(这是服务发现的功能,我们在后面章节具体介绍)。当然,pom文件也需要增加:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

 

 

3)、使用@EnableEurekaServer注解

@EnableEurekaServer,启动一个服务注册中心提供给其他应用进行对话

 

 

4、启动springboot,并访问http://localhost:8761/

 

 

问题:客户端的负载均衡??

 

3. 发送邮件为案例 来阐述原理

 

任何一个项目都要有一个注册中心(高可用),如果其挂了,就不能调用,所以说是很重要的。

 

配置文件

Application.yml:

server:

  port: 8761

 

eureka:

  instance:

    hostname: localhost

  client:

    registerWithEureka: false

    fetchRegistry: false

    serviceUrl:

      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

注:里面必须要有空格,否则会报错。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章