[微服务系列] 1. 微服务构建框架--Spring Boot

一、微服务

作为微服务系列的第一篇文章,首先要了解一下微服务的概念。
微服务是系统架构上的一种风格,主要是将原本单体的系统拆分为多个小型的服务,这些小型的服务在各自的进程中运行,每个服务之间的通信是基于HTTP的Restful API进行通信。每个服务都维护着各自的数据存储、业务开发、自动化测试案例等,但它们都是围绕着系统中某一项或者一些耦合度较高的业务功能进行构建。

二、 SpringBoot

SpringBoot是构建微服务的基础,因为其自动化配置、快速开发、轻松部署等一些特性都是非常适合作为微服务架构中各个微服务的框架。它的主要作用就是创建和启动基于Spring框架的项目,帮助开发人员容易的、迅速的创建出独立运行和产品级别的基于Spring的应用。SpringBoot具有以下特性:

  • 创建独立运行的基于Spring的项目
  • 直接嵌入Tomcat/Jetty服务器
  • 解决大量的配置问题,通过一系列Starter POMs,提供模块化的依赖管理工作
  • 提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
  • 供推荐的基础 POM 文件来简化 Apache Maven 配置

三、快速入门

1. 系统及工具版本要求
  • Java 1.7+
  • Maven 3.5+
  • Spring Framework 4.2.7+
  • eclipse/intellij
2. 项目搭建
  1. 选择SpringBoot项目
new 1.png
  1. 自定义GroupID和ArtifactID
new 2.png
  1. 选择Web下的web,方便之后构建Restful API 接口
new 3.png
  1. 完成
new 4.png
  1. 项目结构
new 5.png
3. 添加RESTFul API接口

在包com.shexd.springbootdemo.Controller;中添加如下代码

@RestController
public class TestRestful {
    @RequestMapping("/")
    public String home(){
        return "hello spring";
    }
}
4. 启动应用

启动Springboot有多种方式:

  • 将应用作为Java应用程序,直接使用main函数来启动
  • 因为应用使用Maven管理,并且应用中使用spring-boot-maven-plugin插件,所以,可以使用Maven的命令来启动应用,如下是应用在不同声明周期所用到的不同的maven命令
maven 1.png
  • 将应用打包成Jar包,使用java -jar xxxx.jar命令来启动项目
5. 测试

测试分为两种方式:

  • 使用单元测试来测试接口
  • 使用网页直接访问
  • 使用postman接口测试工具来测试接口
  1. 了解以上的知识之后,我们使用main函数启动项目,然后访问localhost:8080/即可访问到主页。

  2. 使用单元测试进行测试,代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
//@SpringApplicationConfiguration(classes = SpringbootdemoApplication.class)
@SpringBootApplication
@WebAppConfiguration
public class SpringbootdemoApplicationTests {

    private MockMvc mvc;

    @Before
    public void  setUp(){
        mvc= MockMvcBuilders.standaloneSetup(new TestRestful()).build();
    }

    @Test
    public void  hello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/")
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("hello spring")));
    }
}
4. 实时掌握应用的健康状况

在微服务中,我们是将单体应用拆分为多个小的服务进程,但是随着业务和微服务应用逐步增多,那么部署应用的数量也随之增多,使得传统的运维的复杂度大大提升。这时就需要一套自动化监控的机制来实时的监控应用的运行状态,并根据一些指标来完成相应的操作。
在springboot中,spring-boot-starter-actuator模块为应用提供了一系列的用于监控的端点。通过此模块,我们可以获取程序中加载的应用配置、环境变量、内存信息、线程池信息以及配置报告等内容。

1. 在pom中添加模块
        <!--为应用提供监控端点-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
2. 配置健康监控的端口

通过配置此端口,可以和应用本身的端口区分开,如果不指定,则使用和server相同的端口

application.yml文件中设置如下:

management:
  port: 60000
  health:
    mail:
      enabled: false
3. 启动应用并查看健康状况

访问http://localhost:60000/beans,获取应用上下文创建的所有Bean

监控1.png

访问http://localhost:60000/mappings,返回所有Spring MVC的控制器映射关系报告

监控2.png

更多接口信息如下
该模块主要分为如下的三类及每个类对应的一些接口信息:

应用配置类:

HTTP方法 API 描述
GET /autoconfig 获取应用自动化配置报告,包括自动化配置候选项
GET /beans 获取应用上下文创建的所有Bean
GET /configprops 获取配置的属性信息报告
GET /env 获取所有可用的属性报告
GET /env/{name} 查看具体变量的值
GET /info 返回应用自定义的信息

度量指标类

HTTP方法 API 描述
GET /metrics 返回当前应用的各类重要度量指标
GET /metrics/{name} 查看具体指标
GET /health 获取应用各类健康指标信息
GET /dump 暴露程序运行中的线程信息
GET /trace 返回基本的http跟踪信息

操作控制类

HTTP方法 API 描述
POST /shutdonw 关闭应用

四、结束

此文主要是通过构建Springboot项目,实现了Restful接口,并添加监控信息,以对微服务的基本框架有个大概的轮廓。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容