springcloud(一)服务注册与发现
一.Eureka Server
1.建立项目
1.png
点击Next
2.png
点击Next
3.png
点击Next
4.png
点击Finish完成项目建立。
在EurekaApplication主类里加上一句注解
@EnableEurekaServer
package com.wyh.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
2.配置文件
接下来修改配置文件,我们使用的是yml文件,将application.properties修改为application.yml文件,并添加如下配置内容:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false
#server:
# enable-self-preservation: false
spring:
application:
name: eureka
server:
port: 8761
3.启动服务
然后启动服务,在浏览器URL里面输入localhost:8761
5.png
我们的注册中心便布置好了。
二.Eureka Client的使用
1.新建项目
1.png
点击Next
2.png
点击Next
3.png
点击Next
4.png
点击Finish
在ClientApplication主类里加入注解
@EnableDiscoveryClient
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
2.配置文件
接下来修改配置文件,我们使用的是yml文件,将application.properties修改为application.yml文件,并添加如下配置内容:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: client
在pom.xml文件加入以下依赖,不然可能会无法启动服务
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.启动client
启动client项目,然后刷新页面
5.png
然后我们可以看到名叫client的应用连上了,然后我们点击status下面的ip 192.168.1.111:client,我们可以看到下面的另一个ip页面
6.png
但是有时候我们希望看到的不是ip,我们可以在application.yml里面加入以下配置代码(在eureka下面加入instance:
hostname:clientName)
就可以实现自定义了
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: clientName
spring:
application:
name: client
我们重启client项目,再点击status下面的ip 192.168.1.111:client
7.png
我们可以看到已经自定义链接了
三.Eureka的高可用
高可用.png如上图,为了实现Eureka高可用的,可以将两个Eureka进行互相注册。操作步骤如下:
①.在idea右上角选Edit Configurations...如下图
12.png
进入下列页面
14.png
②点击左上角的如下图标,对EurekaApplication进行copy
13.png
如下图
15.png
③为了区分,将EurekaApplication改为EurekaApplication1,将EurekaApplication(1)改为EurekaApplication2,并分别设置端口,
在EurekaApplication1的VM options里填入 -Dserver.port=8761
在EurekaApplication2的VM options里填入 -Dserver.port=8762,
然后点击Apply确定
E1.png
E2.png
④修改EurekaApplication1的application.yml文件里面的defaultZone将其注册到EurekaApplication2上,并启动服务。
eureka:
client:
service-url:
defaultZone: http://localhost:8762/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
#server:
# port: 8761
management:
server:
servlet:
context-path: /
修改EurekaApplication2的application.yml文件里面的defaultZone将其注册到EurekaApplication1上,并启动服务。
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
#server:
# port: 8761
management:
server:
servlet:
context-path: /
⑤测试页面
分别在URL输入localhost:8761和localhost:8762
localhost8761.png
localhost8762.png
可以观察到,虽然客户端client是注册到Eureka1上,但是Eureka1和Eureka2相互注册了,所以我们也能在Eureka2上看到client。
此时,如果我们把Eureka1服务停掉,但是在Eureka2里面依然可以看到client。但是如果我们关掉client服务,并重启client程序,会发现报错了,这是由于client是注册到Eureka1上的,而Eureka1已经停掉了。
此时由于心跳机制的存在Eureka2上可能还看到client服务,我们将Eureka2重启就没有了。
17.png
我们希望在Eureka1挂了以后,client也可以注册上去,怎么做呢?只要client每次向两个Eureka注册上去就好了
18.png
我们只要修改client的application.yml,配置两个就行
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
# instance:
# hostname: clientName
spring:
application:
name: client
那么如何实现3个Eureka呢?如下图,将三个Eureka进行两两注册,而client就直接配置三个Eureka就好了
19.png
操作步骤如下:
1)修改Eureka1的application.yml,并重启服务
eureka:
client:
service-url:
defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
#server:
# port: 8761
management:
server:
servlet:
context-path: /
2)修改Eureka2的application.yml,并重启服务
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8763/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
#server:
# port: 8761
management:
server:
servlet:
context-path: /
3)按照之前的方式,我们新建Eureka3,并修改application.yml,启动服务
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
#server:
# port: 8761
management:
server:
servlet:
context-path: /
4)修改client的application.yml文件,重启服务
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
# instance:
# hostname: clientName
spring:
application:
name: client
从下面图中可以看到每个Eureka里我们搭建的集群其它的地址情况。
20.png 21.png 22.png
四.Eureka总结
1)@EnableEurekaServer和@EnableEurekaClient分别启动Server和Client
EurekaServer会提供服务注册的功能,各个服务节点启动后,会在EurekaServer中进行注册,这样EurekaServer就有了所有节点的信息,然后我们也看到Eureka界面看到所有注册服务的信息
2)Eureka有心跳检测、健康检查、负载均衡等功能
心跳检测:如果在系统的运行时间,如果有谁挂了,没有在规定的时间发送心跳信号,就会被Eureka西东剔除掉
如果某个服务增加,只要增加服务的实例即可。
3)Eureka的高可用,生产上建议至少两台以上,保证服务的稳定运行。
4)分布式系统中,服务注册中心是最重要的基础部分。