V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

最近终于有点空了,将 Magician 发布了一个新版本

  •  
  •   Joker123456789 · 2022-07-01 11:03:27 +08:00 · 1501 次点击
    这是一个创建于 865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Magician 大家可能比较陌生,在介绍本次更新前 先简单介绍一下吧:

    Magician 是一套 web 开发的工具集,开发者可以自由选择自己想用的工具,可以选择只用一个小型的 http 服务包开发一个微型服务,也可以搭配 MVC 来实现一个常规的 web 服务,也可以只选择 JDBC 框架 对数据库进行操作,也可以全部一起用,实现一个完整的 web 服务,同时我们也会提供各种小型组件库,来方便开发者。

    目前已经发布了三个包,分别是 Magician ,Magician-Web ,Magician-JDBC ,他们分别对应,小型 http 服务器,MVC 框架,数据库操作框架。

    本次更新的部分在于第一个包 - Magician (Magician 既是这一套项目的名称,也是核心组件的名称):

    Magician 是一个基于 Netty 的小型 HTTP 服务包,可以很方便的启动一个 HTTP 服务,支持 WebSocket ,采用注解来配置 Handler 。

    如果你想用 netty 开发一个 http 服务,但发现它很麻烦,那么 Magician 可能会帮到你。

    本次更新的点

    • 支持自定义配置
    • 支持监听多端口
    • 同一个项目中,可以多地使用

    自定义配置

    以前,我们启动一个 Magician 服务,只能用默认的配置,现在有这么几个配置项支持自定义了

    MagicianConfig magicianConfig = new MagicianConfig();
    magicianConfig.setNumberOfPorts(3); // 允许同时监听的端口数量,默认 1 个
    magicianConfig.setBossThreads(1); // netty 的 boss 线程数量 默认 1 个
    magicianConfig.setWorkThreads(3); // netty 的 work 线程数量 默认 3 个
    magicianConfig.setNettyLogLevel(LogLevel.DEBUG); // netty 的日志打印级别
    magicianConfig.setMaxInitialLineLength(4096); // http 解码器的构造参数 1 ,默认 4096 跟 netty 一样
    magicianConfig.setMaxHeaderSize(8192); // http 解码器的构造参数 2 ,默认 8192 跟 netty 一样
    magicianConfig.setMaxChunkSize(8192); // http 解码器的构造参数 3 ,默认 8192 跟 netty 一样
    

    所有配置项都有默认值,所以在使用的时候 可以只选择自己需要更改的配置项进行设置,设置好了以后需要添加到 HttpServer 实例中

    Magician.createHttp()
            .scan("com.test")// 扫描范围(包名)
            .setConfig(magicianConfig) // 添加配置
            .bind(8080);
    

    监听多端口

    很简单,只需要调用 bind 方法多次即可

    HttpServer httpServer = Magician.createHttp()
            .scan("com.test")// 扫描范围(包名)
            .setConfig(magicianConfig); // 添加配置
    
    httpServer.bind(8080);
    httpServer.bind(8081); 
    httpServer.bind(8082); 
    

    同项目中,多地使用

    有时候可能会遇到这种需求,同一个项目中,有些资源是对内的,有些资源是对外的,我们想把这两部分资源隔离开来,这个时候可能就需要启动两个服务了。 在本次升级的时候,为了实现监听多端口,bind 已经变成异步的方法了,在调用 bind 以后,不会阻塞,而是可以继续往下执行,所以这个需求得到了完美的解决, 有两个实现方案。

    1. 监听两个端口,把对外和对内分开

    2. 直接启动两个服务,把端口,配置,线程全都分开

    第一种方法,不用多说,相信大家都知道怎么做了,咱们重点说说第二种方法,跟监听多端口差不多的思路,只不过变成了启动两个服务,比如:

    启动一个对外服务

    // 将 8080 端口做为对外的端口,并且 scan 只扫描对外的资源(接口,handler 等)
    
    HttpServer httpServer = Magician.createHttp()
            .scan("com.test")// 只扫描对外的资源
            .setConfig(magicianConfig); // 添加配置
    
    httpServer.bind(8080);
    

    启动一个对内服务

    // 将 8081 端口做为对内的端口,并且 scan 只扫描对内的资源(接口,handler 等)
    
    HttpServer httpServer = Magician.createHttp()
            .scan("com.test")// 只扫描对内的资源
            .setConfig(magicianConfig); // 添加配置
    
    httpServer.bind(8081);
    

    想了解更多,可以访问官网

    https://magician-io.com

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2446 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:02 · PVG 08:02 · LAX 16:02 · JFK 19:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.