# zbus
**Repository Path**: chengwc/zbus
## Basic Information
- **Project Name**: zbus
- **Description**: ZBUS=MQ+RPC+PROXY 服务总线 1)支持消息队列, 发布订阅, RPC, 代理(TCP/DMZ) 2)亿级消息堆积能力、支持HA高可用 3)无依赖单个Jar包 ~300K 4)丰富的API--JAVA/C/C++/C#/Python/Node.JS多语言接入,支持HTTP/Thrift等协议接入
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: http://zbus.org
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 914
- **Created**: 2015-09-27
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ZBUS--轻量级MQ、RPC、服务总线
##ZBUS = MQ + RPC + PROXY
* **支持消息队列, 发布订阅, RPC, 代理(TCP/HTTP/DMZ)**
* **亿级消息堆积能力、支持HA高可用**
* **单个Jar包无依赖 ~300K**
* **服务代理 -- 适配改造已有业务系统,使之具备跨平台与语言**
* **丰富的API--JAVA/C/C++/C#/Python/Node.JS多语言接入**
## QQ群: 467741880, 如果喜欢该项目,请右上角star,好让更多人参与改进:)
## ZBUS 启动与监控
zbus-dist选择zbus.sh或者zbus.bat直接执行

总线默认占用 **15555** 端口, [http://localhost:15555](http://localhost:15555 "默认监控地址") 可以直接进入监控,注意zbus因为原生兼容HTTP协议所以监控与消息队列使用同一个端口
## ZBUS 角色概要

## ZBUS 消息通讯基础(NET模块)
ZBUS项目不依赖其他第三方库,消息通讯基于NIO完成(NET子项目)。NET包对NIO做了简洁的封装,相对Netty而言,学习成本低几个量级,模型简单,但不失扩展性。

框架结构保持 **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
### 生产者
public static void main(String[] args) throws Exception {
//创建Broker代理
BrokerConfig config = new BrokerConfig();
config.setServerAddress("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.close();
}
### 消费者
public static void main(String[] args) throws Exception{
//创建Broker代表
BrokerConfig brokerConfig = new BrokerConfig();
brokerConfig.setServerAddress("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部分
//1)创建Broker代表(可用高可用替代)
BrokerConfig config = new BrokerConfig();
config.setServerAddress("127.0.0.1:15555");
Broker broker = new SingleBroker(config);
//2)创建基于MQ的Invoker以及Rpc工厂,指定RPC采用的MQ为MyRpc
MqInvoker invoker = new MqInvoker(broker, "MyRpc");
RpcFactory factory = new RpcFactory(invoker);
//3) 动态代理出实现类
Interface hello = factory.getService(Interface.class);
test(hello);
broker.close();
### Spring集成--服务端(RPC示例)
**无任何代码侵入使得你已有的业务接口接入到zbus,获得跨平台和多语言支持**
### Spring集成--客户端
**Spring完成zbus代理透明化,zbus设施从你的应用逻辑中彻底消失**
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("SpringRpcClient.xml");
Interface intf = (Interface) context.getBean("interface");
for(int i=0;i<100;i++){
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高阶话题--协议")