单机版Eureka实现与服务注册

一、基础概念:

1、什么是服务治理?

Spring Cloud封装了Netflix公司开发的 Eureka 模块是实现服务治理;

在传统的rpc远程调用框架中,管理每个服务于服务之间的依赖关系比较复杂,所以需要使用服务治理,可以实现服务间的调用、负载均衡、容错等,实现服务注册与发现。

2、什么是Eureka服务注册与发现?

Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心;

而系统中的其它微服务,使用Eureka Client连接到Eureka Server,并维持心跳连接,这样系统的维护人员就可以通过Eureka Server来监控系统中的各个微服务是否正常运行;

在服务注册与发现中,有一个注册中心,当某个微服务启动的时候,会把当前自己服务器的信息,比如:服务通讯地址等以别名的方式注册到注册中心上,另一方(消费者|服务提供者)以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用;

在任何一个RPC远程调用框架中,都会有一个注册中心(存放服务地址相关信息);

下面有Eureka和Dubbo的架构对比:

7.jpg

8.jpg

3、Eureka的核心组件:

Eureka Server 和 Eureka Client

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储着所有可用的服务节点信息,可通过管理界面直观看到;

Eureka Client通过注册中心进行服务间调用访问

EurekaClient具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器;在应用启动后,将会向EurekaServer发送心跳(默认周期为30秒)。如果EurekaServer在多个心跳周期内都没有接收到某个节点的心跳,EurekaServer就会从服务注册表中把这个服务节点移除掉(默认90秒)。


二、Eureka Server服务端安装 —— cloud-eureka-server7001

1、创建新的module —— cloud-eureka-server7001

2、修改pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.jiguiquan.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7001</artifactId>

    <dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!--自定义api通用包-->
        <dependency>
            <groupId>com.jiguiquan.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        
        <!--boot web acctuator-->
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

3、写核心配置文件application.yml

server:
  port: 7001

eureka:
  instance:
    hostname: localhost #eureka服务端实例名称
  client:
    register-with-eureka: false #表示不向注册中心注册自己
    fetch-registry: false #false表示自己就是注册中心,我的职责就是维护服务实例,并不区检索服务
    service-url:
      #      defaultZone: http://eureka7001.com:7001/eureka/ # 不搭建集群 单机 指向自己
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eurek

4、编写主启动类 ——  com.jiguiquan.springcloud.EurekaMain7001

package com.jiguiquan.springcloud;

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

/**
 * @author jiguiquan
 * @create 2020-03-08 18:30
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class, args);
    }
}

5、启动项目,访问 http://localhost:7001

9.jpg

Eureka服务启动成功,但是现在还没有注册上来的服务;


三、支付微服务cloud-provider-payment8001入驻 EurekaServer

1、在cloud-provider-payment8001的pom.xml中增加EurekaClient的依赖:

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

2、修改配置文件 application.yml

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  #当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/cloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 831121

eureka:
  client:
    register-with-eureka: true #表示向注册中心注册自己 默认为true
    fetch-registry: true #是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    service-url:
      defaultZone: http://localhost:7001/eureka # 入驻的EurekaServer地址

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.jiguiquan.springcloud.entities  #所有entity别名所在包

3、在主启动增加 @EnableEurekaClient 注解

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class, args);
    }
}

4、启动cloud-provider-payment8001项目,进行测试:

此时我们就可以在 http://localhost:7001 的EurekaServer的注册列表中看到我们的8001服务了:

10.jpg


四、订单微服务cloud-consumer-order80入驻EurekaServer

1、在cloud-consumer-order80的pom.xml中增加EurekaClient的依赖

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

2、修改配置文件application.yml

server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: true #表示向注册中心注册自己 默认为true
    fetch-registry: true #是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    service-url:
      defaultZone: http://localhost:7001/eureka # 入驻的EurekaServer地址

3、在主启动增加 @EnableEurekaClient 注解

@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class, args);
    }
}

4、启动cloud-consumer-order80项目

此时,我们同样,也就可以看到EurekaServer的注册列表中,就有了order80这个服务

11.jpg

以上是单机版的Eureka Server实现和简单的服务注册;

下节开始搭建Eureka集群;

个人此项目代码地址(持续更新):

https://github.com/jiguiquan/cloud2020

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐