SpringCloud学习笔记
程序员文章站
2022-03-20 11:18:32
...
目录
1.2.SpringCloud 与 SpringBoot 的关系
4)访问Eureka主页http://127.0.0.1:6868/
1.SpringCloud 简介
1.1.什么是 SpringCloud
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用 Spring Boot 的开发风格做到一
键启动和部署。Spring 并没有重复制造*, 它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、 易部署和易维护的分布式系统开发工具包。
Spring Cloud 项目的官方网址:http://projects.spring.io/spring-cloud/
1.2.SpringCloud 与 SpringBoot 的关系
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于 Spring Boot 快速开发单个微服务, Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具;Spring Boot 专注于快速、方便 集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;
Spring Cloud可以不基于 Spring Boot 吗?
不可以。
1.3.SpringCloud 主要框架
服务发现——Netflix Eureka
服务调用——Netflix Feign
熔断器———Netflix Hystrix
服务网关——Netflix Zuul
分布式配置—Spring Cloud Config
消息总线 ——Spring Cloud Bus
1.4.SpringCloud 与 Dubbo 对比
Dubbo 只是实现了服务治理,而 Spring Cloud 下面有 17 个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服
务治理只是其中的一个方面,一定程度来说,Dubbo 只是 Spring CloudNetflix 中的一个子集。
Dubbo | SpringCloud | |
服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务网关 | 无 | Spring Cloud Netflix Zuul |
熔断器 | 不完善 | Spring Cloud Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
…… | …… | …… |
1.5.说说 SpringCloud 的版本
Spring Boot | Spring Cloud |
1.2.x | Angel 版本 |
1.3.x | Brixton 版本 |
1.4.x | Camden 版本 |
1.5.x | Dalston 版本、Edgware 版本 |
2.0.x | Finchley 版本 |
2.服务发现组件 Eureka
2.1.Eureka简介
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目
spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:
EurekaServer和EurekaClient。
2.2.Eureka服务端开发
1)搭建Eureka服务端微服务项目
2)在pom.xml导入eureka服务端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3)在application.yml配置eureka服务端
server:
port: 6868
eureka:
client:
registerWithEureka: false #是否将自己注册到 Eureka 服务中,本身就是,无需注册
fetchRegistry: false #是否从Euraka中获取注册信息
serviceUrl: #Eureka 客户端与 Eureka 服务端进行交互的地址
defaultZone: http://127.0.0.1:${server.port}/eureka/
4)编写启动类(Eureka服务端注解)
package com.tensquare.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}
2.3.Eureka客户端(服务注册)
1)在pom.xml导入eureka客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2)在application.yml配置eureka客户端
server:
port: 9010
spring:
application:
name: tensquare-friend
eureka:
client:
service-url:
defaultZone: http://localhost:6868/eureka
instance:
prefer-ip-address: true
3)在启动类添加Eureka客户端注解
package com.tensquare.friend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class FriendApplication {
public static void main(String[] args) {
SpringApplication.run(FriendApplication.class,args);
}
}
4)访问Eureka主页http://127.0.0.1:6868/
如图所示,我们单个微服务注册成功
2.4.保护模式
如果在EurekaServer的首页看到以下这段提示,则说明Eureka已经进入了保护模式:
EurekaServer在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现
低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导
致),EurekaServer会将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要
用于一组客户端和EurekaServer之间存在网络分区场景下的保护。一旦进入保护模式,
EurekaServer将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是
不会注销任何微服务)。
3. Feign 实现服务间调用
3.1.Feign简介
Feign是简化JavaHTTP客户端开发的工具(java-to-httpclient-binder),它的灵感
来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到HTTP
API的复杂度,不区分是否为restful。
3.2.案例
1)在pom.xml导入feign坐标
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2)在启动类添加Feign注解
package com.tensquare.friend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import util.JwtUtil;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableDiscoveryClient
public class FriendApplication {
public static void main(String[] args) {
SpringApplication.run(FriendApplication.class,args);
}
}
3)编写远程调用接口(*)
package com.tensquare.friend.client;
import entity.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* 调用其他微服务注意事项
* 1.调用方与被调用方都需要注册eureka中
* 2.调用接口需要写上被调用方的服务名,即application.yml中的spring: application: name: tensquare-user
* 3.服务名不能带下划线_,eureka会识别不到
* 4.调用方法跟被调用方contorller方法名一致
* aaa@qq.com记得带上全url,例如最上方的/user
* aaa@qq.com后一定要带上("参数"),参数需要跟上方路径参数一致,否则会识别不到参数
*/
@FeignClient("tensquare-user")
public interface UserClient {
/**
* 更新用户关注数
*/
@RequestMapping(value = "/user/updateFollowcount/{userid}/{x}", method = RequestMethod.PUT)
public Result updateFollowcount(@PathVariable("userid") String userid, @PathVariable("x") int x);
/**
* 更新用户粉丝
*/
@RequestMapping(value = "/user/updateFanscount/{userid}/{x}", method = RequestMethod.PUT)
public Result updateFanscount(@PathVariable("userid") String userid, @PathVariable("x") int x);
}
4)使用远程调用接口完成服务调用
3.3.负载均衡(默认轮询)
测试:同时开启多个基础微服务,看是否是轮流调用。
上一篇: PHP二维数组矩形转置实例分享
下一篇: Python 相关方便小技巧