SOA专题
QBit微服务microservice教程
QBit是提供RESTful风格的微服务开源框架,这里以创建简单微服务案例为教程说明QBit如何使用,案例是以TODO业务模型为基础,结合QBit和gradle。
QBit是一个编程和运行都非常快的框架,QBit能激活异步服务和in-memory内存服务。这个案例是REST/JSON暴露服务,可以使用Gradle直接作为应用程序独立运行。
Gradle配置文件
使用gradle实现build配置:
group = 'io.advantageous.qbit.examples'
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'application'
version = '0.1-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/main/resources'
}
}
}
mainClassName = "io.advantageous.qbit.vertx.http.PerfClientTest"
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile group: 'io.advantageous.qbit', name: 'qbit-vertx', version: '0.6.1'
compile "org.slf4j:slf4j-api:[1.7,1.8)"
compile 'ch.qos.logback:logback-classic:1.1.2'
testCompile group: 'junit', name: 'junit', version: '4.10'
}
idea {
project {
jdkName = '1.8'
languageLevel = '1.8'
}
}
TODO的Java POJO
QBit可简单方便构建REST服务,能将Java POJO对象在无需注解情况下翻译成JSON,TODO的Java POJO类如下:
public class TodoItem {
private final String description;
private final String name;
private final Date due;
public TodoItem(final String description, final String name, final Date due) {
this.description = description;
this.name = name;
this.due = due;
}
public String getDescription() {
return description;
}
public String getName() {
return name;
}
public Date getDue() {
return due;
}
}
TODO的Java服务
@RequestMapping("/todo-service")
public class TodoService {
private List<TodoItem> todoItemList = new ArrayList<>();
@RequestMapping("/todo/count")
public int size() {
return todoItemList.size();
}
@RequestMapping("/todo/")
public List<TodoItem> list() {
return todoItemList;
}
@RequestMapping(value = "/todo", method = RequestMethod.POST)
public void add(TodoItem item) {
todoItemList.add(item);
}
}
注意到RequestMapping注解,它的工作方式与Spring MVC的REST注解相同,提供Spring MVC的子集实现。
add 方法是当有用户使用POST提交到URI /todo时会激活调用。
为了运行这个服务,你需要启动,可以使用一个ServiceServer实现,服务能指定不同线程运行或在相同线程中运行。QBit使用公寓apartment 线程模型实现服务,它是由非常有效的队列机制来限制在IO线程和服务线程之间传递的数量。
这个ServiceServer方法如下:
public class TodoMain {
public static void main(String... args) {
ServiceServer server = new ServiceServerBuilder().build();
server.initServices(new TodoService());
server.start();
}
}
ServiceServerBuilder 允许你设置像PORT和NIC等绑定服务的网络参数,也提供高性能的微调方法,服务可以通过REST和WebSocket方式提供。
为了运行这个服务,你需要gradle,命令如下:
gradle idea
这是产生一个idea的项目,然后运行:
gradle run
这是运行上面ServiceServer案例。
下面我们使用CURL来进行连接这个微服务测试:
curl localhost:8080/services/todo-service/todo/count
也可以进行条目的新增:
curl -X POST -H "Content-Type: application/json" -d '{"name":"xyz","decription":"xyz"}' http://localhost:8080/services/todo-service/todo