前言
其实本人觊觎微服务已经很久了,也曾拜读过各位大咖的相关书籍,最近唯独对Spring Boot、Spring Cloud超感兴趣,毕竟这两者在互联网公司里的地位可是举足轻重的。初见Springcloud,抱着研究+应用的心态,本次系列文章会围绕着SpringCloud就微服务提供的一整套解决方案进行研究学习总结,拒绝浅尝辄止,拒绝空谈架构,更注重实际的工作应用。(注:本系列文章着重是自己的学习总结,不敢作为学习型文章)
-------------------------------------------------------------------------------------------------------
正文开始。。。
SpringCloud也是基于SpringBoot构建的,我也是深深的被SpringBoot的COC(Convention over Configuration)、避免冗余配置和各种基于注解的配置开发所着迷,只是苦于当前项目组的架构,还在沿袭老的一套spring架构(不是对原有的spring有偏见,只是对众多的配置感到力不从心,每次都要copy大量的配置文件,而且极易出错,排查也要浪费时间成本),下面就服务的注册于发现的实操进行简单梳理,包括相关配置信息及代码等,后续文章推送相关深层次内容。
Spring Cloud Eureka 是Spring Cloud Netflix微服务套件的一部分,主要服务于微服务架构中的服务治理(可以粗略认为和Dubbo的功能差不多吧),Spring Cloud Eureka 能够和SpringBoot很好的进行结合,方面我们能够利用Spring Boot的优良特性去进行体系的整合。
一、了解Eureka的服务端和客户端
Eureka的服务端即是我们通常所说的服务注册中心,如果了解过ZK的小伙伴能够很好的了解服务注册中心,只不过Eureka是基于AP理论,保证了我们的服务注册中心的高可用。客户端是我们用来发现服务并调用服务的主要处理者,可以利用注解和参数配置的方式来嵌入到客户端程序代码中,以确保在我们的程序在运行中能够向服务注册中心进行注册服务并利用心跳检测机制来检测当前服务提供者的状态。
二、简单示例--单机环境
1、创建注册中心
1)、构建名称为eureka-server的SpringBoot项目,并引入相应的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2)、在Application的启动类中添加@EnableEurekaServer注解,标明当前为服务的注册中心
3)、在application.properties中增加一下配置信息:
server.port=8081
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.instance.hostname=localhost //当前的服务注册中心的地址
eureka.client.register-with-eureka=false//避免该服务注册中心向中心注册自己的地址
eureka.client.fetch-registry=false //该服务注册中的主要职责是维护服务的示例,而不是去发现检索服务,设为false eureka.client.serverUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
4)、运行Application启动类或者通过maven打包 mvn clean package -Dmaven test.skip=ture后通过java-jar xxxxx.jar --server.port=8080来运行,输入http://locahost:8080发现eureka的注册中心的页面(当然目前没有什么服务被注册)
2、创建服务提供者
1)、同第一步创建名为eureka-client的springboot项目,添加对应依赖
2)、在Application启动类中添加@RestController、@EnableDiscoveryClient标明当前为服务提供者
3)、模拟代码如下:
@SpringBootApplication
@RestController
@EnableDiscoveryClient
public class EurekaClientApplication {
private static final Logger logger = LoggerFactory.getLogger(EurekaClientApplication.class);
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value = "/hello_mic",method = RequestMethod.GET)
public String hello_mic(){
return "hello world";
}
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
4)、配置application.properties的相关配置
server.port=8082 / /单机环境下避免端口冲突
spring.application.name =helloService//当前服务名
eureka.client.serverUrl.defaultZone=http://localhost:8080/eureka //注册中心的地址
5)、同上步骤打包运行,刷新http://localhost:8080发现已有当前名为helloService的服务实例。
三、集群环境
原理:多台注册中心之间相互注册,以自己作为服务提供方,向其他的注册中心注册自己的服务,这样形成的注册中心网,实现服务清单的同步。
在服务的发现与消费中,我们了解到,作为Eureka-server作为服务的注册中心维护服务实例清单,服务的发现与消费是服务消费者的主要目标,eurekaClient帮助我们完成服务的发现,Ribbon完成服务的消费(后续介绍Ribbon)。
文以至此,对当前的Spring Cloud Eureka已经有个大体的了解和认知,当然在真正的开发环境中并非如此简单,更多的内容等待着我们去探讨和研究。鉴以此文记录自己探索Spring Cloud的第一步。