# zbus **Repository Path**: java616/zbus ## Basic Information - **Project Name**: zbus - **Description**: ZBUS=MQ+RPC+PROXY 服务总线 1)超轻量级无依赖单个Jar包 ~200K 2)支持MQ, PubSub, RPC, Proxy。3) 支持消息持久化,几十亿消息堆积能力 4)丰富的API--JAVA/C/C++/C#/Python/Node.JS多语言接入 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: http://zbus.org - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 915 - **Created**: 2015-08-28 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ZBUS--轻量级MQ、RPC、服务总线 ##ZBUS = MQ + RPC + PROXY * **MQ -- 生产消费模式(持久化)** * **PubSub -- 发布订阅模式** * **RPC -- 远程方法调用** * **服务代理 -- 适配改造已有业务系统,使之具备跨平台与语言** * **超轻量级 单个Jar无依赖 ~190K** * **跨平台、多语言支持** ## QQ群: 467741880 ## ZBUS 启动与监控 zbus-dist选择zbus.sh或者zbus.bat直接执行 ![简单监控](http://git.oschina.net/uploads/images/2015/0818/132153_425b58e9_7458.png) 总线默认占用 **15555** 端口, [http://localhost:15555](http://localhost:15555 "默认监控地址") 可以直接进入监控,注意zbus因为原生兼容HTTP协议所以监控与消息队列使用同一个端口 ## ZBUS 角色概要 ![zbus-arch](http://git.oschina.net/uploads/images/2015/0818/145645_0a1651bf_7458.png) ## ZBUS 消息通讯基础(NET模块) ZBUS项目不依赖其他第三方库,消息通讯基于NIO完成(NET子项目)。NET包对NIO做了简洁的封装,相对Netty而言,学习成本低几个量级,模型简单,但不失扩展性。 ![znet-arch](http://git.oschina.net/uploads/images/2015/0818/151248_bde11d15_7458.png) 框架结构保持 **Dispatcher + N SelectorThread + IoAdaptor** **Dispatcher** 负责管理N个Selector线程 **SelectorThread** 负责NIO读写事件分发 **IoAdaptor** 个性化读写事件 基于NET的服务器程序基本只要关心IoAdaptor的个性化,比如ZBUS入口就是MqAdaptor ## ZBUS API * [Java API](http://git.oschina.net/rushmore/zbus "zbus") * [C/C++ API](http://git.oschina.net/rushmore/zbus-api-c "zbus-api-c") * [Python API](http://git.oschina.net/rushmore/zbus-api-python "zbus-api-python") * [C# API](http://git.oschina.net/rushmore/zbus-api-csharp "zbus-api-csharp") * [Node.JS API](http://git.oschina.net/rushmore/zbus-api-nodejs "zbus-api-nodejs") ## ZBUS PROXY * [微软MSMQ|国信交易调度](http://git.oschina.net/rushmore/zbus-proxy-msmq "zbus-proxy-msmq") * [金证KCXP](http://git.oschina.net/rushmore/zbus-proxy-kcxp "zbus-proxy-kcxp") * [国信TC](http://git.oschina.net/rushmore/zbus-proxy-tc "zbus-proxy-tc") * [桥接JAVA客户端](http://git.oschina.net/rushmore/zbus-proxy-java "zbus-proxy-java") * [国泰君安GTA](http://git.oschina.net/rushmore/zbus-proxy-gta "zbus-proxy-gta") ## ZBUS 示例 ### Java Maven 依赖 org.zbus zbus 6.2.0-SNAPSHOT ### 生产者 //创建Broker代理 BrokerConfig config = new BrokerConfig(); config.setBrokerAddress("127.0.0.1:15555"); final Broker broker = new SingleBroker(config); Producer producer = new Producer(broker, "MyMQ"); producer.createMQ(); // 如果已经确定存在,不需要创建 //创建消息,消息体可以是任意binary,应用协议交给使用者 Message msg = new Message(); msg.setBody("hello world"); producer.sendSync(msg); //销毁Broker broker.close(); ### 消费者 //创建Broker代表 BrokerConfig brokerConfig = new BrokerConfig(); brokerConfig.setBrokerAddress("127.0.0.1:15555"); Broker broker = new SingleBroker(brokerConfig); MqConfig config = new MqConfig(); config.setBroker(broker); config.setMq("MyMQ"); //创建消费者 @SuppressWarnings("resource") Consumer c = new Consumer(config); c.onMessage(new MessageHandler() { @Override public void handle(Message msg, Session sess) throws IOException { System.out.println(msg); } }); //启动消费线程 c.start(); ### RPC动态代理【各类复杂类型】 参考源码test目下的rpc部分 BrokerConfig brokerConfig = new BrokerConfig(); brokerConfig.setBrokerAddress("127.0.0.1:15555"); Broker broker = new SingleBroker(brokerConfig); RpcProxy proxy = new RpcProxy(broker); RpcConfig config = new RpcConfig(); config.setMq("MyRpc"); config.setTimeout(10000); Interface hello = proxy.getService(Interface.class, config); Object[] res = hello.objectArray(); for (Object obj : res) { System.out.println(obj); } Object[] array = new Object[] { getUser("rushmore"), "hong", true, 1, String.class }; int saved = hello.saveObjectArray(array); System.out.println(saved); Class ret = hello.classTest(String.class); System.out.println(ret); broker.close(); ### Spring集成--服务端(RPC示例) **无任何代码侵入使得你已有的业务接口接入到zbus,获得跨平台和多语言支持** ### Spring集成--客户端 **Spring完成zbus代理透明化,zbus设施从你的应用逻辑中彻底消失** public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("zbusSpringClient.xml"); Interface intf = (Interface) context.getBean("interface"); System.out.println(intf.listMap()); } ## ZBUS消息协议 * [08 ZBUS高阶话题--协议](http://git.oschina.net/rushmore/zbus/blob/master/doc/08.%20ZBUS%E9%AB%98%E9%98%B6%E8%AF%9D%E9%A2%98--%E5%8D%8F%E8%AE%AE.md?dir=0&filepath=doc%2F08.+ZBUS%E9%AB%98%E9%98%B6%E8%AF%9D%E9%A2%98--%E5%8D%8F%E8%AE%AE.md&oid=61c459ed0b6dcb0b6d204711cb4d58d183715a3a&sha=9473c1b43089291e385b15eb3deaa32f7277a428 "08 ZBUS高阶话题--协议")