# ServiceFramework Wiki
[README-EN](https://github.com/allwefantasy/ServiceFramework/blob/master/README-EN.md)
ServcieFramework 定位在 **移动互联网后端** 领域,强调开发的高效性,其开发效率可以比肩Rails.
## 编译
现在编译步骤:
git clone git@github.com:allwefantasy/ServiceFramework.git
mvn install -Pscala-2.11
如果你想切换scala版本,则使用:
./dev/change-version-to-2.12.sh
经过以上步骤即可使用
## maven 仓库
```
<dependency>
<groupId>net.csdn</groupId>
<artifactId>serviceframework-web_2.11</artifactId>
<version>2.0.0</version>
</dependency>
```
### 项目示例
[https://github.com/allwefantasy/godear](https://github.com/allwefantasy/godear) 该项目是一个RSS订阅系统。
里面展示了ServiceFramework各种典型用法,包括如何构造非JSON Rest API的具有页面的接口。
### 在Maven中使用该项目
接着确保 项目根目录下有config/application.yml,config/logging.yml 两个文件即可。示例可参看该项目中config文件夹。
QuickStart:[搭建自己的第一个项目](https://github.com/allwefantasy/ServiceFramework/blob/master/doc/ServiceFrameworkWiki-example.md)
ServiceFramework 特点:
1. ActiveRecord化的Model层,支持 MongoDB 和 MySQL.
List<Tag> tags = Tag.where(map("name","java")).fetch;
2. 完全重新设计的Controller层,大量便利的函数。创新的过滤器设计,比如下面的代码表示validate 方法会拦截 push方法
static {
beforeFilter("validate", WowCollections.map(only, WowCollections.list("push")));
}
3. 大部分对象使用IOC自动管理,使用简单。
@inject
Service service;
4. 不依赖容器,单元测试简单,从action到service,都可做到测试代码最少
@Test
public void search() throws Exception {
RestResponse response = get("/doc/blog/search", map(
"tagNames", "_10,_9"
));
Assert.assertTrue(response.status() == 200);
Page page = (Page) response.originContent();
Assert.assertTrue(page.getResult().size() > 0);
}
5. 接口调用监控
* 接口 QPS 监控
* 接口平均响应耗时监控
* 接口调用量(如果是http的话,则是各种状态码统计)
* 内置http接口,提供json数据展示以上的系统状态
6. 1.2 以上版本集成了Dubbo,具有Dubbo的所有有点。同时还添加RestProtocol协议,可以像RPC一样调用现有的HTTP服务。
所有工作只需要定义一套 Interface接口即可。
在ServiceFramework中,调用一个同样也是由ServiceFramework开发的HTTP接口可以变得非常简单。
@At(path = "/say/hello", types = {RestRequest.Method.GET})
public void sayHello() {
render(200, "hello" + param("kitty"));
}
这里很简单通过调用 http://127.0.0.1/say/hello?kitty=wow ,服务会返回hellowow 这样的字符串。
使用方可以通过HttpClient直接调用这个接口。为了方便调用方,服务提供方可以添加一个接口:
public interface TagController {
@At(path = "/say/hello", types = {RestRequest.Method.GET, RestRequest.Method.POST})
public HttpTransportService.SResponse sayHello(RestRequest.Method method, Map<String, String> params);
@At(path = "/say/hello", types = {RestRequest.Method.GET})
public HttpTransportService.SResponse sayHello3(@Param("kitty") String kitty);
接着,调用方引入这个接口,就可以像这样调用了:
tagController.sayHello(RestRequest.Method.GET, WowCollections.map("kitty", "你好,太脑残")).getContent()
或者
tagController.sayHello3("哇塞,天才呀").getContent()
服务提供者可以针对一个http接口定义出任意个方法,每个方法都之定义一部分参数,这样可以有效方便调用者使用。
7. 如果你不使用Dubbo,你也可以非常容易的调用第三方的标准HTTP接口,达到类似RPC调用的效果。
* 将第三方HTTP API 做个申明,例如有个搜索接口(Scala代码示例)
trait SearcherClient {
@At(path = Array("/v2/~/~/_search"), types = Array(GET, POST))
@BasicInfo(
desc = "索引服务",
state = State.alpha,
testParams = "",
testResult = "",
author = "WilliamZhu",
email = "allwefantasy@gmail.com"
)
def search(params: Map[String, String], content: String, method: net.csdn.modules.http.RestRequest.Method): java.util.List[HttpTransportService.SResponse]
}
* 接着在需要使用该接口的地方调用如下代码构建SearcherClient对象。记住,这个对象只能构建一次(Scala代码示例)
val _searchClient = AggregateRestClient.buildClient[SearcherClient](hostAndPorts, new SearchEngineStrategy(), httpRequest)
//其中,hostAndPorts 为域名和端口。
//可以是多个。SearchEngineStrategy 是自定义实现如何调用后端服务,
//是轮训的负载均衡还是有特别的逻辑
* 现在可以使用了(Scala代码示例)
val res = _searchClient.search(
url._2.toMap ++ Map("index" -> index, "type" -> ctype),
query,
RestRequest.Method.POST).searchResult
使用该种方式调用第三方API会产生Trace日志。
7. 服务降级限流
ServiceFramework主要面向后端服务,如果没有自我保护机制,系统很容易过载而不可用。经过一定的容量规划,或者通过对接口调用平均响应耗时的监控,
我们可以动态调整 ServiceFramework 的QPS限制,从而达到保护系统的目的。这些都可以通过配置以及内置的http接口完成。
监控将会是ServiceFramework后续的重点。早期ServiceFramework也通过日志让用户对自己系统有更多的感性认识,日志会打印:
* http请求url
* 整个请求耗时
* 数据库耗时(如果有)
* 响应状态码
你可以很方便的通过shell脚本做各项统计
8. Thrift 和 RESTFul 只需简单配置即可同时提供 Thrift 和 RESTFul 接口
###############http config##################
http:
port: 7700
disable: false
thrift:
disable: false
services:
net_csdn_controller_thrift_impl_CLoadServiceImpl:
port: 7701
min_threads: 100
max_threads: 1000
servers:
load: ["127.0.0.1:7701"]
9. 支持 Velocity, 页面可直接访问所有实例变量以及helper类的方法。支持Velocity 进行模板配置
@At(path = "/hello", types = GET)
public void hello() {
render(200, map(
"name", "ServiceFramework"
), ViewType.html);
}
## QuickStart
Step 1 > 克隆项目
git clone https://github.com/allwefantasy/ServiceFramework
Step 2 > 导入到IDE.
Step 3 > 根据你自己的数据库信息 编辑修改 config/application.yaml .注意如果你使用mysql,需要disable 调 mongodb.反之亦然
datasources:
mysql:
host: 127.0.0.1
port: 3306
database: wow
username: root
password: root
disable: false
mongodb:
host: 127.0.0.1
port: 27017
database: wow
disable: false
redis:
host: 127.0.0.1
port: 6379
disable: true
Step4 > 在Mysql中导入 sql/wow.sql.
Step5 > 新建 com.example.model.Tag 类.
public class Tag extends Model
{
}
Step6 > 新建 com.example.controller.http.TagController
public class TagController extends ApplicationController
{
@At(path = "/hello", types = RestRequest.Method.GET)
public void hel
没有合适的资源?快使用搜索试试~ 我知道了~
Java MVC framework, agile, fast, rich domain model, made e.zip
共400个文件
java:319个
xml:19个
scala:16个
需积分: 0 1 下载量 80 浏览量
2024-03-03
21:45:31
上传
评论
收藏 784KB ZIP 举报
温馨提示
Java MVC framework, agile, fast, rich domain model, made e.zip
资源推荐
资源详情
资源评论
收起资源包目录
Java MVC framework, agile, fast, rich domain model, made e.zip (400个子文件)
config 300B
.DS_Store 6KB
.DS_Store 6KB
application.yml.development.example 475B
application.yml.production.example 475B
.gitignore 399B
.gitkeep 0B
.gitkeep 0B
.gitkeep 0B
service_framework.jar 209KB
Base64.java 76KB
CBZip2OutputStream.java 69KB
Strings.java 57KB
CSDNStatFilterstat.java 36KB
CBZip2InputStream.java 32KB
RestStatus.java 29KB
ImmutableSettings.java 25KB
BaseObjectPool.java 24KB
Unicode.java 21KB
ApplicationController.java 20KB
JPQL.java 19KB
Document.java 18KB
EntityEnhancer.java 15KB
DefaultHttpTransportService.java 15KB
JPA.java 14KB
MysqlClient.java 13KB
MongoEnhancer.java 13KB
Criteria.java 11KB
WowCollections.java 11KB
ANSI.java 11KB
ChunkEncoder.java 9KB
LZFDecoder.java 9KB
MessageFormat.java 9KB
ReflectHelper.java 9KB
HttpServer.java 9KB
ModelClass.java 9KB
Settings.java 9KB
ClassMethodEnhancer.java 8KB
EnhancerHelper.java 8KB
ObjectPool.java 8KB
Model.java 8KB
Streams.java 8KB
DefaultRestRequest.java 8KB
RestController.java 7KB
PropertyPlaceholder.java 7KB
ManyToManyEnhancer.java 7KB
RestUtils.java 7KB
API.java 7KB
SqlClient.java 7KB
DefaultResponse.java 7KB
TimeValue.java 7KB
ControllerLoader.java 7KB
AssociatedHelper.java 7KB
MongoMongo.java 6KB
MockRestRequest.java 6KB
Environment.java 6KB
Association.java 6KB
WowWhereParser.java 6KB
ServiceLoader.java 6KB
CRC.java 6KB
NetworkUtils.java 6KB
PathTrie.java 6KB
BaseControllerTest.java 5KB
PojoCopy.java 5KB
Bootstrap.java 5KB
ClasspathUrlFinder.java 5KB
FilterHelper2.java 5KB
RestClientProxy.java 5KB
ThriftClient.java 5KB
BufferRecycler.java 5KB
BZip2Constants.java 5KB
AssociationEnhancer.java 5KB
LogConfigurator.java 5KB
ThriftApplication.java 5KB
RedisClient.java 4KB
JPABase.java 4KB
ByteSizeValue.java 4KB
ThriftServer.java 4KB
Url.java 4KB
DefaultThreadPoolService.java 4KB
OneToOneEnhancer.java 4KB
LZFInputStream.java 4KB
PoolableObjectFactory.java 4KB
LZFChunk.java 4KB
SizeValue.java 4KB
ManyToOneEnhancer.java 4KB
Loggers.java 4KB
HasManyAssociation.java 4KB
SizeUnit.java 3KB
JSONObjectUtils.java 3KB
LZF.java 3KB
AbstractCSLogger.java 3KB
QpsManager.java 3KB
HasManyAssociationEmbedded.java 3KB
HasOneAssociation.java 3KB
BaseValidateParse.java 3KB
OneToManyEnhancer.java 3KB
FilterEnhancer.java 3KB
LZFOutputStream.java 3KB
BaseValidateParse.java 3KB
共 400 条
- 1
- 2
- 3
- 4
资源评论
日刷百题
- 粉丝: 5296
- 资源: 951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功