SpringCloud第一次课
一、架构演进
1.单体应用(二阶段项目)
特点:所有的代码都在一个项目当中。
打成war包部署在web容器(Tomcat/JBoss/Weblogic)中
项目和数据库分离
项目集群(Tomcat集群)和数据库集群(MySQL集群、Oracle集群)
优点:
简单,开发成本低,用于小型项目
缺点:
不能用于大型项目,扩展差,不能用太新的技术
性能受硬件(集群中的节点)限制
集群通过增加节(电脑)点来实现,成本高
2.垂直架构
特点:将一个项目拆成多个子项目
缺点:性能受硬件限制
3.SOA架构
特点:将公共的服务抽取出来
各服务之间用WebService通信
通过企业服务总线来做中间件
4.微服务架构
特点:将一个项目拆成多个微服务,并且可以独立运行。
缺点:技术要求高,不易掌握
二、SpringCloud五大组件
名称 | 功能 |
---|---|
Eureka(尤瑞卡) | 基于REST服务的分布式中间件,主要用于服务管理。 |
Ribbon(瑞嘣) | 负载均衡框架。 |
Hystrix(黑死去咯死) | 容错框架,通过添加延迟阀值以及容错的逻辑,来帮助我们控制分布式系统间组件的交互。 |
Feign(粪~) | 一个REST客户端,目的是为了简化Web Service客户端的开发。 |
Zuul(祖m) | 为微服务集群提供过代理、过滤、路由等功能。 |
三、Eureka:服务的注册与发现 8761
说明:
114是服务器
警察局是服务提供者
人是消费者
1.警察局注册到114,并提供出警服务(查单个)
2.人注册到114
3.通过114上提供的警察局的服务名访问警察局的出警服务
开发步骤:
1)创建server-114
勾两个 dev eureka-server 下载依赖
application.properties: 端口8761,两个register的false
启动,访问:http://localhost:8761
2)创建server-police
Main类上开启Eureka
3)创建server-person,同上,修改application.properties和Main类,尤其注意注册到哪台Eureka服务器
测试:先启动114再启动police最后person服务,8761上可以查看已经注册上来的微服务
关掉之前的三个服务,开始编写提供服务的police微服务
4)警察局提供出警服务(查单个)
public class Police implements Serializable {
private Integer id;
private String name;
public Police() {
}
public Police(Integer id, String name) {
this.id = id;
this.name = name;
}
//set/get...
}
@RestController
@RequestMapping("/police")
public class PoliceController {
//出警
@RequestMapping(value="findOne/{id}",produces = { "application/json;charset=UTF-8"})
public Police findOne(@PathVariable("id") Integer id){
//http://localhost:8001/police/findOne/8888
Police police = new Police(id,"刘德华");
return police;
}
}
启动114,启动police,访问8761和8001
正常访问查单个
5)编写person
@RestController
@Configuration
@RequestMapping("/person")
public class PersonController {
//负载均衡
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping(value="call/{id}",produces = { "application/json;charset=UTF-8"})
public String call(@PathVariable("id")Integer id){
RestTemplate restTemplate = getRestTemplate();
//http://localhost:8001/police/findOne/8888
String url="http://serverpolice/police/findOne/"+id;
String json = restTemplate.getForObject(url, String.class);
return json;
}
}
说明
@Configuration
1.@Configuration注解底层是含有@Component ,所以@Configuration 具有和 @Component 的作用。
2.@Configuration注解相当于spring的xml配置文件中<beans>标签,里面可以配置bean。
@Bean
1.@Bean注解相当于spring的xml配置文件<bean>标签,告诉容器注入一个bean。
2.@Bean注解的方法上如果没通过bean指定实例名,默认实例名与方法名相同。
3.@Bean注解默认为单例模式,可以通过@Scope("prototype")设置为多例。
@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力:
Ribbon:负载均衡
启动访问测试
要保证114和police和person是启动的
四、Eureka集群
1.8761配置
2.8762配置
3.配置host文件
添加如下,如果不能保存,那就拖到桌面改了保存,再拖回去。
2.在police和person的属性配置文件上注册到8761Eureka服务
3.开启114,114-2,police,person
查看8762
当我们挂掉任何一台114,不影响person请求police。