博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring cloud服务的注册与发现(Eureka)
阅读量:4069 次
发布时间:2019-05-25

本文共 7890 字,大约阅读时间需要 26 分钟。

一、spring cloud简介

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的,所以需要开发中对springboot有一定的了解,如果不了解的话可以看这篇文章:。另外对于“微服务架构” 不了解的话,可以通过搜索引擎搜索“微服务架构”了解下。

二、创建服务注册中心

在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。

2.1 首先创建一个maven主工程。

2.2 然后创建2个model工程:一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。

下面以创建server为例子,详细说明创建过程:

右键工程->创建model-> 选择spring initialir 如下图:

Paste_Image.png

下一步->选择cloud discovery->eureka server ,然后一直下一步就行了。

Paste_Image.png

创建完后的工程的pom.xml文件如下:

4.0.0
com.forezp
eurekaserver
0.0.1-SNAPSHOT
jar
eurekaserver
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Dalston.RC1
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false

2.3 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加:

@EnableEurekaServer@SpringBootApplicationpublic class EurekaserverApplication {    public static void main(String[] args) {        SpringApplication.run(EurekaserverApplication.class, args);    }}

创建服务监听类

import com.netflix.appinfo.InstanceInfo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.cloud.netflix.eureka.server.event.*;import org.springframework.context.event.EventListener;import org.springframework.stereotype.Component;@Componentpublic class EurekaStateListener {    private final static Logger logger=LoggerFactory.getLogger(EurekaStateListener.class);    @EventListener    public void listen(EurekaInstanceCanceledEvent event) {        logger.info("服务{}已下线", event.getAppName());        logger.info("server地址信息{}", event.getServerId());    }    @EventListener    public void listen(EurekaInstanceRegisteredEvent event) {        InstanceInfo instanceInfo=event.getInstanceInfo();        logger.info("服务{}进行注册", instanceInfo.getAppName() + instanceInfo.getHostName() + "  " + instanceInfo.getIPAddr() + "  " + instanceInfo.getPort());    }    @EventListener    public void listen(EurekaInstanceRenewedEvent event) {        logger.info("服务{}进行续约", event.getServerId() + "  " + event.getAppName());    }    @EventListener    public void listen(EurekaRegistryAvailableEvent event) {        logger.info("注册中心启动,{}", System.currentTimeMillis());    }    @EventListener    public void listen(EurekaServerStartedEvent event) {        logger.info("注册中心服务端启动,{}", System.currentTimeMillis());    }}

这里只是简单的记录,实际项目还是要做大量的通知

**2.4 **eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。eureka server的配置文件appication.yml:

server:  port: 8761eureka:  instance:    hostname: localhost  client:    registerWithEureka: false    fetchRegistry: false    serviceUrl:      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.

2.5 eureka server 是有界面的,启动工程,打开浏览器访问:

,界面如下:

Paste_Image.png

No application available 没有服务被发现 ……^_^

因为没有注册服务当然不可能有服务被发现了。

三、创建一个服务提供者 (eureka client)

当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。

创建过程同server类似,创建完pom.xml如下:

4.0.0
com.forezp
service-hi
0.0.1-SNAPSHOT
jar
service-hi
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Dalston.RC1
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false

通过注解@EnableEurekaClient 表明自己是一个eurekaclient.

@SpringBootApplication@EnableEurekaClient@RestControllerpublic class ServiceHiApplication {    public static void main(String[] args) {        SpringApplication.run(ServiceHiApplication.class, args);    }    @Value("${server.port}")    String port;    @RequestMapping("/hi")    public String home(@RequestParam String name) {        return "hi "+name+",i am from port:" +port;    }}

仅仅@EnableEurekaClient是不够的,还需要在配置文件中注明自己的服务注册中心的地址,application.yml配置文件如下:

eureka:   instance:   # 每间隔1s,向服务端发送一次心跳,证明自己依然”存活“   lease-renewal-interval-in-seconds: 1   # 告诉服务端,如果我2s之内没有给你发心跳,就代表我“死”了,将我踢出掉。     lease-expiration-duration-in-seconds: 2   #页面上链接到实际ip地址   prefer-ip-address: true  client:    serviceUrl:      defaultZone: http://localhost:8761/eureka/server:  port: 8762spring:  application:    name: service-hi

需要指明spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name 。

启动工程,打开 ,即eureka server 的网址:

Paste_Image.png

你会发现一个服务已经注册在服务中了,服务名为SERVICE-HI ,端口为7862

这时打开 ,你会在浏览器上看到 :

hi forezp,i am from port:8762

源码下载:

 

全部教程:

 

SpringBoot--将微服务注册到Eureka Server上

pom.xml

org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-dependencies
Camden.SR6
pom
import

启动类加入

@EnableEurekaClient

 

转载地址:http://fshji.baihongyu.com/

你可能感兴趣的文章
把log4j的日志信息打印到swing组件上
查看>>
把log4j的日志信息打印到swing组件上
查看>>
ext中对Gridpanel的理解
查看>>
ext中在panel中动态添加一个panel
查看>>
修改extjs中表格的默认高度
查看>>
ext中的reader何proxy
查看>>
ext中的formpanel嵌套出现的问题
查看>>
最近状况
查看>>
winform中的状态栏,以及在状态栏目上显示时间
查看>>
给Winform添加登陆的form
查看>>
HttpWebRequest的一些认识
查看>>
HttpWebRequest发送Post数据
查看>>
HttpWebrequest来模拟登陆的全过程
查看>>
c#里面的覆盖
查看>>
DataGridView初试
查看>>
自定义DataGridView的复选框列,点击最后一个会自动多出来一行的解决
查看>>
SplitContainer的一些实际开发经验
查看>>
Log4net输出信息到RichTextBox
查看>>
在北大学习这几天
查看>>
一个关于Http的请求头Expect
查看>>