[微服务系列] 微服务构建框架--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项目

2. 自定义GroupID和ArtifactID

3. 选择Web下的web,方便之后构建Restful API 接口

4. 完成

5. 项目结构

3. 添加RESTFul API接口

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

@RestControllerpublic class TestRestful {    

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

启动Springboot有多种方式:

  • 将应用作为Java应用程序,直接使用main函数来启动
  • 因为应用使用Maven管理,并且应用中使用spring-boot-maven-plugin插件,所以,可以使用Maven的命令来启动应用,如下是应用在不同声明周期所用到的不同的maven命令
  • 将应用打包成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

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

更多接口信息如下

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

应用配置类:

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接口,并添加监控信息,以对微服务的基本框架有个大概的轮廓。

原文发布于微信公众号 - 瞎说开发那些事(jsj201501)

原文发表时间:2017-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏随心DevOps

你可能不知道的 Django Rest Framework 的两个新特性

前端、甚至大前端发展如此火爆的 2017 年(我相信 2018 年一样)刚过去,像 MVC 架构那样直接使用后端模板渲染前端页面的方式已经不被推崇了(当然有些场...

40380
来自专栏王磊的博客

iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)

CodeHelper是一款可以自己定义模板和生成内容的代码生成器,目前只支持MsSql数据库,这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置...

38360
来自专栏JAVA高级架构

程序猿的日常——SpringMVC系统架构与流程回顾

web开发经历了很漫长的时间,在国内也快有十几年的时间了。从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的知...

37350
来自专栏张善友的专栏

CentOS 7 搭建基于携程Apollo(阿波罗)配置中心单机模式

Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理...

1.4K60
来自专栏hotqin888的专栏

ONLYOFFICE历史版本开发技术之二

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

33220
来自专栏月色的自留地

将dylib库嵌入macOS应用的方法

32750
来自专栏Golang语言社区

从零开始实现RPC框架 - RPC原理及实现

RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一...

21930
来自专栏张善友的专栏

CentOS 7 搭建基于携程Apollo(阿波罗)配置中心单机模式

27560
来自专栏容器云生态

使用系统内置script和scriptreplay命令来记录操作记录

想要记录整个操作流程,需要使用到两个工具,script和scriptreplay,实验环境是CentOS6.6,默认都是安装的! script命令用来记录整个历...

31570
来自专栏北京马哥教育

25个Linux服务器安全小贴士,总有一条用得上!

大家都认为 Linux 默认是安全的,我大体是认可的 (这是个有争议的话题)。Linux默认确实有内置的安全模型。你需要打开它并且对其进行定制,这样才能得到更安...

384120

扫码关注云+社区

领取腾讯云代金券