一、微服务
作为微服务系列的第一篇文章,首先要了解一下微服务的概念。
微服务是系统架构上的一种风格,主要是将原本单体的系统拆分为多个小型的服务,这些小型的服务在各自的进程中运行,每个服务之间的通信是基于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. 项目搭建
- 选择SpringBoot项目
- 自定义GroupID和ArtifactID
- 选择Web下的web,方便之后构建Restful API 接口
- 完成
- 项目结构
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命令
- 将应用打包成Jar包,使用java -jar xxxx.jar命令来启动项目
5. 测试
测试分为两种方式:
- 使用单元测试来测试接口
- 使用网页直接访问
- 使用postman接口测试工具来测试接口
了解以上的知识之后,我们使用main函数启动项目,然后访问
localhost:8080/
即可访问到主页。使用单元测试进行测试,代码如下:
@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接口,并添加监控信息,以对微服务的基本框架有个大概的轮廓。