Jboot是一个基于JFinal和Undertow开发的微服务框架。提供了AOP、RPC、分布式缓存、限流、降级、熔断、统一配置中心、swagger api自动生成、Opentracing数据追踪、metric数据监控、分布式session、代码生成器、shiro安全控制等功能。
Jboot是一个类似SpringCloud的开源框架, 已经广泛使用于正式的商业上线项目。Jboot集成了代码生成,微服务,MQ,RPC,监控等功能,开发者使用起来非常简单。
什么是微服务
大型的电商系统,如京东淘宝,实际上是由很多个子项目组成的,每个子项目都可以理解为一个服务,由这些子项目服务协同合作,完成整个系统的业务需求,把大型的项目拆分成多个微小的服务就是微服务。
微服务的优点
如果没有微服务架构,所有的功能都集成在大系统中,假如其中一个小模块出了问题,需要进行优化,那就需要重新部署整个项目,这个过程中可能就会中断服务。
比如淘宝的订单查询模块出现问题了,不可能因为升级而重启整个淘宝网站。
如果淘宝想要去读取子项目的数据,怎么办呢?我们可以让这个子项目提供一个API,然后让需要这个数据的项目去调用,这种方式还是比较麻烦,在项目架构中,会使用一种叫RPC(Remote Procedure Call)的技术,翻译过来就是远程调用的意思。
也就是说我们的项目里,只要调用类似server.function(),就调用到了远程服务器的function()方法了。
RPC的开源框架有很多,比如google的grpc,tiwtter的thirft,阿里的dubbo,新浪的motan。
Jboot集成了 grpc、thirft和motan,所以在Jboot中使用rpc是非常简单快速的,可以大大提升我们的开发效率。
Jboot是一个非常实用的开源框架,在Gitee被评为最有价值的开源项目,有图有真相。
Jboot的作者杨福海先生现任某互联网公司CTO,开源爱好者,热衷于技术分享。
中国第一个Android快速开发开源框架Afinal作者,Afinal获得开源中国最受欢迎的开源软件,目前有上万的开发者和公司在使用Afinal进行快速开发。
JPress开源软件作者,JPress是一个WordPress的java代替版,JPress具有极轻、极快、灵活等特点,基于LGPL开源协议,是国内为数不多的优秀的JAVA开源软件。
其最新开源框架Jboot在开源中国社区被评为"最受欢迎的开源中国软件"。
在此非常感谢福海兄对本文的大力支持。
Jboot 开源地址:https://git.oschina.net/fuhai/jboot
接下来带领大家快速入门Jboot。
1.新建一个maven项目,这里就不多加描述了。
2.pom.xml添加Jboot依赖。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.southwind</groupId>
<artifactId>JbootDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>JbootDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>io.jboot</groupId>
<artifactId>jboot</artifactId>
<version>1.4.8</version>
</dependency>
</dependencies>
<build>
<finalName>JbootDemo</finalName>
</build>
</project>
3.编写Controller。
package com.southwind.jboot;
import io.jboot.Jboot;
import io.jboot.web.controller.JbootController;
import io.jboot.web.controller.annotation.RequestMapping;
@RequestMapping("/")
public class HelloWorld extends JbootController{
public static void main(String[] args) {
Jboot.run(args);
}
public void demo() {
renderText("hello demo");
}
public void index() {
renderText("hello index");
}
}
4.直接运行主方法,控制台打印信息如下:
server started success说明服务已经起来了。
5.在浏览器中输入127.0.0.1:8080,此时浏览器显示:hello world。
在上面的代码中继承了JbootController类,而到代码的底层,它又继承了Controller类:
Controller:
Controller是JFinal核心类之一,该类作为MVC模式中的控制器。基于JFinal的Web应用的控制器需要继承该类。Controller是定义Action方法的地点,是组织Action的一种方式,一个Controller可以包含多个Action。Controller是线程安全的。
JbootController:
JbootController是扩展了Jfinal Controller,在Jboot应用中,所有的控制器都应该继承JbootController。
这里介绍一些JbootController的方法:
方法调用 | 返回类型 | 描述 |
---|---|---|
isMoblieBrowser() | boolean | 是否是手机浏览器。 |
isWechatBrowser() | boolean | 是否是微信浏览器。 |
isIEBrowser() | boolean | 是否是IE浏览器,低级的IE浏览器在ajax请求的时候,返回json要做特殊处理。 |
isAjaxRequest() | boolean | 是否是ajax请求。 |
isMultipartRequest() | boolean | 是否是带有文件上传功能的请求。 |
getReferer() | String | 获取来源网址器。 |
getIPAddress() | String | 获取用户的IP地址,这个决定于浏览器,同时做nginx等转发的时候要做好配置。 |
getUserAgent() | String | 获取http头的useragent。 |
getBaseUrl() | String | 获取当前域名。 |
getUploadFilesMap() | HashMap | 获取当前上传的所有文件。 |
在这里用第一个方法为例做一个测试:
在手机浏览器中打开是hello world:
在电脑打开是hello jboot:
Action:
在Controller之中定义的public方法称为Action。Action是请求的最小单位。Action方法必须在Controller中定义,且必须是public可见性。
每个Action对应一个URL地址的映射:
以上代码定义了两个Action,分别是Helloworld.demo()和Helloworld.index()可以直接通过localhost:8080/demo和localhost:8080/index进行访问。