Spring微服务实战--注解版

第一章 欢迎迈入云世界

导语–本系列文章是基于《Spring微服务实战》,鉴于一些同学没有微服务方面的经验和实战,可能阅读本书的难度略微大些,我尽量在原著的基础上,以更直白的语言和明晰的结果图展示给大家,帮助大家了解微服务。

微服务之前的开发,用的是传统的单体结构,即常写的service层,dao层,conroller层,业务不分家,所有的业务逻辑在一个project中,每当修改一个业务逻辑时,整个应用程序都需要重建、重新冒烟、重部,每次的感觉都是牵一发而动全身,我们经常会在传统行业中见到这种开发模式或者应用结构,例如银行业、保险业、政务等等…
鉴于上述单体结构的缺点,微服务应运而生,我直接引用文中的话,什么是微服务,微服务就是一个小的、松耦合的分布式服务。微服务将一个大的应用拆分成具有严格意义的便于管理的单个服务,举个例子,用户服务就只用于管理用户,如注册、登录等,金融服务就只负责金融交易等,如转账、代发工资等。但是他们又是相互协调的,转账不可能离开用户,因为其要用到用户的账号等信息;但是他们又是单一职责的,各自为政;他们之间需要通信,如转账时去用户服务拿收付方的信息,他们是通过基本的协议进行通信(通常是HTTP+JSON)的;微服务也是跨语言的,就像JVM的设计者当初的设想一样,JVM并不是单独为Java语言服务的,微服务对于采用什么技术实现并没有什么建议和影响。但是微服务的目标是明确的,使拥有明确责任领域的各个小型开发团队,共同协作,提供更好的、更快的交付和解决方案。下图简单示意下微服务。
在这里插入图片描述
这本书基本上是基于三个框架实现的,即Spring、SpringBoot、SpringCloud,这三个框架也成了当今面试后端开发中高级岗位必备的三种技术。Spring的核心就是依赖注入,比较形象的比喻就是把一个一个的bean当成积木,Spring负责将他们生产并且组装;用过Spring的都清楚,它那一堆XML着实又难看又难懂,SpringBoot是对Spring的重新思考,基于SpringMVC,以注解代替xml配置,自带tomcat,又容易与第三方框架集成,从而提供了一个基于java的面向REST的微服务框架,也方便打包和部署;当服务部署在公有云时,微服务成为了更常见的架构,SpringCloud为这一切搭起了更简易 的桥梁,它在一个公共框架下集成封装了多个流行的微服务框架,实现了服务的注册、发现、负载均衡、网关等多种功能,成为了微服务开发的较好选择。
不知道平时大家用什么IDE,是Eclipse还是IDEA,我见我刚毕业的一位同事,第一次用IDEA配Tomcat,花费了一上午。其深感用基本的MVC,搭建一个web应用的难处,再加上对于Tomcat的不熟练,更加头疼。SpringBoot不会再让你感到为难,一起看下第一个简单的SpringBoot服务。
先简单看下基本的用户请求处理过程吧,应该大部分人都清楚。
在这里插入图片描述
本系列实验需要用到IDE和客户端调用工具PostMan。对应的代码可以在作者的GitHub上下载,对应的地址是https://github.com/carnellj/。
我们就以作者的例子进行演示。事先说明一点,本书作者的演示都是在docker中进行的,可能有的同学没有用过docker,没有用过docker的可以直接在IDE中启动程序就可以了,或者用命令行启动(在对应的位置输入mvn spring-boot:run)。

package com.thoughtmechanix.simpleservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.PathVariable;

//这个注解告诉框架,这里是整个服务的入口
@SpringBootApplication
//要将代码公开为一个Controller
@RestController
//映射路径,类级别的,以/hello开头
@RequestMapping(value="hello")
public class Application {
   //程序入口
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    /**
     * 方法级别的映射
     * @param firstName
     * @param lastName
     * @return
     */
    @RequestMapping(value="/{firstName}/{lastName}",method = RequestMethod.GET)
    //@PathVariable的作用将url中的参数映射到方法中对应的参数
    public String hello( @PathVariable("firstName") String firstName,
                         @PathVariable("lastName") String lastName) {

        return String.format("{\"message\":\"Hello %s %s\"}", firstName, lastName);
    }
}

直接在main上启动就可以了。我们看下启动日志

在这里插入图片描述
用Postman进行调用,结果如下
在这里插入图片描述
上面展示了一个springboot服务的基本操作,简单易懂,所以springboot会慢慢成为主流开发框架。
下面回到微服务的讨论上来
还是尊重作者,记住一句话:小型的、简单的和解耦的服务=可伸缩的、有弹性的和灵活的应用程序,简单翻译下,就是微服务的各个服务职责单一,相互独立,但是灵活组合和安排,以提供快速交付的功能,他还能优雅的降级,能够跨多个服务器进行水平分布。
按照微服务大小适当、位置透明、有弹性、可重复、可伸缩的要求,简单介绍几种微服务模式,这几种模式也解释了上述的微服务要求。
核心微服务开发模式
1、服务粒度—划分适当,不宜太粗或太细
2、通信协议—JSON
3、接口设计—怎样让客户端进行服务调用,需要提供合适的URL
4、服务的配置管理—切换不同环境时,核心配置不会更改,不会发生配置漂移
微服务路由模式
解决两个问题:服务发现、服务路由
服务发现—抽象出服务的物理位置可以被找到,可以透明的扩大或删除服务实例
服务路由—为服务客户端提供单一的url来进行通信,一般会在服务发现之前,这里会做一些授权、验证、内容检查等。
举个例子,你要去小明家,小明家在一个村子里,村子里有很多人家,服务路由就是给你一个唯一的地址,就是小明家在XX市XX镇XX村,你找到XX村了,然后你发现有好多一样的房子,你在这么多一样的房子里,找到小明家是哪个。
微服务客户端弹性模式
客户端负载均衡—要雨露均沾,别一个服务一个劲地调
断路器模式—绕过不爽的服务,不爽的就是死掉的或者半死不活,反应慢的
后备模式—这个服务不行,你得给我个备胎啊
舱壁模式—服务之间谁也不打扰谁,咱们之间有堵墙,你不行,别影响我。
微服务安全模式
验证—证明你就是你,证明调用服务的客户端是合法的
授权—你只能在自己的一亩三分地玩,客户端调用服务只能做被允许的事情
凭证管理和传播—古代进出宫门需要腰牌,腰牌即是凭证,皇宫这么多们,不可能每个门都要一个腰牌,一个腰牌就可以了,每个宫门怎么证明这个腰牌就是真实的腰牌,即是传播
微服务日志记录和跟踪模式
日志关联—使用关联ID,将一个调用涉及到的服务的日志关联起来
日志聚合—将微服务生成的所有日志合并到一个可查询的数据库中。
微服务跟踪—可视化事务的流程,了解服务的性能特征。
下面介绍下,SpringCloud是怎样集成这些模式的,即不同模式下使用到的框架和技术。
在这里插入图片描述
在本节的最后,想给大家留下一句话:SpringCloud真正的美在于,只需要一个注解,你就可以为所欲为。
在接下来的系列文章中,我们一一探秘,了解上述的功能和技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值