[微服务系列] 微服务构建框架--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 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

Mysql读写分离原理及主众同步延时如何解决

其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。

1932
来自专栏随心DevOps

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

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

3368
来自专栏张善友的专栏

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

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

1.1K6
来自专栏JAVA高级架构

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

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

3415
来自专栏MoeLove

Linux上源码编译MongoDB

MongoDB的官网上是有已经编译好的二进制包的,这里选择clone MongoDB在github上的仓库

903
来自专栏张善友的专栏

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

1966
来自专栏Golang语言社区

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

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

1673
来自专栏吴伟祥

openjdk和oraclejdk有什么区别吗?

1.授权协议的不同:OpenJDK采用GPL V2协议放出,而SUN JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允...

4112
来自专栏逸鹏说道

Windows无法安装到这个磁盘。请确保在计算机的BIOS菜单中启用了磁盘控制器

今天一朋友问我这个问题,呃,以前我也遇到过,但忘记记录了,这次就记录一下吧,就懒得打字了,图片里面很清楚了 ? ? ? ? ? 不说点什么的话是不是太水了O(∩...

5867
来自专栏hotqin888的专栏

ONLYOFFICE历史版本开发技术之二

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

2372

扫码关注云+社区