spirngcloud入门(1)

springCloud

微服务,只提供服务,不像以前要做jsp页面,提供rest的服务,不管是任何语言都能使用服务

一,面试题

1,什么微服务

2,微服务之间是如何独立通讯的

3,springCloud和Dubbo有哪些区别

1,通讯机制的区别:dubbo基于rpc,远程过程调用,springCloud基于·Http的RESTful调用

4,springBoot和springCloud,谈谈对他们的理解

5,什么是服务熔断?什么事服务降级?

6,微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?

7,你所知道的微服务技术栈有哪些?请 列举一二

8,eureka和zookeeper都可以提供服务注册与发现功能,请说说两个的区别?

二,微服务概述

1,微服务是什么?

学术维度:

它提倡将单一应用程序划分成一组小的服务,每个服务再其独立的自己的进程中,服务之间互相协调,互相配合,为用户提供价值

技术维度理解:

微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能,一个服务做一件事,从技术角度看就是一种小儿独立的处理过程,类似进程概念能够自行单独启动或销毁,拥有自己独立的数据库。

2,微服务与微服务架构

微服务:

强调的是服务的大小,它关注的是某一个点,是具体解决某个问题/提供落地对应服务的一个服务应用,狭义的看,可以看作eclipse里面的一个个微服务工厂

微服务架构:、

微服务架构是一种架构模式,它提倡将单一应用程序划分一组小的服务,服务之间互相协调,互相配合,每个服务运行在其独立的进程中,服务于服务间采用轻量级的通讯机制互相协作(通常是基于Http协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境,类生产环境等。另外,应当尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建。

3,微服务优缺点

优点:

每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求

开发简单,开发效率提高,一个服务可能就是专一的只干一件事

微服务能够被小团队单独开发

微服务是松耦合,是有功能意义的服务,无论是在开发阶段或部署阶段都是对立的、

微服务能使用不同的语言开发

易于和第三方集成,微服务允许容易灵活的方式继承自动部署,通过持续集成工具,如jenkins,hudson

微服务只是业务逻辑代码,不会和html,css或其他界面组件融合

每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库

缺点:

开发人员处理分布式系统的复杂性

多服务运维难道,随着服务的增加,运维的压力增加

系统部署依赖

服务间通讯成本

数据的一致性

系统集成测试

性能监控

4,微服务技术栈有哪些?

微服务条目落地技术
服务开发springboot,spring,springMVC
服务配置与管理Netflix公司的Archaius,阿里Diamond等
服务组成与发现Eureka,Consul,zookeeper等
服务的调用REST,RPC,GRPC
服务的熔断器Hystrix,Envoy等
负载均衡Ribbo,Nginx等
服务接口调用(客户端调用服务的简化工具)Feign等
消息队列kafka,RabbitMQ,ActiveMQ等
服务配置中心管理springCloudConfig,chef等
服务路由(API网关)zuul
服务监控Zabbix,Nagios,Metrics,Spectator等
全链路追踪Zipkin,Brave,Dapper等
服务部署Docker,OpenStack,Kuber
数据流操作开发包springCloud Stream(封装与redis,rabbit,kafka等发送接收消息)
事件消息总线springCloud Bus

5,为什么选择springcloud作为微服务架构

选型依据:

整体解决方案和框架成熟度

社区热度

可维护性

学习曲线

三,springCloud入门概述

springcloud是什么?

springCloud,基于springboot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全栈路由监控,服务网关,负载均衡,熔断器等组件,除了基于Netflix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件

springcloud利用springBoot的开发便利性巧妙的简化分布式系统的基础设施的开发,springcloud为开发人员提供了快捷构建分布式系统的一些工具,包括配置管理,服务发现,断路由,路由,微服务,事件总线,全局锁,决策竞选,分布式会话等,,它们都可以用springboot的开发风格做到一键启动与部署.

springcloud是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶

springcloud和springboot是什么关系?

springboot专注于快速方便开发单个个体

springcloud是关注全局的微服务协调治理框架,它将springboot开发的一个个单个微服务整合并管理起来,为各个微服务之间提供,配置管理,服务发现,断路由,路由,微服务,事件总线,全局锁,决策竞选,分布式会话等集成服务。

springBoot可以离开springcloud独立使用开发项目,但是springcloud离不开springboot,属于依赖关系。

总结:springboot专注于快速,方便 的开发单个微服务个体,springcloud关注全局的服务治理框架。

springcloud和Dubbo的对比?

 Dubbospring cloud
服务注册中心zookeeperspring cloud Netfix Eureka
服务调用中心RPCREST API
服务监控Dubbo-monitorspring boot Admin
断路由器不完善spring cloud Netfix Hystrix
服务网关spring cloud Netfix Zuul
分布式配置spring cloid Config
服务跟踪spring cloud sleuth
消息总线spring cloud Bus
数据流spring Cloud Stream
批量任务Spring Cloud Task

最大的区别:springcloud抛弃了Dubbo的RPC通讯,采用的是基于http的rest方式

springcloud文档参考:

https://springcloud.cc/spring-cloud-netflix.html

api文档:

http://cloud.spring.io/spring-cloud-static/Dalston.SR1/ 英文版

https://springcloud.cc/spring-cloud-dalston.html 中文版

社区:

http://springcloud.cn/ 中国社区

https://springcloud.cc

使用maven打包需要

<repositories>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
View Code

四,REST微服务案例

lombok的使用,实体类

@AllArgsConstructor  //全参构造函数
@NoArgsConstructor   //无参构造函数
@Data                 //set和get
@Accessors(chain = true)   //链式编程
public class Dept implements Serializable {
View Code

(1)RestTemplate的使用

RestTemplate提供了多种便捷访问远程Http服务的方法, 是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

官网api

https://docs.spring.io/spring-framework/docs/4.3.7.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap, ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

@RequestMapping(value="/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id, Dept.class);
    }
View Code

五,Eureka服务注册与发现

Eureka是什么

Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。

Eureka的基本架构

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。

Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

 

Eureka包含两个组件:Eureka Server和Eureka Client Eureka Server提供服务注册服务 各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

EurekaClient是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

建议使用springcloud的版本为Greenwich M1,Finchley SR2(支持springboot2.x以上版本)

Eureka server的使用

1,创建一个Eureka server工程

2,引入依赖

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
View Code

3.配置服务

server:
  port: 7001

eureka:
  instance:
    hostname: localhost #eureka服务端的实例名称
  client:
    register-with-eureka: false #false表示不向注册中心注册自己。
    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:   #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  

4,主配置类

@EnableEurekaServer  //EurekaServer服务器端启动类,接受其它微服务注册进来

Eureka client端

服务提供端

2,引入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
View Code

3,配置

spring:
   application:
    name: microservicecloud-dept
eureka:
  client:
    service-url:  #客户端注册进eureka服务列表内
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: microservicecloud_8001  #自定义服务名称信息
    prefer-ip-address: true   #访问路径可以显示IP地址

4,主配置类

@EnableEurekaClient   //本服务启动后会自动注册进eureka服务中

@EnableDiscoveryClient@EnableEurekaClient的区别:

就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。

 

5,添加服务的监控

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

下节我们继续谈Eureka服务

转载于:https://www.cnblogs.com/mjie/p/10186999.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值