SpringCloud项目实战整理及详细代码

/** * Spring Cloud:提供了构建分布式系统所需的“全家桶”,比如服务发现、服务网关、服务路由、链路追踪等。 * * Eureka:(优瑞噶) * 服务治理:可以实现服务调用、负载均衡、容错等,实现服务发现与注册。 * 服务注册与发现:Eureka采用了CS的设计架构,Eureka Server服务端作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka Client客户端连接到Eureka Server服务端并维持心跳的连接。 * * Con
摘要由CSDN通过智能技术生成
/** 
 * Spring Cloud:提供了构建分布式系统所需的“全家桶”,比如服务发现、服务网关、服务路由、链路追踪等。
 *
 * Eureka:(优瑞噶)
 *		服务治理:可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
 *		服务注册与发现:Eureka采用了CS的设计架构,Eureka Server服务端作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka  Client客户端连接到Eureka Server服务端并维持心跳的连接。
 *
 * Consul:
 		Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。
 *		它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。
 *
 * Ribbon:
 *		是一个基于HTTP和CP的客户端负载均衡工具,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
 *
 * Feign:
 *		是一个声明式WebService客户端,旨在使编写Java Http客户端变得更容易。
 *		使用方法是定义一个服务接口然后在上面添加注解,以前是Dao接口上面标准Mapper注解,现在是一个微服务接口上面标注一个Feign注解即。
 *		FFeign集成了Ribbon,利用Ribbon维护了Payment的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且一声明式的方法,优雅而简单的实现了服务调用。
 *
 * Hystrix:
 *		ystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等。
 *		Hystrix能保证在一个依赖出问题的情况下,不会导致整个服务失败,避免出现级联故障,以提高分布式系统的弹性。
 *		“断路器”本身是一种开发装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理
 *			的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
 *		Hystrix三大作用:
 *			服务降级(Fallback):比如当服务器忙,请稍后再试,不让客户端等待并立刻返回一个友好提示,Fallback,会发生降级的几种情况:程序运行异常、超时、服务熔断触发服务降级。
 *			服务熔断(Break):类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示。三个步骤先进行服务的降级、进而熔断、恢复调用链路。
 *			实时的监控:会持续地记录所有通过Hystrix发起的请求执行信息,并以统计报表和图形的形式展示给用户,包括没秒执行多少成功,多少失败等。
 *
 * Gateway:
 *		旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
 * 		目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
 *		作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 
 *			API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。
 *		最重要的几个概念:
 *			Route(路由):这是网关的基本构建块,它由一个ID,一个URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
 *			Predicate(断言):输入类类是一个ServerWebExchange。我们可以使用它来匹配来自HTTP请求的任何内容,例如headers。如果请求与断言相匹配则进行路由。
 *			Filter(过滤器):Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者后对请求进行修改。
 *
 * =================总结经验=======================
 *		Eureka 服务端作为服务注册中心,需要声明 @EnableEurekaServer
 *		其他的服务作为单独的服务需要注册在Eureka的注册中心,需要声明 @EnableEurekaClient
 *		OrderFeign作为负载均衡器,不需要作为Eureka的客户端,只需要激活Feign @EnableFeignClients
 			只需要在接口上添加 @FeignClient(name="mcroservice-payment")//使用Feign,使用哪个微服务
 *		Hystrix作为断路器,不需要作为Eureka的客户端,只需要激活Hystrix @EnableHystrixDashboard
 *			在控制类上添加 @DefaultProperties(defaultFallback = "paymentTimeOutFallbackMethod")
 *			然后再接口上添加 @FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",fallback = PaymentFallbackService.class)
 *		GateWay作为网关,需要作为Eureka客户端
 *			通过application配置文件配置,
 *				 spring:
 *				  cloud:
 *					  gateway:
 *						discovery:
 *						  locator:
 *							enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称j进行路由
 *						routes:
 *						  - id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
 *						   #匹配后提供服务的路由地址
 *							#uri: http://localhost:8001
 *							uri: lb://MCROSERVICE-PAYMENT
 *							predicates:
 *							  - Path=/payment/get/** # 断言,路径相匹配的进行路由
 *							  #- After=2020-11-20T14:17:43.912+08:00[Asia/Shanghai] #断言在当前时间之后才可以访问
 *						  - id: payment_route2
 *							#uri: http://localhost:8001
 *							uri: lb://MCROSERVICE-PAYMENT
 *							predicates:
 *							  Path=/payment/lb/** #断言,路径相匹配的进行路由
 *			或者通过代码实现
 *				@Bean
 *				public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
 *					RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
 *					routes.route("patn_route_buba",r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();
 *					return routes.build();
 *				}
 *		
 *
 *
 *
 * Ribbon本地负载均衡与Nginx服务端负载均衡的区别?
 *	Nginx是服务器的负载均衡,客户端所有的请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。
 *	Ribbon本地负载均衡,在调用服务接口的时候,会在注册中心上获取注册信息服务列表之后缓冲到JVM本地,从而在本地实现RPC远程服务调用技术。
 *
 * LB负载均衡分为哪两种?
 *	集中式LB,即在服务的消费方和提供方之间是有独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方。
 *	进程内LB,将LB逻辑集成于消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个 合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程。

**/

/* 
 * mcroservice:总项目名
 */
	
/* cloud-api-commons */

	创建一个实体类和返回数据类型

/* cloud-provide-payment */

	服务生产者:
		POM文件:表示自己是eureka客户端
			<dependency>
				  <groupId>org.springframework.cloud</groupId>
				   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			 </dependency>
		application文件:
			eureka:
			  client:
				#表示是否将自己注册进eureka  默认为true
				register-with-eureka: true
				#是否从EurekaServer中抓取已有的注册信息,默认为true,单点无所谓,集群必须设置true才能和ribbon使用负载均衡
				fetch-registry: true
				service-url:
					#defaultZone: http://localhost:7001/eureka	#单机配置
					defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka	#集群配置
		启动类上增加注解:@EnableEurekaClient
		//===================================================
		Eureka实现服务发现://注入服务发现的注解
					@Autowired
					private DiscoveryClient discoveryClient;
		在启动类上加上注解@EnableDiscoveryClient

/* cloud-consumer-order */

	服务消费者:
		使用@Configuration创建一个配置类注入到IOC容器中,创建一个使用RestTemplate访问远程http服务的方法,配合@Bean加载到容器中,
			方法上加@LoadBalanced表示开启负载均衡
		POM文件:表示自己是eureka客户端
			<dependency>
				  <groupId>org.springframework.cloud</groupId>
				   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			 </dependency>
		application文件:
			eureka:
			  client:
				#表示是否将自己注册进eureka  默认为true
				register-with-eureka: true
				#是否从EurekaServer中抓取已有的注册信息,默认为true,单点无所谓,集群必须设置true才能和ribbon使用负载均衡
				fetch-registry: true
				service-url:
					#defaultZone: http://localhost:7001/eureka	#单机配置
					defaultZone: http://eureka7001.com:7001/eureka
  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值