承接上一章,项目还是使用之前的两个已经创建好的spring boot项目!这一节主要是学习Eureka的注册和使用!跟上一章一样,我们在父模块下继续创建一个module,这次创建一个Eureka项目!
第一,先创建一个Eureka项目,并成功启动
1,new module
2,创建一个Eureka项目,跟上一节有一点点的小区别,注意一下
3,直接下一步下一步到结束,完了删除多余的文件!
到此为止,项目就创建好了,接下来就是改一些配置!我们可以看一下官网,它的这个Eureka是如何使用的!如下图所示:
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上面!
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上面注册的服务调用!当然了,获取的方式有很多种,负载均衡等都有内置实现,这节课我们先不说,我们先看看普通的获取是怎么获取的!去官网查看一下,有具体的实例!如下图所示:
按照上图我们去改造一下我们之前的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的微服务注册与使用我们就学习完成了!那么既然学习了服务的注册,那么对于过期的服务怎么监控呢?过期的服务怎么删除呢?下一节就着重来看一下这块的内容!Eureka的自我保护机制和健康检查!下下一节开始说说Eureka的负载均衡(ribbon)吧
本章的源码:
链接:https://pan.baidu.com/s/1YiHY2F8nIaBUmTMJjkI40w 提取码:buec
复制这段内容后打开百度网盘手机App,操作更方便哦