SpringCloud学习笔记1

一、分布式服务架构的发展历程

第一代服务框架
	Dubbo(Java)、Orleans(.Net)等
第二代服务框架
	【Spring Cloud等】
第三代服务框架
	Service Mesh(服务网格) => 例如Service Fabric、lstio、Linkerd、Conduit等

二、SpringCloud介绍

Spring提供了一系列工具,可以帮助开发人员迅速搭建分布式系统中的公共组件(比如:配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态)。协调分布式环境中各个系统,为各类服务提供模板性配置。使用Spring Cloud, 开发人员可以搭建实现了这些样板的应用,并且在任何分布式环境下都能工作得非常好,小到笔记本电脑, 大到数据中心和云平台。

Spring Cloud官网的定义比较抽象,我们可以从简单的东西开始。Spring Cloud是基于Spring Boot的, 最适合用于管理Spring Boot创建的各个微服务应用。要管理分布式环境下的各个Spring Boot微服务,必然存在服务的注册问题。所以我们先从服务的注册谈起。既然是注册,必然有个管理注册中心的服务器,各个在Spring Cloud管理下的Spring Boot应用就是需要注册的client

Spring Cloud使用erureka server,  然后所有需要访问配置文件的应用都作为一个erureka client注册上去。eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。

Spring Cloud作为第二代微服务的代表性框架,已经在国内众多大中小型的公司有实际应用案例。许多公司的业务线全部拥抱Spring Cloud,部分公司选择部分拥抱Spring Cloud。例如,拍拍贷资深架构师杨波老师就根据自己的实际经验以及对Spring Cloud的深入调研,并结合国内一线互联网大厂的开源项目应用实践结果,认为Spring Cloud技术栈中的有些组件离生产级开发尚有一定距离,最后提出了一个可供中小团队参考的微服务架构技术栈,又被称为“中国特色的微服务架构技术栈1.0”:

三、Spring Cloud Netflix 概念

组件名 作用介绍
Eureka 服务治理组件,包含服务注册与发现
Feign 基于Ribbon和Hystrix的声明式服务调用组件(使用的是HTTP协议)
Ribbon 客户端负载均衡的服务调用组件
Zuul 网关组件,提供智能路由、访问过滤等功能
Hystrix 容错管理组件,实现了熔断器
Archaius 外部化配置组件

四、创建一个Eureka注册中心

1、选择三个组件:SpringBoot DevTools、Eureka Server、Spring Web

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>

2、添加配置【注册中心】

#配置Eureka服务 默认端口8761
server.port=7777
eureka.instance.hostname=localhost
#registerWithEureka:false和fetchRegistry:false表明自己是一个eureka server
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

3、启动类添加注解

@SpringBootApplication
//代表是尤里卡注册中心
@EnableEurekaServer
public class SpringcloudeurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudeurekaApplication.class, args);
    }
}

4、启动项目访问;http://localhost:7777 、查看有哪些微服务(现在肯定是空)

五、创建一个Client微服务客户端【Client001】

1、选择三个组件:SpringBoot DevTools、Enreka Discovery Client、Spring Web

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>

2、添加配置【一个微服务】

# 设置服务端口
server.port=8881
#  设置服务名 可以相同、相同则为后面的负载均衡准备
spring.application.name=hello-service
#  设置注册中心地址
eureka.client.service-url.defaultZone=http://localhost:7777/eureka

3、添加Conroller处理器方法

@RestController
@RequestMapping("/student")
public class StudentController {
	
	@RequestMapping("/index001")
	public Object index001() {
		return "student_index001";
	}
}

4、启动类添加注解并进行测试

//@EnableEurekaClient 只支持Eureka注册中心,@EnableDiscoveryClient 支持Eureka、Zookeeper、Consul 这三个注册中心。
@SpringBootApplication
@EnableEurekaClient
public class SpringcloudclientApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudclientApplication.class, args);
    }
}

六、创建另一个Client微服务客户端【Client002】并调用Client001【默认已实现负载均衡】

1、选择四个组件:SpringBoot DevTools、Enreka Discovery Client、Spring Web、OpenFeign

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>

2、添加配置【一个微服务】

server.port=8080
spring.application.name=feign1
eureka.client.service-url.defaultZone=http://localhost:7777/eureka

3、定义远程调用Client001的接口

//value 服务名称
@FeignClient(value = "service1")
public interface FeignService1 {
    @RequestMapping("/index1")
    String test1();
}

4、定义远程调用代码

@RestController
public class TestController {
    @Autowired
    FeignService1 feign;

    @RequestMapping("/test1")
    public String test1(@RequestParam("name")String name){
		System.out.println(name);
        return "其他调用"+feign.test1();
    }
}

5、启动类添加注解并进行测试

@SpringBootApplication(scanBasePackages = "packages")
@EnableEurekaClient
//扫描Feign包
@EnableFeignClients(basePackages = "packages")
public class Springcloudserver1Application {
    public static void main(String[] args) {
        SpringApplication.run(Springcloudserver1Application.class, args);
    }
}
上一篇:「环境搭建」SpringCloud环境搭建以及常用组件


下一篇:微服务架构 | 3.1 Netflix Eureka 注册中心