Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
(1) 职责单一原则(Single Responsibility Principle):把某一个微服务的功能聚焦在特定业务或者有限的范围内会有助于敏捷开发和服务的发布。
(2) 设计阶段就需要把业务范围进行界定。需要关心微服务的业务范围,而不是服务的数量和规模尽量小。数量和规模需要依照业务功能而定。
(3) 于SOA不同,某个微服务的功能、操作和消息协议尽量简单。
(4) 项目初期把服务的范围制定相对宽泛,随着深入,进一步重构服务,细分微服务是个很好的做法。
Spring Cloud Eureka
Spring Cloud Eureka来实现服务治理。
Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
Eureka Server
提供服务注册和发现
添加依赖
在项目 spring-cloud-eureka-service pom.xml中引入需要的依赖内容:
4.0.0
io.ymq.example
spring-cloud-config-server
0.0.1-SNAPSHOT
jar
spring-cloud-config-server
Config Server Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Finchley.RELEASE
pom
import
org.springframework.boot
spring-boot-maven-plugin
开启服务注册
通过 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话,这个注解需要在springboot工程的启动application类上加
package io.ymq.example.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
添加配置
在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties配置文件中增加如下信息:
#端口号
server.port=8761
#应用名称
spring.application.name=eureka-server
eureka.instance.hostname=192.168.0.102
#代表不向注册中心注册自己
eureka.client.register-with-eureka=false
#维护服务实例,不需要检索服务
eureka.client.fetch-registry=false
#eureka监控平台地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
访问服务
启动工程后,访问:http://192.168.0.102:8761/
可以看到下面的页面,其中还没有发现任何服务。
Service Provider
服务提供方
将自身服务注册到 Eureka 注册中心,从而使服务消费方能够找到
添加依赖
在项目 spring-cloud-eureka-provider pom.xml中引入需要的依赖内容:
4.0.0
io.ymq.example
spring-cloud-config-client
0.0.1-SNAPSHOT
jar
spring-cloud-config-client
Config Cclient Demo project for Spring Boot
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-dependencies
Finchley.RELEASE
pom
import
org.springframework.boot
spring-boot-maven-plugin
开启服务注册
在应用主类中通过加上 @EnableEurekaClient,但只有Eureka 可用,你也可以使用@EnableDiscoveryClient。需要配置才能找到Eureka注册中心服务器
package io.ymq.example.config.client;
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.RestController;
@RestController
@SpringBootApplication
@EnableEurekaClient
//@EnableDiscoveryClient
/**
* @EnableEurekaClient
* @EnableDiscoveryClient
* 两个注解任选其一都是可以的
*/
public class ConfigClientApplication {
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "port:" + port;
}
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
添加配置
需要配置才能找到Eureka服务器。例:
完整配置
server.port=8088
spring.application.name=eureka-client
eureka.client.serviceUrl.defaultZone=http://192.168.0.102:8761/eureka
访问服务
启动该工程后,再次访问启动工程后:http://192.168.0.102:8761/
可以如下图内容,我们定义的服务被成功注册了。
源码下载
GitHub:https://github.com/15029274098/springboot2.x-.git
如果使用springboot2.x版本(2.0以及以上),springcloud使用Finchley.RELEASE使用发行版,
这种版本都是稳定版的,不建议使用其他版本
其实spring-cloud-starter-netflix-eureka-server和spring-cloud-starter-eureka-server的区别:
我们如果使用springboot 1.x版本使用不带netflix的(spring-cloud-starter-eureka-server),
springboot2.x版本使用netflix的(spring-cloud-starter-netflix-eureka-server)
这两种方式都可以使用,任选其一,都可以实现客户端注册注册到注册中心