【JAVA】Spring Cloud

3 篇文章 0 订阅

概述

Spring Cloud是一个基于Spring Boot实现的云应用开发工具;
Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;

主要框架

服务发现 —— Netflix Eureka

Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

服务端:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐netflix‐eurekaserver</artifactId>
</dependency>
server:
	port: 6868 #服务端口
eureka:
	client:
		registerWithEureka: false #是否将自己注册到Eureka服务中,本身就是所有无需注册
		fetchRegistry: false #是否从Eureka中获取注册信息
		serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址
			defaultZone: http://127.0.0.1:${server.port}/eureka/
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
	public static void main(String[] args) {
		SpringApplication.run(EurekaServer.class, args);
	}
}

客户端:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐netflix‐eurekaclient</artifactId>
</dependency>
eureka:
	client:
		service‐url:
			defaultZone: http://localhost:6868/eureka
	instance:
		prefer‐ip‐address: true
@EnableEurekaClient

服务调用 —— Netflix Feign

Feign实现服务间的调用,是简化Java HTTP客户端开发的工具(java-to-httpclient-binder)
Feign 整合了Ribbon,具有负载均衡的能力;整合了Hystrix,具有熔断的能力。
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐openfeign</artifactId>
</dependency>
// 启动类添加注解
@EnableDiscoveryClient
@EnableFeignClients
// @FeignClient注解用于指定从哪个服务中调用功能,里面的名称与被调用的服务名保持一致,并且不能包含下划线。
@FeignClient("test‐base")
public interface LabelClient {
	// @RequestMapping注解用于对被调用的微服务进行地址映射。@PathVariable注解一定要指定参数名称,否则出错
	@RequestMapping(value="/label/{id}", method = RequestMethod.GET)
	public Result findById(@PathVariable("id") String id);
}

负载均衡 —— Ribbon

ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。

熔断器 —— Netflix Hystrix

1、雪崩效应:在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。
2、豪猪 Hystrix 能使系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使系统能更快地从异常中恢复。
3、Feign 本身支持Hystrix,不需要额外引入依赖。
feign:
	hystrix:
		enabled: true
@component
@FeignClient(value="test‐base",fallback = FallbackImpl.class)
public interface MyFeignService {
	@RequestMapping(value = "/inner/myRequestTest"), method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	String myRequestTest(@RequestBody MyDTO dto);
}
@component
@RequestMapping("/FallbackImpl")
public class MyFeignServiceImpl implements MyFeignService {
	@Override
	public String myRequestTest(MyDTO dto) {
		return JsonUtil.convertObjectToJson(MyConstant.TIMEOUT_ERROR);
	}
}

链路追踪 —— Sleuth

由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,就必须实现分布式链路追踪。

链路追踪 —— Zipkin

Zipkin 是一个优秀的开源链路追踪组件,主要在Spring Cloud Sleuth中集成使用。

服务网关 —— Netflix Zuul

微服务网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过微服务网关。
Zuul组件的核心是一系列的过滤器,这些过滤器可以完成:身份认证和安全、审查与监控、动态路由、压力测试、负载分配、静态响应处理、多区域弹性。
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐netflix‐zuul</artifactId>
</dependency>
zuul:
	routes:
		test‐base: #基础
			path: /base/** #配置请求URL的请求规则
			serviceId: test‐base #指定Eureka注册中心中的服务id
		test‐user: #用户
			path: /user/** #配置请求URL的请求规则
			serviceId: test‐user #指定Eureka注册中心中的服务id

分布式配置 —— Spring Cloud Config

在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐config‐server</artifactId>
</dependency>
spring:
	application:
		name: test‐config
	cloud:
		config:
			server:
				git:
					uri: https://gitee.com/mypro/test‐config.git
server:
	port: 12000

消息总线 —— Spring Cloud Bus

SpringCloudBus 不重启微服务的情况下,实现配置的自动更新。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值