springcloud(一)服务注册与发现

2018-11-09  本文已影响0人  寻找大海的鱼

一.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)分布式系统中,服务注册中心是最重要的基础部分。

上一篇下一篇

猜你喜欢

热点阅读