承接上一章,项目还是使用之前的两个已经创建好的spring boot项目!这一节主要是学习Eureka的注册和使用!跟上一章一样,我们在父模块下继续创建一个module,这次创建一个Eureka项目!

第一,先创建一个Eureka项目,并成功启动

1,new module

eureka 服务注册与发现_spring

2,创建一个Eureka项目,跟上一节有一点点的小区别,注意一下

eureka 服务注册与发现_spring_02

3,直接下一步下一步到结束,完了删除多余的文件!

eureka 服务注册与发现_Eureka的微服务使用_03

到此为止,项目就创建好了,接下来就是改一些配置!我们可以看一下官网,它的这个Eureka是如何使用的!如下图所示:

eureka 服务注册与发现_Eureka的微服务注册_04

4.接下来来看我们本地的项目吧,参照官网进行操作试试看!编写一个服务看看!

(1).为项目添加依赖

在父级配置文件pom.xml中添加依赖并作版本管理!

<!--对应的子模块-->
    <modules>
        <module>spring-boot-order</module>
        <module>spring-boot-user</module>
        <module>spring-cloud-eurekasingle</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version> <!--spring cloud 对应的版本-->
    </properties>


    <!--添加spring cloud的依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
   
 </dependencyManagement>

eureka项目配置文件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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.bw.auto</groupId>
    <artifactId>spring-cloud-eurekasingle</artifactId>
    <version>0.0.1</version>
    <name>spring-cloud-eurekasingle</name>
    <description>Demo project for Spring Boot</description>

    <!-- 子模块的parent要使用顶层的父模块,把生成的没用的东西删掉-->
    <parent>
        <groupId>com.bw.auto</groupId>
        <artifactId>spring-cloud-demo1</artifactId>
        <version>0.0.1</version>
    </parent>
    <!-- properties可删掉,会继承父模块的,已经删除-->

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

(2).编写启动类,在启动类上面添加@EnableEurekaServer注解,声明这是一个eureka项目

package com.bw.auto.springcloudeurekasingle;

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

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekasingleApplication {

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

}

(3).在application.yml添加如下配置

server:
  port: 8761  #eureka默认端口号
spring:
  application:
    name: spring-cloud-eurekasingle
eureka:
  client:
    register-with-eureka: false #表示是否将自己注册到eureka 服务上,默认为true,由于我们目前就是要使用它做服务的,故而设为false
    fetch-registry: false  #表示是否从eureka服务上获取注册信息,默认为true,因为这是一个单点的eureka 服务,不需要同步其他eureka服务节点上的数据,故而设为false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/  #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。

(4).到此eureka服务就完成了,启动一下试试看!

eureka 服务注册与发现_Eureka的微服务使用_05

第二,修改之前的两个项目,让其注册到Eureka上面!

1.给各自项目添加eureka依赖

<!--添加eureka依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

2.在application.yml添加如下配置

spring:
  application:
    name: spring-boot-user  #配置的应用名称(用于指定到注册到Eureka上的应用的名称),这里暂且还用不到
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true   #表示将自己的额ip注册到eureka上,如果不配置该属性或者设置为false,则表示注册微服务所在的操作系统的hostname到eureka上

3.在启动类上注入@EnableEurekaClient或者@EnableDiscoveryClient注解,声明这是一个eureka client

package com.bw.auto.springbootuser;

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

@SpringBootApplication
@EnableEurekaClient
// @EnableDiscoveryClient
public class SpringBootUserApplication {

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

}

这样子就可以将微服务注册到服务器上了!启动一下看看效果吧!注意启动顺序!先启动eureka服务,再去启动这两个微服务项目!

eureka 服务注册与发现_Eureka的微服务使用_06

第三,Eureka上面注册的服务调用!当然了,获取的方式有很多种,负载均衡等都有内置实现,这节课我们先不说,我们先看看普通的获取是怎么获取的!去官网查看一下,有具体的实例!如下图所示:

eureka 服务注册与发现_spring_07

按照上图我们去改造一下我们之前的order项目,试试效果!直接上代码了:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private EurekaClient eurekaClient;

    @GetMapping("/order/{id}")
    public User getUser(@PathVariable  String id){
        InstanceInfo instanceInfo=eurekaClient.getNextServerFromEureka("SPRING-BOOT-USER",false);
        String userUrl=instanceInfo.getHomePageUrl();
        System.out.println("userUrl====================="+userUrl);
        return  restTemplate.getForObject(userUrl+"/user/"+id,User.class);
    }
}

启动项目进行访问一下看看!能访问成功,证明这样的获取方式是没有问题的!

eureka 服务注册与发现_spring_08

eureka 服务注册与发现_eureka 服务注册与发现_09

基于Eureka的微服务注册与使用我们就学习完成了!那么既然学习了服务的注册,那么对于过期的服务怎么监控呢?过期的服务怎么删除呢?下一节就着重来看一下这块的内容!Eureka的自我保护机制和健康检查!下下一节开始说说Eureka的负载均衡(ribbon)吧

本章的源码:

链接:https://pan.baidu.com/s/1YiHY2F8nIaBUmTMJjkI40w  提取码:buec 
复制这段内容后打开百度网盘手机App,操作更方便哦