linux微服务开发,QBit开发微服务

QBit是一个轻量级的开源响应式开发库,用于构建微服务,支持JSON、HTTP、WebSocket和REST。本文介绍了QBit的基本概念、Gradle构建过程、示例代码以及通过curl和wrk进行的性能测试。通过示例展示了如何创建一个简单的HelloWorld服务并启动,最后使用wrk工具进行了负载测试。
摘要由CSDN通过智能技术生成

一、QBit库介绍

QBit是一个开源的响应式开发库,用于构建微服务,支持JSON、HTTP、WebSocket和REST。QBit使用响应式编程建立弹性REST、基于云的WebSocket、Web服务。QBit是面向移动和云计算的SOA演进。QBit是一个很小的、轻量级的微服务开发库,提供了对服务发现、服务健康、响应式的状态服务、类型事件、以及Java惯用的反应式编程的支持。

QBit非常小且速度极快。

二、Gradle构建文件

group 'qbit-ex'

version '1.0-SNAPSHOT'

apply plugin: 'java'

apply plugin: 'application'

mainClassName = "com.mammatustech.HelloWorldService"

compileJava {

sourceCompatibility = 1.8

}

repositories {

mavenCentral()

mavenLocal()

}

dependencies {

testCompile group: 'junit', name: 'junit', version: '4.11'

compile group: 'io.advantageous.qbit', name: 'qbit-admin',

version: '0.9.0-M1'

compile group: 'io.advantageous.qbit', name: 'qbit-vertx',

version: '0.9.0-M1'

}

目前QBit微服务库最新版为0.9.0.M2版。

三、用QBit写示例代码

package com.mammatustech;

import io.advantageous.qbit.admin.ManagedServiceBuilder;

import io.advantageous.qbit.annotation.RequestMapping;

@RequestMapping("/hello")

public class HelloWorldService {

@RequestMapping("/hello")

public String hello() {

return "hello " + System.currentTimeMillis();

}

public static void main(final String... args) {

final ManagedServiceBuilder managedServiceBuilder =

ManagedServiceBuilder.managedServiceBuilder()

.setRootURI("/root");

/* Start the service. */

managedServiceBuilder.addEndpointService(new HelloWorldService())

.getEndpointServerBuilder()

.build().startServer();

}

}

四、运行代码

# gradle run

五、用curl测试

$ curl http://localhost:8080/root/hello/hello

"hello 1440742489358"

六、用wrk测试

wrk是一个开源的HTTP基准测试工具。当wrk在单个多核CPU上运行时,能够产生显著的负载,它结合了多线程设计和可扩展的事件通知系统(如epoll和kqueue)。

wrk还提供了一个可选的LuaJIT脚本,可用于执行HTTP请求的产生、响应的处理,以及自定义报表。

主页: https://github.com/wg/wrk

$ wrk -d 5s -t 2 -c 1000 http://localhost:8080/root/hello/hello

Running 5s test @ http://localhost:8080/root/hello/hello

2 threads and 1000 connections

Thread Stats Avg Stdev Max +/- Stdev

Latency 17.65ms 22.96ms 427.36ms 97.57%

Req/Sec 33.33k 7.75k 43.10k 75.00%

319154 requests in 5.06s, 28.00MB read

Requests/sec: 63083.97

Transfer/sec: 5.53MB

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以尝试使用以下优化方式: 1. 减少函数调用次数。可以将 `can_app_il_get_rx_ESP_v_Signal_1` 和 `can_app_il_get_rx_ESP_QBit_v_Signal` 的返回值存储在局部变量中,避免多次调用。 2. 避免过多的变量复制。可以直接将 `speed_ret&CAN_IL_TIMEOUT` 的结果赋值给 `speed_timeout`,避免中间变量的使用。 3. 尽可能减少全局变量的使用。可以将 `can_sig_vehicle_speed` 和 `can_sig_vehicle_speed_valid` 作为参数传递给 `can_app_output_vehicle_speed` 函数,避免全局变量的使用。 4. 将静态变量的初始化移动到函数外部,避免每次函数调用都进行初始化。 下面是优化后的代码示例: ```c void can_app_sig_rx_vehicle_speed_polling(U16 *vehicle_speed, U8 *vehicle_speed_valid) { U16 speed = 0; U8 speed_ret = 0; U8 speed_valid = 0; static U8 speed_timeout_bk = 0; static BOOL speed_update_flag = FALSE; static BOOL speed_timeout = FALSE; speed_ret = can_app_il_get_rx_ESP_v_Signal_1(&speed); can_app_il_get_rx_ESP_QBit_v_Signal(&speed_valid); speed_timeout = (speed_ret & CAN_IL_TIMEOUT) ? TRUE : FALSE; if (speed_timeout_bk != speed_timeout) { if (speed_timeout) { *vehicle_speed_valid = 1; speed_update_flag = TRUE; } speed_timeout_bk = speed_timeout; } if (*vehicle_speed != speed || *vehicle_speed_valid != speed_valid || speed_update_flag) { *vehicle_speed = speed; *vehicle_speed_valid = speed_valid; can_app_output_vehicle_speed(*vehicle_speed, *vehicle_speed_valid); speed_update_flag = FALSE; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值