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

 

微服务架构快速指南

QBit是强大的Java微服务库包

REST