vertx学习成果

自学vertx也快一个月了,给自己总结一下目前所得、以及成果展示:

基于jvm的异步驱动开发,主要是开发app接口、以及做网关使用,个人学习观点,仅供参考,

集成了zk、mybatis,代码只贴部分:
public class Application {
    public static void main(String[] args) {
        ClusterManager mgr = new ZookeeperClusterManager();
        VertxOptions options = new VertxOptions().setClusterManager(mgr);
        options.setClusterHost("10.12.12.210");//本机zk地址

        Vertx.clusteredVertx(options, res -> {
            if (res.succeeded()) {
                System.out.println("success.");
                Vertx vertx = res.result();
                DeploymentOptions option = new DeploymentOptions();
                vertx.deployVerticle(new GateWayVerticle1(),option);
            } else {

            }
        });
    }
}

实例化网关端口:根据服务名分发服务
public class GateWayVerticle1 extends AbstractVerticle {
    private static Logger LOG = Logger.getLogger(GateWayVerticle.class);
    @Override
    public void start() throws Exception {
        Router router = Router.router(vertx);
        router.route().handler(LoggerHandler.create());
        router.route().handler(CookieHandler.create());
        router.route().handler(BodyHandler.create());
        router.route().handler(StaticHandler.create());
        router.route("/gateway.do").handler(context -> {
            HttpServerResponse response = context.response();
            response.putHeader("content-type", "application/json");
            JsonObject result = new JsonObject();
            try {
                JsonObject request = context.getBodyAsJson();
                String ip = context.request().remoteAddress().host();
                request.put("ip", ip);
                LOG.info(request);
                String service = request.getString("service");
                String channel = request.getString("channel");
                String sv = request.getString("sv");
                String cv = request.getString("cv");
                String pn = request.getString("pn");
                String sign_type = request.getString("sign_type");
                String sign = request.getString("sign");
                String serial_number = request.getString("serial_number");
                String timestamp = request.getString("timestamp");
                JsonObject request_data = request.getJsonObject("request_data");
                request_data.put("serial_number", serial_number);
                result.put("serial_number", serial_number);
                if (!request.containsKey("skip")) {
                    //skip all check.
                }

                DeliveryOptions options = new DeliveryOptions();
                options.addHeader("cmd", "save");
                options.setSendTimeout(5000);
                vertx.eventBus().send(service, request_data, res -> {
                    if (res.succeeded()) {
                        JsonObject _res = (JsonObject) res.result().body();
                        result.put("code", _res.getValue("code"));
                        result.put("message", _res.getValue("message"));
                        result.put("timestamp", System.currentTimeMillis());
                        result.put("response_data", _res.getValue("response_data"));
                    } else {
                        result.put("code", 500);
                        result.put("message", res.cause().getMessage());
                        result.put("timestamp", System.currentTimeMillis());
                    }
                    LOG.info(result.toString());
                    response.end(result.toString());
                });

            } catch (Exception ex) {
                result.put("code", 500);
                result.put("message", ex.getMessage());
                result.put("timestamp", System.currentTimeMillis());
                LOG.info(result.toString());
                response.end(result.toString());
            }
        });
        vertx.createHttpServer().requestHandler(router::accept).listen(8080);
    }
}

服务处理类:

orm层使用mybatis

@Component
public class Test4 extends AbstractVerticle{
private static Logger logger = Logger.getLogger(Test4.class);
@Autowired
private TransactionTemplate sjc;
@Autowired
private DataSource dataSource;
@Qualifier(value="jdbcTemplate11")
private JdbcTemplate jdbcTemplate;
@Autowired
private AppUserService appUserService;
public Test4() {
}
@Override
public void start() throws Exception {
vertx.eventBus().consumer("chinamcom.watch.login", message -> {
JsonObject request = (JsonObject) message.body();
logger.info("登陆请求:" + message.body());
JsonObject response = new JsonObject();
int userId = request.getInteger("id");
// int userId = Integer.parseInt(request.getString("id"));
AppUser user = this.appUserService.getUserById(userId);
int id = user.getId();
String username = user.getName();
System.out.println("id=="+id+"...name="+username);
message.reply(response);
});
}
}

源码下载地址:http://download.csdn.net/detail/it_ontway/9590044

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vertx是一种基于事件驱动的应用程序框架,而MyBatis是一种流行的Java持久层框架。Vertx是轻量级的,可扩展的,适用于构建高性能的网络应用程序,而MyBatis则提供了一种优雅的方法来管理应用程序与数据库之间的交互。 VertxMyBatis的结合可以在构建Web应用程序时提供更好的开发体验和性能。Vertx通过异步IO和事件驱动的方式,可以快速地处理来自Web客户端的请求。而MyBatis可以通过提供有针对性的SQL语句,方便地对数据库进行操作。 Vertx提供了一个轻量级的Web服务器,可以处理HTTP请求和Websocket连接。而MyBatis可以方便地将数据库查询结果映射为Java对象。通过使用VertxMyBatis,我们可以将数据库查询和处理请求的逻辑解耦,使代码更易于理解和维护。 使用VertxMyBatis的组合,我们可以轻松地构建可扩展的,高性能的Web应用程序。我们可以使用Vertx的事件总线机制来处理不同组件之间的消息传递,同时利用MyBatis的缓存机制提高数据库查询的性能。 总的来说,VertxMyBatis是一对强大的组合,可以帮助我们构建高性能、可扩展的Web应用程序。通过将异步事件驱动的编程模型与优雅的数据库交互方式结合起来,我们可以更轻松地开发复杂的应用程序。 ### 回答2: Vert.x是一个基于JVM的高性能、非阻塞、事件驱动的应用框架,它可以用于构建轻量级、可伸缩、可扩展的分布式系统。而MyBatis是一个流行的Java持久化框架,它能够帮助我们方便地进行数据库访问。 Vert.xMyBatis可以结合使用,以实现高效的数据库访问和处理。通常情况下,我们可以使用Vert.x的事件驱动机制来处理Web请求,而MyBatis则用于执行数据库操作。 首先,我们可以使用Vert.x的路由器来处理HTTP请求,并在请求处理程序中调用MyBatis执行数据库查询或更新操作。通过这种方式,我们可以确保数据库的访问是非阻塞的,避免了阻塞其他请求的情况发生。 其次,Vert.x的事件总线机制可以用于将不同模块之间的消息进行传递和处理。我们可以在MyBatis的映射器接口中定义观察者,当数据库发生变化时,MyBatis会向事件总线发布消息,其他模块可以根据需求来订阅这些消息进行相应的处理。 另外,Vert.x的异步特性与MyBatis的异步API结合使用,可以进一步提升应用程序的性能。我们可以使用Vert.x的异步回调机制来执行MyBatis的异步数据库操作,从而避免线程阻塞和资源浪费。 总而言之,Vert.xMyBatis的结合使用可以为我们提供一个高性能、可伸缩的应用程序架构。通过将事件驱动的非阻塞处理与灵活的数据库访问相结合,我们可以构建出更好的分布式系统。 ### 回答3: Vertx是一个开源的、响应式的应用程序平台,可用于构建高性能、可伸缩的微服务和分布式系统。MyBatis是一个Java持久层框架,用于管理数据库访问,并且可以将数据库操作与应用程序逻辑分离。那么,VertxMyBatis可以结合使用吗? 答案是可以的。Vertx提供了异步的、非阻塞的I/O操作,而MyBatis则可以将I/O操作,例如数据库查询和更新,封装成简洁易用的API。VertxMyBatis的结合可以提供高效的数据库访问和管理,并且保持系统的响应性和可伸缩性。 在Vertx中使用MyBatis非常简单。首先,需要在Vertx应用程序的依赖中添加MyBatis的库。然后,可以通过MyBatis的配置文件来配置数据库连接和SQL映射。接下来,可以在Vertx的事件处理器中使用MyBatis的API来执行数据库操作。 在Vertx中使用MyBatis可以享受到Vertx的优势,例如事件驱动的架构和高性能的I/O操作。此外,Vertx还提供了丰富的异步编程模型和工具,可以方便地与MyBatis结合使用,例如使用Vertx的Future和Promise来处理异步的数据库操作结果。 总而言之,VertxMyBatis的结合可以提供高效的数据库访问和管理,并且保持系统的响应性和可伸缩性。这是一种强大的组合,可以用于构建高性能、可伸缩的微服务和分布式系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值