SpringCloud第一次课(Eureka)

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上提供的警察局的服务名访问警察局的出警服务

SpringCloud第一次课(Eureka)_第1张图片

开发步骤:

1)创建server-114

​ 勾两个 dev eureka-server 下载依赖

​ application.properties: 端口8761,两个register的false

SpringCloud第一次课(Eureka)_第2张图片
​ Main方法上开启服务

SpringCloud第一次课(Eureka)_第3张图片

​ 启动,访问:http://localhost:8761

SpringCloud第一次课(Eureka)_第4张图片

2)创建server-police

SpringCloud第一次课(Eureka)_第5张图片

Main类上开启Eureka

SpringCloud第一次课(Eureka)_第6张图片

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

SpringCloud第一次课(Eureka)_第7张图片

正常访问查单个

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是启动的

SpringCloud第一次课(Eureka)_第8张图片

四、Eureka集群

1.8761配置

SpringCloud第一次课(Eureka)_第9张图片

2.8762配置

SpringCloud第一次课(Eureka)_第10张图片

3.配置host文件

SpringCloud第一次课(Eureka)_第11张图片

添加如下,如果不能保存,那就拖到桌面改了保存,再拖回去。

在这里插入图片描述
2.在police和person的属性配置文件上注册到8761Eureka服务

SpringCloud第一次课(Eureka)_第12张图片

3.开启114,114-2,police,person

SpringCloud第一次课(Eureka)_第13张图片

查看8761
SpringCloud第一次课(Eureka)_第14张图片

查看8762

SpringCloud第一次课(Eureka)_第15张图片

当我们挂掉任何一台114,不影响person请求police。

你可能感兴趣的:(SpringCloud)