• Gaea是支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架


    Gaea是支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架

    Gaea:58同城开源的中间层服务框架 https://github.com/58code/Gaea

    中间件

    Gaea是支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架。相对于其它重量级的中间件,比如淘宝的dubbo,Gaea只做一件事,因此没有过多的项目依赖。

    在学校的时候学过CORBA,因此对中间件有所了解。在CORBA中,接口通过IDL描述,然后分别生成本地存根(stub)和服务器端骨架(skeleton)。服务器端对这些接口进行实现,当客户端调用时,本地将调用的相关信息(方法、参数)通过消息发送到服务器端,服务器端执行完后返回结果。




    Gaea也提供了同样的服务。在公司内部,各个系统之间可能需要相互调用,通过Gaea对外提供服务实现跨平台,跨语言调用。

    部署服务器端

    Gaea提供了一个demo(Gaea/demo目录下),客户端虽然提供了一个gaeaDemo.jar,但实际上只需要里面的INewsService.java以及News.java。

    部署服务端时使用的目录结构参照gaea.tar.gz,服务是放在service目录下,service/deploy/{serviceName} 放配置文件,serveice/lib放依赖的jar包。

    [root@localhost gaea]# pwd
    /opt/test/gaea
    [root@localhost gaea]# ls -l
    总计 36
    drwxr-xr-x 2 root root 4096 2012-09-10 bin
    drwxr-xr-x 2 root root 4096 2012-09-10 conf
    -rw-r--r-- 1 root root   52 2012-09-10 COPYRIGHT
    drwxr-xr-x 2 root root 4096 2012-09-10 docs
    drwxr-xr-x 2 root root 4096 2012-09-10 lib
    drwxr-xr-x 2 root root 4096 2012-09-10 log
    -rw-r--r-- 1 root root  247 2012-09-10 README
    drwxr-xr-x 4 root root 4096 2012-09-10 service
    drwxr-xr-x 3 root root 4096 2012-09-10 tmp

    如果需要修改服务器的监听端口,修改service/deploy/{serviceName}/gaea_config.xml

    <!-- socket server listent port -->
    <property>
    <name>gaea.server.tcp.listenPort</name>
    <value>9090</value>
    </property>

    启动时执行startup.sh,参数参考demo_run.sh

    [root@localhost bin]# pwd
    /opt/test/gaea/bin
    [root@localhost bin]# ls -l
    总计 20
    -rw-r--r-- 1 root root  164 2012-08-16 demo_run.sh
    -rw-r--r-- 1 root root 2065 2012-09-04 restart.sh
    -rw-r--r-- 1 root root    0 2010-12-28 shutdown.bat
    -rw-r--r-- 1 root root  809 2012-08-16 shutdown.sh
    -rw-r--r-- 1 root root 2115 2012-09-07 startup.bat
    -rwxr-xr-x 1 root root 2967 2012-08-16 startup.sh
    [root@localhost bin]# chmod +x demo_run.sh 
    [root@localhost bin]# ./demo_run.sh 

    no GAEA_HOME path
    pid:6118
    [root@localhost bin]# [06-21 16:03:41,073 INFO ] [main] bootstrap.Main - +++++++++++++++++++++ staring +++++++++++++++++++++


    [06-21 16:03:41,074 INFO ] [main] bootstrap.Main - user.dir: /opt/test/gaea/bin
    [06-21 16:03:41,074 INFO ] [main] bootstrap.Main - rootPath: /opt/test/gaea/bin/../
    [06-21 16:03:41,074 INFO ] [main] bootstrap.Main - service gaea_config.xml: /opt/test/gaea/bin/../service/deploy/demo/gaea_config.xml
    [06-21 16:03:41,074 INFO ] [main] bootstrap.Main - default gaea_config.xml: /opt/test/gaea/bin/../conf/gaea_config.xml
    [06-21 16:03:41,075 INFO ] [main] bootstrap.Main - service gaea_log4j.xml: /opt/test/gaea/bin/../service/deploy/demo/gaea_log4j.xml
    [06-21 16:03:41,075 INFO ] [main] bootstrap.Main - default gaea_log4j.xml: /opt/test/gaea/bin/../conf/gaea_log4j.xml
    [06-21 16:03:41,075 INFO ] [main] bootstrap.Main - load service config...
    [06-21 16:03:41,328 INFO ] [main] bootstrap.Main - gaea.service.name: demo
    [06-21 16:03:41,329 INFO ] [main] bootstrap.Main - -----------------loading global jars------------------
    [06-21 16:03:41,337 INFO ] [main] hotdeploy.GlobalClassLoader - append jar to classpath:file:/opt/test/gaea/service/deploy/demo/demo.jar
    [06-21 16:03:41,337 INFO ] [main] hotdeploy.GlobalClassLoader - append jar to classpath:file:/opt/test/gaea/service/lib/antlr-runtime-3.3.jar

    [06-21 16:03:41,344 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:41,345 INFO ] [main] bootstrap.Main - --------------------loading proxys-------------------
    [06-21 16:03:41,348 INFO ] [main] bytecode.ScanClass - begin scan jar from path:/opt/test/gaea/bin/../service/deploy/demo/
    [06-21 16:03:41,435 INFO ] [main] bytecode.ScanClass - finish scan jar
    [06-21 16:03:41,437 INFO ] [main] bytecode.ProxyClassCreater - loading dynamic proxy v1...
    [06-21 16:03:41,437 INFO ] [main] bytecode.ProxyClassCreater - loading => NewsServiceProxyStub1371801821435
    [06-21 16:03:41,437 INFO ] [main] bytecode.ProxyClassCreater - class name:components.NewsService
    [06-21 16:03:41,491 DEBUG] [main] bytecode.ProxyClassCreater - create method:getNewsByID
    [06-21 16:03:41,545 DEBUG] [main] bytecode.ProxyClassCreater - create method:getNewsByCateID
    [06-21 16:03:41,572 INFO ] [main] bytecode.ProxyClassCreater - load dynamic proxy success!!!
    [06-21 16:03:41,572 INFO ] [main] bytecode.CreateManager - proxy class buffer creater finish!!!
    [06-21 16:03:41,573 INFO ] [main] bytecode.ProxyFactoryCreater - begin create ProxyFactory:ProxyFactory1371801821435
    [06-21 16:03:41,578 DEBUG] [main] bytecode.ProxyFactoryCreater - ProxyFactory source code:public com.bj58.spat.gaea.server.contract.context.IProxyStub getProxy(String lookup) {if(lookup.equalsIgnoreCase("NewsService")){return proxyNewsServicedemo;}return null;}}
    [06-21 16:03:41,579 INFO ] [main] bytecode.ProxyFactoryCreater - create ProxyFactory success!!!
    [06-21 16:03:41,580 INFO ] [main] bytecode.CreateManager - proxy factory buffer creater finish!!!
    [06-21 16:03:41,581 INFO ] [main] bytecode.CreateManager - dynamic load class:NewsServiceProxyStub1371801821435
    [06-21 16:03:41,582 INFO ] [main] bytecode.CreateManager - crate ProxyFactory instance!!!
    [06-21 16:03:41,582 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:41,582 INFO ] [main] bootstrap.Main - -----------------loading init beans------------------
    [06-21 16:03:41,582 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.contract.context.SerializerClassInit
    [06-21 16:03:41,588 INFO ] [main] log.SystemPrintStream - Scan jar files begin!
    [06-21 16:03:41,589 ERROR] [main] log.SystemPrintStream - 开始扫描全部引用jar包,如果扫描过程过长请在启动vm参数中设置gaea.serializer.basepakage或者设置gaea.serializer.scantype=asyn使用异步模式扫描。
    [06-21 16:03:41,590 INFO ] [main] log.SystemPrintStream - scanByURLClassLoader:/opt/test/gaea/bin/
    [06-21 16:03:41,591 INFO ] [main] log.SystemPrintStream - scanByURLClassLoader:/opt/jdk1.6.0_16/lib/tools.jar
    [06-21 16:03:42,964 INFO ] [main] log.SystemPrintStream - scanByURLClassLoader:/opt/test/gaea/lib/antlrall-2.7.2.jar
    [06-21 16:03:43,100 INFO ] [main] log.SystemPrintStream - scanByURLClassLoader:/opt/test/gaea/lib/com.bj58.spat.gaea.protocol-1.0.0.jar
    [06-21 16:03:43,111 INFO ] [main] log.SystemPrintStream - scanByURLClassLoader:/opt/test/gaea/lib/com.bj58.spat.gaea.serializer-1.0.0.jar
    [06-21 16:03:43,131 INFO ] [main] log.SystemPrintStream - scanByURLClassLoader:/opt/test/gaea/lib/com.bj58.spat.gaea.server-1.0.0.jar


    [06-21 16:03:46,197 INFO ] [main] log.SystemPrintStream - scaning com.bj58.enterprise.entity.com.bj58.enterprise.entity.Enterprise
    [06-21 16:03:46,197 INFO ] [main] log.SystemPrintStream - scaning com.bj58.enterprise.entity.com.bj58.enterprise.entity.SESUser
    [06-21 16:03:46,198 INFO ] [main] log.SystemPrintStream - scaning com.bj58.enterprise.entity.com.bj58.enterprise.entity.User
    [06-21 16:03:46,198 INFO ] [main] log.SystemPrintStream - scaning com.bj58.spat.gaea.server.core.communication.http.com.bj58.spat.gaea.server.core.communication.http.News
    [06-21 16:03:46,199 INFO ] [main] log.SystemPrintStream - scaning com.bj58.spat.gaea.server.util.com.bj58.spat.gaea.server.util.News
    [06-21 16:03:46,199 INFO ] [main] log.SystemPrintStream - scaning entity.entity.News
    [06-21 16:03:46,199 INFO ] [main] log.SystemPrintStream - Scan jar files completed!
    [06-21 16:03:46,200 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:46,200 INFO ] [main] bootstrap.Main - -----------loading global request filters------------
    [06-21 16:03:46,200 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.filter.ProtocolParseFilter
    [06-21 16:03:46,201 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.filter.HandclaspFilter
    [06-21 16:03:46,202 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.filter.ExecuteMethodFilter
    [06-21 16:03:46,203 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:46,203 INFO ] [main] bootstrap.Main - -----------loading global response filters-----------
    [06-21 16:03:46,203 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.filter.ProtocolCreateFilter
    [06-21 16:03:46,219 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.filter.ExecuteTimeFilter
    [06-21 16:03:46,224 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:46,224 INFO ] [main] bootstrap.Main - -----------loading connection filters-----------
    [06-21 16:03:46,224 INFO ] [main] bootstrap.Main - load: com.bj58.spat.gaea.server.filter.IPFilter
    [06-21 16:03:46,225 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:46,225 INFO ] [main] bootstrap.Main - ------------------load secureKey start---------------------
    [06-21 16:03:46,225 INFO ] [main] bootstrap.Main - ------------------load secureKey end----------------------


    [06-21 16:03:46,226 INFO ] [main] bootstrap.Main - ------------------signal registr start---------------------
    [06-21 16:03:46,226 INFO ] [main] bootstrap.Main - ------------------signal registr success----------------------


    [06-21 16:03:46,226 INFO ] [main] bootstrap.Main - ------------------ starting servers -----------------
    [06-21 16:03:46,227 INFO ] [main] bootstrap.Main - gaea.server.tcp is starting...
    [06-21 16:03:46,263 INFO ] [main] tcp.SocketServer - loading invoker...
    [06-21 16:03:46,300 INFO ] [main] proxy.AsyncInvokerHandle - async worker count:100
    [06-21 16:03:46,300 INFO ] [main] tcp.SocketServer - initing server...
    [06-21 16:03:46,300 INFO ] [main] tcp.SocketServer - -- socket server config --
    [06-21 16:03:46,301 INFO ] [main] tcp.SocketServer - -- listen ip: 0.0.0.0
    [06-21 16:03:46,301 INFO ] [main] tcp.SocketServer - -- port: 9090
    [06-21 16:03:46,301 INFO ] [main] tcp.SocketServer - -- tcpNoDelay: true
    [06-21 16:03:46,301 INFO ] [main] tcp.SocketServer - -- receiveBufferSize: 65536
    [06-21 16:03:46,301 INFO ] [main] tcp.SocketServer - -- sendBufferSize: 65536
    [06-21 16:03:46,302 INFO ] [main] tcp.SocketServer - -- frameMaxLength: 524288
    [06-21 16:03:46,302 INFO ] [main] tcp.SocketServer - -- worker thread count: 32
    [06-21 16:03:46,302 INFO ] [main] tcp.SocketServer - --------------------------
    [06-21 16:03:46,302 INFO ] [main] tcp.SocketServer - demo SocketServer starting...
    [06-21 16:03:46,345 INFO ] [main] bootstrap.Main - gaea.server.tcpstarted success!!!


    [06-21 16:03:46,345 INFO ] [main] bootstrap.Main - gaea.server.telnet is starting...
    [06-21 16:03:46,346 INFO ] [main] telnet.TelnetServer - ----------------telnet server config------------------
    [06-21 16:03:46,346 INFO ] [main] telnet.TelnetServer - -- telnet server listen ip: 0.0.0.0
    [06-21 16:03:46,346 INFO ] [main] telnet.TelnetServer - -- telnet server port: 7070
    [06-21 16:03:46,346 INFO ] [main] telnet.TelnetServer - ------------------------------------------------------
    [06-21 16:03:46,352 INFO ] [main] bootstrap.Main - gaea.server.telnetstarted success!!!


    [06-21 16:03:46,352 INFO ] [main] bootstrap.Main - -------------------------end-------------------------


    [06-21 16:03:46,352 INFO ] [main] bootstrap.Main - +++++++++++++++++++++ server start success!!! +++++++++++++++++++++

    服务器启动完毕

    客户端

    启动客户端,我自己打包成了可执行文件

    [root@localhost test]# java -jar client.jar 
    Scan jar files begin!
    开始扫描全部引用jar包,如果扫描过程过长请在启动vm参数中设置gaea.serializer.basepakage或者设置gaea.serializer.scantype=asyn使用异步模式扫描。
    scanByURLClassLoader:/opt/test/client.jar
    scaning com.bj58.spat.gaea.serializer.component.com.bj58.spat.gaea.serializer.component.TypeMap
    scaning com.bj58.spat.gaea.serializer.component.com.bj58.spat.gaea.serializer.component.ClassScaner
    scaning com.bj58.spat.gaea.serializer.component.annotation.com.bj58.spat.gaea.serializer.component.annotation.GaeaSerializable
    scaning com.bj58.spat.gaea.serializer.component.exception.com.bj58.spat.gaea.serializer.component.exception.DisallowedSerializeException
    scaning com.bj58.spat.gaea.serializer.serializer.com.bj58.spat.gaea.serializer.serializer.ObjectSerializer
    scaning com.bj58.spat.gaea.protocol.sdp.com.bj58.spat.gaea.protocol.sdp.RequestProtocol
    scaning com.bj58.spat.gaea.protocol.sdp.com.bj58.spat.gaea.protocol.sdp.ResetProtocol
    scaning com.bj58.spat.gaea.protocol.sdp.com.bj58.spat.gaea.protocol.sdp.ExceptionProtocol
    scaning com.bj58.spat.gaea.protocol.sdp.com.bj58.spat.gaea.protocol.sdp.ResponseProtocol
    scaning com.bj58.spat.gaea.protocol.sdp.com.bj58.spat.gaea.protocol.sdp.HandclaspProtocol
    scaning com.bj58.spat.gaea.protocol.utility.com.bj58.spat.gaea.protocol.utility.KeyValuePair
    scaning com.github.hailinzeng.gaea.com.github.hailinzeng.gaea.News
    Scan jar files completed!
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog info
    信息: Gaea Client v1.0.0:starting init servers
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog info
    信息: Gaea Client v1.0.0:init servers end
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog info
    信息: Gaea Client v1.0.0:MaxPakageSize:102400
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog info
    信息: Gaea Client v1.0.0:SendBufferSize:8388608
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog info
    信息: Gaea Client v1.0.0:RecvBufferSize:8388608
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog info
    信息: Gaea Client v1.0.0:create a new connection :Socket[addr=/127.0.0.1,port=9090,localport=35459]
    2013-6-21 17:13:04 com.bj58.spat.gaea.client.utility.logger.FileLog warn
    警告: Gaea Client v1.0.0:method:getNewsByCateID invoke time :1010
    ID is 58 title is 58同城一个神奇的网站

  • 相关阅读:
    GetBuffer与ReleaseBuffer的用法,CString剖析
    Mysql 关闭自动提交
    Mysql 创建用户和数据库
    老爸陪我去面试——北漂18年(3)
    Java中的“&”和“&&”的区别
    Java常量定义
    利用Java API生成50到100之间的随机数
    Java考查“==”和equals
    列出JDK中常用的Java包
    cognos 配置
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4378345.html
Copyright © 2020-2023  润新知