hi,我是小白云Casy,这是我的Java学习笔记。
上章节大概跑起来了一个springboot:小白云0基础学java|如何用springboot构建一个web工程?
这一接来学习SpringCloud吧!
今天的目标是:注册和发现Eureka服务,向着目标冲冲冲!!!
SpringCloud的概念摘抄:
spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑
本章节主要是讲Eureka ,所以介绍一下Eureka :
Spring Cloud Netflix的Eureka 是一个服务注册和发现模块。
那到底要怎么搞呢?动动我的可爱小手开始操作啦~~~~~
- 首先创建一个maven主工程。
目录结构如下:
创建完成后,更改下面的pom.xml的配置,在其中引入依赖。
spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。这一系列文章全部采用这种模式,其他文章的pom跟这个pom一样。再次说明一下,以后不再重复引入。代码如下:
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>luo</groupId>
<artifactId>casy</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>sc-f-chapter1</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<modules>
<module>eureka-server</module>
<module>service-hi</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 然后,创建2个model,一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。
下面以创建server为例子,详细说明创建过程:
右键工程->创建model-> 选择spring initialir 如下图:
下一步->选择cloud discovery->eureka server ,然后一直下一步就行了。
创建完后的工程,其pom.xml不需要修改。
只需要在main下面的 DemoApplication中,加上一个注解 @EnableEurekaServer,就能启动一个服务注册中心了:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer // 只需要加上这个注解,就能启动一个服务注册中心
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
另外eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。eureka server的配置文件appication.yml:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
配置的解释说明:
启动DemoApplication .java运行一下,看到如下结果,说明运行成功。
尝试访问一下网址:http://localhost:8761/
结果如下:
可以看到,eureka的服务端已经启动起来了!!! 好开熏~~~~~~~~~~
Application里面是空的,因为还没有客户端在里面注册,所以接下来我们创建客户端:
创建的入口同上sever的创建:
在maven主工程目录下,点右键->创建model-> 选择spring initialir
然后在这一步,选择的是这两项,与上面有区别哦~,重点是:选的Eureka Discover Client
可以看到,创建完后的工程,其pom.xml默认生成的,不用动。
在HahaApplication.java中,通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
再加点简单的代码,如下:
package modelclient.haha;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@SpringBootApplication
@EnableEurekaClient //通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
public class HahaApplication {
public static void main(String[] args) {
SpringApplication.run(HahaApplication.class, args);
}
@Value("${server.port}")
String port;
@RequestMapping("/hi")
public String home(@RequestParam(value = "name", defaultValue = "haha") String name) {
return "hi " + name + " ,i am from port:" + port;
}
}
仅仅@EnableEurekaClient是不够的,还需要在配置文件中注明自己的服务注册中心的地址,application.yml配置文件如下:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8764
spring:
application:
name: test
配置文件说明:
红:指明client的server地址
黄:client的服务端口号
绿:client的应用名称
需要指明**spring.application.name,这个很重要,**这在以后的服务与服务之间相互调用一般都是根据这个name ,访问http://localhost:8761/ 可以看到,一个名字为TEST的应用,已经注册在Eureka Server上面了,没错,这个TEST来源于spring.application.name的配置。
接着,我们可以尝试访问一下这个client:
那么怎么访问呢?先看代码:
路由是:/casy
参数是:name=
端口是:8762
所以访问方式如下:
http://localhotst:8761/casy?name=casy
/casy 的对应关系如下:
ok,今天的学习大功告成了!!!!
总结一下:
先创建一个maven主工程,再创建一个Eureka server 做为注册中心,注册中心1个就好,然后可以在上面注册多个client,也就是应用,例如下面的是我练习的,一个注册中心上面注册了3个叫做CASY的应用:
画个图象形点:
标记Server和Client的区别有3处:
1.创建spring时候第3步的勾选,还记得吗? 这里影响pom.xml的配置。
2.java代码中的注解:@EnableEurekaClient 和 EnableEurekaServer
3.配置文件bootstrap.yml和 application.yml中的配置。
就这么多知识点啦~~~~
-------最后的Q&A------
过程中遇到一个坑,如下报错:
这种问题,一定是yml文件配置的有问题,端口识别不出来,例如我这里,是因为文件的格式不符合yml文件写法,应该是缩进的写法。
改成这样,再继续运行,就可以啦~~~
也可能是这个文件中的其他地方不对,总之一定是这个文件中的。记得在这里找哦~~~
末尾比喻式总结:
Eureka Server就像一个盘子,而应用就像切好的水果,水果得放在盘子里,然后将盘子放在桌子上或者地上,水果才不会脏哦~ 你可以试试,没有盘子的水果单独放在地上,会脏没法吃的(服务运行不起来)
今天收获满满,继续加油丫!!!