Java反应式编程(3)

打印 上一主题 下一主题

主题 912|帖子 912|积分 2736

您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~
 
在前面的文章中已经把vert.x框架给跑起来了,但是实际开发中服务端是需要响应客户端的请求的,所以肯定需要增加接口,但是该怎么加呢?有的人倾向于去搜索引擎找答案,其实还有一个比较好的方式是去官网看看有啥可以用的资料,比如说打开反应式编程的官网就能直接找到最新最准确的文档:

 
 
 
可以看到,点击进入【Vert.x Web】之后,再在左边浏览,然后点击【Routing by HTTP method】:

 
 
 
为了节约大家的时间,我就直接把代码展示出来了。
先创建了接口路由和GET请求:
  1. // 创建路由
  2. Router router = Router.router(vertx);
  3. // 创建一个GET请求
  4. router.route(HttpMethod.GET, "/vertx/get")
  5.   .handler(context -> {
  6.     MultiMap queryParams = context.queryParams();
  7.     String username = queryParams.contains("username") ? queryParams.get("username") : "unknown";
  8.     String password = queryParams.contains("password") ? queryParams.get("password") : "unknown";
  9.     context.json(
  10.       new JsonObject()
  11.         .put("username", username)
  12.         .put("password", password)
  13.     );
  14.   });
复制代码
 
 
再创建POST请求和HTTP服务
  1. // 创建一个POST请求(用Postman测试)
  2. router.route(HttpMethod.POST, "/vertx/api/:id/:username/")
  3.   .handler(context -> {
  4.     String id = context.pathParam("id");
  5.     String username = context.pathParam("username");
  6.     System.out.println(id + " - " + username);
  7.     context.json(
  8.       new JsonObject()
  9.         .put("errcode", "200")
  10.         .put("message", "success")
  11.     );
  12.   });
  13. // 创建HTTP服务
  14. vertx.createHttpServer().requestHandler(router).listen(8888, http -> {
  15.   if (http.succeeded()) {
  16.     startPromise.complete();
  17.     System.out.println("HTTP server started on port 8888");
  18.   } else {
  19.     startPromise.fail(http.cause());
  20.   }
  21. });
复制代码
 
 
现在可以先把代码运行一下看看,比如在浏览中访问
http://localhost:8080/vertx/get?username=xiangwang&password=123456
就能看到返回的JSON数据:

 
 
 
然后在Postman中访问POST请求,也能看到返回的JSON数据

 
 
 
现在Web的功能已经演示完了,接下来再来看看数据库的,同样可以去官网 找文档,可以看到,vertx支持大部分主流的SQL和NoSQL。

 
 
 
还是和之前一样,为了节约大家的时间,我就直接把MySQL的演示代码贴出来了。下面的配置是我电脑里面的MySQL数据库连接:
  1. // 创建MySQL连接
  2. MySQLConnectOptions connectOptions = new MySQLConnectOptions()
  3.   // 端口号
  4.   .setPort(3306)
  5.   // IP地址或者域名
  6.   .setHost("192.168.227.100")
  7.   // 数据库
  8.   .setDatabase("third")
  9.   // 用户名
  10.   .setUser("root")
  11.   // 密码
  12.   .setPassword("123456");
  13. // 连接池选项
  14. PoolOptions poolOptions = new PoolOptions().setMaxSize(5);
  15. // 创建连接池
  16. MySQLPool client = MySQLPool.pool(vertx, connectOptions, poolOptions);
  17. // 简单查询
  18. client.query("SELECT * FROM apply_info")
  19.   .execute(ar -> {
  20.     if (ar.succeeded()) {
  21.       RowSet<Row> result = ar.result();
  22.       System.out.println("获取到了 " + result.size() + " 行数据");
  23.       for (Row row : result) {
  24.         System.out.println("appid = " + row.getString("appid"));
  25.       }
  26.     } else {
  27.       System.out.println("Failure: " + ar.cause().getMessage());
  28.     }
  29.     // 关闭
  30.     client.close();
  31.   });
复制代码
 
有个小地方,如果提示报错:

 
 
 
只需要把代码中的【MySQLPool.pool(connectOptions, poolOptions);】改成【MySQLPool.pool(vertx, connectOptions, poolOptions);】就行了。
这就是最基础的反应式编程的代码示例了。虽然它还没有大规模应用,但是管它呢,先卷起来再说。
 
 
 
 
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表