RedAnt是一個基於Netty 的輕量級Web 容器
特性:
Redant 是一個基於Netty 的Web 容器,類似Tomcat 和WebLogic 等容器
只需要啟動一個Server,默認的實現類是NettyHttpServer 就能快速啟動一個web 容器了,如下所示:
public final class ServerBootstrap {
public static void main ( String [] args ) {
Server nettyServer = new NettyHttpServer ();
// 各种初始化工作
nettyServer . preStart ();
// 启动服务器
nettyServer . start ();
}
}到目前為止,我描述的都是單節點模式,如果哪一天單節點的性能無法滿足了,那就需要使用集群了,所以我也實現了集群模式。
集群模式是由一個主節點和若干個從節點構成的。主節點接收到請求後,將請求轉發給從節點來處理,從節點把處理好的結果返回給主節點,由主節點把結果響應給請求。
要想實現集群模式需要有一個服務註冊和發現的功能,目前是藉助於Zk 來做的服務註冊與發現。
因為主節點需要把請求轉發給從節點,所以主節點需要知道目前有哪些從節點,我通過ZooKeeper 來實現服務註冊與發現。
如果你沒有可用的Zk 服務端的話,那你可以通過運行下面的Main 方法來啟動一個ZooKeeper 服務端:
public final class ZkBootstrap {
private static final Logger LOGGER = LoggerFactory . getLogger ( ZkBootstrap . class );
public static void main ( String [] args ) {
try {
ZkServer zkServer = new ZkServer ();
zkServer . startStandalone ( ZkConfig . DEFAULT );
} catch ( Exception e ){
LOGGER . error ( "ZkBootstrap start failed,cause:" , e );
System . exit ( 1 );
}
}
}這樣你就可以在後面啟動主從節點的時候使用這個Zk 了。但是這並不是必須的,如果你已經有一個正在運行的Zk 的服務端,那麼你可以在啟動主從節點的時候直接使用它,通過在main 方法的參數中指定Zk 的地址即可。
只需要運行下面的代碼,就可以啟動一個主節點了:
public class MasterServerBootstrap {
public static void main ( String [] args ) {
String zkAddress = ZkServer . getZkAddressArgs ( args , ZkConfig . DEFAULT );
// 启动MasterServer
Server masterServer = new MasterServer ( zkAddress );
masterServer . preStart ();
masterServer . start ();
}
}如果在main 方法的參數中指定了Zk 的地址,就通過該地址去進行服務發現,否則會使用默認的Zk 地址
只需要運行下面的代碼,就可以啟動一個從節點了:
public class SlaveServerBootstrap {
public static void main ( String [] args ) {
String zkAddress = ZkServer . getZkAddressArgs ( args , ZkConfig . DEFAULT );
Node node = Node . getNodeWithArgs ( args );
// 启动SlaveServer
Server slaveServer = new SlaveServer ( zkAddress , node );
slaveServer . preStart ();
slaveServer . start ();
}
}如果在main 方法的參數中指定了Zk 的地址,就通過該地址去進行服務註冊,否則會使用默認的Zk 地址
你可以運行redant-example 模塊中提供的例子來體驗一下,example 模塊中內置了兩個Controller 。
啟動完之後,你可以在瀏覽器中訪問http://127.0.0.1:8888 來查看具體的效果(默認的端口可以在redant.properties 中修改)
如果你看到了這樣的消息:"Welcome to redant!" 這就意味著你已經啟動成功了。
在redant-example 模塊中,內置了以下幾個默認的路由:
| 方法類型 | URL | 響應類型 |
|---|---|---|
| GET | / | HTML |
| * | * | HTML |
| GET | /user/count | JSON |
| GET | /user/list | JSON |
| GET | /user/info | JSON |
跟Spring 一樣,你可以通過@Bean 註解來管理所有的對象,通過@Autowired 來自動注入
Tips:更多信息請查看wiki: Bean
跟Spring 一樣,你可以通過@Controller 來自定義一個Controller.
@Mapping 註解用在方法級別,@Controller + @Mapping 唯一定義一個http 請求。
@Param 註解用在方法的參數上。通過該註解可以自動將基本類型轉成POJO 對象。
Tips:更多信息請查看wiki: Router
Cookie 管理器可以管理用戶自定義的Cookie。
Tips:更多信息請查看wiki: Cookie
wh_all4you#hotmail.com
