zoukankan      html  css  js  c++  java
  • Vertx 实现webapi实战项目(一)

    关于Vertx的介绍在官方文档可以查看 https://vertx-china.github.io/docs/。网上也有许多介绍,这里就直接上项目。

    一:使用idea搭建gradle项目。添加相关vertx包。

    二:定义消息传递协议

    这里就使用json字符串传递消息,定义mId为区分消息的标识.

    上传参数
    {
    "mId": 101 }

    返回信息也是json,mId区分消息,code标识状态

    {
        "mId": 101,
        "code": 200
    }

    三:加入日志文件

    日志打印使用slg4j,在gradle文件中已经加上了,还需要个xml文件。新建文件log4j2.xml文件在resources文件夹下

    <configuration status="info">
        <properties>
            <property name="LOG_HOME">logs</property>
            <property name="FILE_NAME">success-info</property>
            <property name="ERROR_NAME">error-info</property>
        </properties>
        <appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <!-- ThresholdFilter相当于拦截器.info以上的命令不会被拦截. -->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout>
                    <pattern>
                        %highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n}
                    </pattern>
                </PatternLayout>
            </Console>
    
            <RollingFile name="Error" fileName="${LOG_HOME}/${ERROR_NAME}.log"
                         filePattern="${LOG_HOME}/${ERROR_NAME}-%d{yyyy-MM-dd}-%i.log">
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss.SSS} %-5level %class.%M() %L  - %msg%xEx%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy modulate="true" interval="1" />
                    <SizeBasedTriggeringPolicy size="300MB"/>
                </Policies>
            </RollingFile>
    
            <RollingFile name="RollingFile" fileName="${LOG_HOME}/${FILE_NAME}.log"
                         filePattern="${LOG_HOME}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class.%M() %L - %msg%xEx%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy modulate="true" interval="1" />
                    <SizeBasedTriggeringPolicy size="300MB"/>
                </Policies>
            </RollingFile>
        </appenders>
        <loggers>
            <root level="info">
                <appender-ref ref="RollingFile"/>
                <appender-ref ref="Console"/>
                <appender-ref ref="Error" />
            </root>
    
            <Logger name="self" level="info" additivity="false">
                <appender-ref ref="RollingFile"/>
                <appender-ref ref="Console"/>
                <appender-ref ref="Error"/>
            </Logger>
        </loggers>
    </configuration>
    View Code

    四:新建文件 HttpServerVerticle

    package com.webser.verticle;
    
    import io.vertx.core.AbstractVerticle;
    import io.vertx.core.Promise;
    import io.vertx.core.http.HttpServer;
    import io.vertx.core.http.HttpServerOptions;
    import io.vertx.core.http.HttpServerResponse;
    import io.vertx.core.json.JsonObject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.IOException;
    import java.util.concurrent.TimeUnit;
    
    public class HttpServerVerticle extends AbstractVerticle {
        private final Logger logger = LoggerFactory.getLogger(HttpServerVerticle.class);
        private HttpServer httpServer;
    
        @Override
        public void start(Promise<Void> startPromise) throws Exception {
            HttpServerOptions options = new HttpServerOptions()
                    .setIdleTimeout(10000)
                    .setIdleTimeoutUnit(TimeUnit.MILLISECONDS)
                    .setTcpKeepAlive(true);
    
            httpServer = vertx.createHttpServer(options);
            httpServer.exceptionHandler( it -> {
                if(it instanceof IOException){
                    logger.error("
     ---network io error:"+it.getMessage());
                    return;
                }
                logger.error("
     ---net error:"+it.getMessage());
            });
    
            httpServer.requestHandler(req -> {
                HttpServerResponse resp = req.response().setStatusCode(200);
                resp.putHeader("content-type", "application/json");
                resp.putHeader("connection", "Keep-Alive");
    
                JsonObject js = new JsonObject().put("ke","demos");
                resp.end(js.encode());
            });
    
            httpServer.listen(8888,"127.0.0.1",res -> {
                if (res.succeeded()) {
                    startPromise.complete();
                    logger.info("HTTP server started on port 8888");
                } else {
                    startPromise.fail(res.cause());
                    logger.error(res.cause().getMessage());
                }
            });
        }
    
        @Override
        public void stop(){
            httpServer.close();
            logger.error(" AppLogin Server stop ------");
        }
    }
    View Code

    五:部署verticle。在OnlineServer主函数中部署新建的httpserververticle文件。

    package com.webser;
    
    import com.webser.verticle.HttpServerVerticle;
    import io.vertx.core.DeploymentOptions;
    import io.vertx.core.Vertx;
    import io.vertx.core.VertxOptions;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class OnlineServer {
        private static final Logger logger = LoggerFactory.getLogger(OnlineServer.class);
    
        public static void main(String[] args){
            VertxOptions vertxOptions = new VertxOptions();
            Vertx vertx = Vertx.vertx(vertxOptions);
    
            //部署http服务器
            vertx.deployVerticle(HttpServerVerticle.class.getName(),
                    new DeploymentOptions().setInstances(VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE), res -> {
                if(res.succeeded()){
                    logger.warn("服务端部署成功----");
                }else {
                    logger.error("服务端部署失败---" + res.cause());
                }
            });
        }
    }
    View Code

    六,运行测试

     

    项目github地址:https://github.com/fotocj007/VertxWebApi

     
  • 相关阅读:
    GIT在Linux上的安装和使用简介心得
    Android开发环境使用到工具的认识心得
    Android系统移植与驱动开发心得
    嵌入式Linux的调试技术
    硬件抽象层——HAL
    Linux代码的重用与强行卸载Linux驱动
    控制发光二极管
    详细讲解Linux驱动程序
    搭建测试环境——针对S3C6410开发板
    有了源代码,当然还需要编译喽!!
  • 原文地址:https://www.cnblogs.com/cj8988/p/15010799.html
Copyright © 2011-2022 走看看