HTML5技术

微服务--webapi实现,脱离iis,脱离tomcat - 失足程序员(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-30 11:00 我要评论( )

1 package net.sz.game.test.scripts.webapi; net.sz.game.engine.nio.nettys.http.NioHttpRequest; 4 import net.sz.game.engine.szlog.SzLogger; 5 import net.sz.game.test.webapi.iscript.IWebApiScript; * 9 *

1 package net.sz.game.test.scripts.webapi; net.sz.game.engine.nio.nettys.http.NioHttpRequest; 4 import net.sz.game.engine.szlog.SzLogger; 5 import net.sz.game.test.webapi.iscript.IWebApiScript; * 9 * <br> 10 * author 失足程序员<br> <br> 12 * mail 492794628@qq.com<br> 13 * phone 13882122019<br> IndexScript implements IWebApiScript { SzLogger log = SzLogger.getLogger(); 18 19 @Override 20 public String getRoute() { 21 return "index"; 22 } 23 24 @Override action(String url, NioHttpRequest request) { request.addContent("我是明文webapi自动注册路由"); ; 29 } 30 31 }

 

 

 

实现路由自动注册我们需要在启动main函数加入脚本初始化函数调用 

1 package net.sz.game.test.main; java.util.ArrayList; 4 import net.sz.game.engine.scripts.manager.ScriptManager; 5 import net.sz.game.engine.szlog.SzLogger; 6 import net.sz.game.test.webapi.WebApiManager; * 10 * <br> 11 * author 失足程序员<br> 12 * mail 492794628@qq.com<br> 13 * phone 13882122019<br> Test_App_Manager { SzLogger log = SzLogger.getLogger(); main(String[] args) { ArrayList<String> loadScripts = ScriptManager.getInstance().reload(); 23 String join = String.join(",", loadScripts); 24 log.error(join); WebApiManager.getInstance().init(); 27 } 28 }

 

 启动程序测试

 启动程序以后我们看到首先删除了程序项目下面之前的脚本临时文件,然后重新加载最新脚本文件;成功加载脚本:net.sz.game.test.scripts.webapi.IndexScript, net.sz.game.test.webapi.iscript.IWebApiScript

在浏览器输入

成功输出;

继续添加login监听;

1 package net.sz.game.test.scripts.webapi; net.sz.game.engine.nio.nettys.http.NioHttpRequest; 4 import net.sz.game.engine.szlog.SzLogger; 5 import net.sz.game.test.webapi.iscript.IWebApiScript; * 9 * <br> 10 * author 失足程序员<br> <br> 12 * mail 492794628@qq.com<br> 13 * phone 13882122019<br> LoginScript implements IWebApiScript { SzLogger log = SzLogger.getLogger(); 18 19 @Override 20 public String getRoute() { 21 return "login"; 22 } 23 24 @Override action(String url, NioHttpRequest request) { request.addContent("我是明文webapi自动注册路由 login 欢迎登陆"); ; 29 } 30 31 }

View Code

 

看看结果:

其实这个自动注册我们目前依然需要重启服务;或者不够智能;

动态加载路由脚本;无需重启服务

1 package net.sz.game.test.scripts.webapi; java.util.ArrayList; 4 import net.sz.game.engine.nio.nettys.http.NioHttpRequest; 5 import net.sz.game.engine.scripts.manager.ScriptManager; 6 import net.sz.game.engine.szlog.SzLogger; 7 import net.sz.game.test.webapi.iscript.IWebApiScript; * 11 * <br> 12 * author 失足程序员<br> <br> 14 * mail 492794628@qq.com<br> 15 * phone 13882122019<br> ReloadScript implements IWebApiScript { SzLogger log = SzLogger.getLogger(); 20 21 @Override 22 public String getRoute() { 23 return "reload"; 24 } 25 26 @Override action(String url, NioHttpRequest request) { ArrayList<String> loadScripts = ScriptManager.getInstance().reload(); 30 String join = "动态加载结果:" + String.join(",", loadScripts); 31 log.error(join); 32 request.addContent(join); ; 34 } 35 36 }

 

reload监听里面处理脚本路由的更新操作;

之所以没有使用文件更新状态进行操作,是因为那样不可控;或许我现在只是发布,但是不需要更新;等待指定时间更新;

重新访问login

叙述

以上代码我们完成路由自动注册,

值的注意的有几点:

1,我们通过的脚本化实现的路由自动注册功能;所以代码是明文的,破坏危险,挂马危险,较高;

2,我没有加入验证机制;这个可以自行约定;确实了iis或tomcat的sesstion 和cokie的这种缓存机制;但好处在于可控性很高,不管是缓存,数据流向,自定义格式;不受iis或Tomcat限制;

3,但是我们可以做到动态发布,动态更新,在不重启服务的,不影响其他服务的情况下,划分出了,功能独立开发,独立部署,互不干涉的情况;

之所以我文章开头定义微服务也就是这个原理,可以实现服务接口的动态增加删除,独立开发,独立部署,单一流程;当然可以相互协调调用服务接口;

C#.net

在我的版本库或者叫框架里面依然实现了netty的调用的;

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • canvas实现黑客帝国矩形阵 - 风雨后见彩虹

    canvas实现黑客帝国矩形阵 - 风雨后见彩虹

    2017-03-30 09:00

  • 期待微软平台即服务技术Service Fabric 开源 - 张善友

    期待微软平台即服务技术Service Fabric 开源 - 张善友

    2017-03-27 18:00

  • 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池 - 彩色铅笔

    记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池

    2017-03-21 09:00

  • 如何使用Vue2做服务端渲染 - 莫扬的天空

    如何使用Vue2做服务端渲染 - 莫扬的天空

    2017-03-18 15:00

网友点评
m