Full Code of yanghua/banyan for AI

master eff18b0d28e1 cached
177 files
488.5 KB
114.3k tokens
1214 symbols
1 requests
Download .txt
Showing preview only (552K chars total). Download the full file or copy to clipboard to get everything.
Repository: yanghua/banyan
Branch: master
Commit: eff18b0d28e1
Files: 177
Total size: 488.5 KB

Directory structure:
gitextract_25jgdlw4/

├── .gitignore
├── .travis.yml
├── README.md
├── benchmark/
│   ├── README-CN.md
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── messagebus/
│           │           └── benchmark/
│           │               └── client/
│           │                   ├── Benchmark.java
│           │                   ├── IFetcher.java
│           │                   ├── ILifeCycle.java
│           │                   ├── TestConfigConstant.java
│           │                   ├── TestMessageFactory.java
│           │                   ├── TestUtility.java
│           │                   └── testCase/
│           │                       ├── CalcService.java
│           │                       ├── ConsumeTestCase.java
│           │                       ├── MessagebusJSONRpcTestCase.java
│           │                       ├── OriginalConsumeTestCase.java
│           │                       ├── OriginalProduceTestCase.java
│           │                       ├── OriginalProduceWithoutTopologyTestCase.java
│           │                       ├── ProduceRemainLogTestCase.java
│           │                       ├── ProduceTestCase.java
│           │                       ├── ProduceWithoutLogTestCase.java
│           │                       └── ThriftJSONRpcTestCase.java
│           └── resources/
│               ├── clearEnv.sh
│               ├── log4j.properties
│               ├── plotscript_consume.sh
│               ├── plotscript_messagebus_client_produce.sh
│               ├── plotscript_messagebus_client_remain_log_produce.sh
│               ├── plotscript_messagebus_client_without_realtime_log_produce.sh
│               ├── plotscript_official_client_produce.sh
│               └── plotscript_official_client_without_topology_produce.sh
├── client/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── messagebus/
│       │   │           └── client/
│       │   │               ├── AbstractPool.java
│       │   │               ├── Address.java
│       │   │               ├── ConfigManager.java
│       │   │               ├── GenericContext.java
│       │   │               ├── IMessageReceiveListener.java
│       │   │               ├── IRequestListener.java
│       │   │               ├── IRpcMessageProcessor.java
│       │   │               ├── InnerClient.java
│       │   │               ├── InnerPool.java
│       │   │               ├── MessageContext.java
│       │   │               ├── MessageResponseTimeoutException.java
│       │   │               ├── Messagebus.java
│       │   │               ├── MessagebusConnectedFailedException.java
│       │   │               ├── MessagebusFactory.java
│       │   │               ├── MessagebusPool.java
│       │   │               ├── MessagebusSinglePool.java
│       │   │               ├── MessagebusUnOpenException.java
│       │   │               ├── WrappedRpcServer.java
│       │   │               ├── carry/
│       │   │               │   ├── AbstractMessageCarryer.java
│       │   │               │   ├── CarryFactory.java
│       │   │               │   ├── GenericBroadcaster.java
│       │   │               │   ├── GenericConsumer.java
│       │   │               │   ├── GenericProducer.java
│       │   │               │   ├── GenericPublisher.java
│       │   │               │   ├── GenericRequester.java
│       │   │               │   ├── GenericResponser.java
│       │   │               │   ├── GenericRpcRequester.java
│       │   │               │   ├── GenericRpcResponser.java
│       │   │               │   ├── GenericSubscriber.java
│       │   │               │   ├── IBroadcaster.java
│       │   │               │   ├── IConsumer.java
│       │   │               │   ├── IProducer.java
│       │   │               │   ├── IPublisher.java
│       │   │               │   ├── IRequester.java
│       │   │               │   ├── IResponser.java
│       │   │               │   ├── IRpcRequester.java
│       │   │               │   ├── IRpcResponser.java
│       │   │               │   └── ISubscriber.java
│       │   │               ├── event/
│       │   │               │   ├── carry/
│       │   │               │   │   ├── BroadcastEventProcessor.java
│       │   │               │   │   ├── CarryEvent.java
│       │   │               │   │   ├── CommonEventProcessor.java
│       │   │               │   │   ├── ConsumeEventProcessor.java
│       │   │               │   │   ├── ProduceEventProcessor.java
│       │   │               │   │   ├── PublishEventProcessor.java
│       │   │               │   │   ├── RequestEventProcessor.java
│       │   │               │   │   ├── ResponseEventProcessor.java
│       │   │               │   │   ├── RpcRequestEventProcessor.java
│       │   │               │   │   ├── RpcResponseEventProcessor.java
│       │   │               │   │   └── SubscribeEventProcessor.java
│       │   │               │   └── component/
│       │   │               │       ├── ClientDestroyEvent.java
│       │   │               │       ├── ClientDestroyEventProcessor.java
│       │   │               │       ├── ClientInitedEvent.java
│       │   │               │       ├── ClientInitedEventProcessor.java
│       │   │               │       ├── InnerEvent.java
│       │   │               │       └── NoticeEvent.java
│       │   │               ├── extension/
│       │   │               │   └── thrift/
│       │   │               │       ├── TAMQPClientTransport.java
│       │   │               │       └── ThriftMessageHandler.java
│       │   │               ├── message/
│       │   │               │   ├── model/
│       │   │               │   │   ├── Message.java
│       │   │               │   │   ├── MessageFactory.java
│       │   │               │   │   └── MessageJSONSerializer.java
│       │   │               │   └── transfer/
│       │   │               │       └── MessageHeaderTransfer.java
│       │   │               └── model/
│       │   │                   ├── BaseModel.java
│       │   │                   ├── Config.java
│       │   │                   ├── HandlerModel.java
│       │   │                   └── MessageCarryType.java
│       │   └── resources/
│       │       └── log4j.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── messagebus/
│                       └── client/
│                           ├── api/
│                           │   ├── Broadcast.java
│                           │   ├── ComponentEventListener.java
│                           │   ├── ProduceConsume.java
│                           │   ├── ProduceConsumeLoopback.java
│                           │   ├── PublishSubscribe.java
│                           │   ├── RequestResponse.java
│                           │   └── RpcRequestResponse.java
│                           ├── core/
│                           │   ├── BaseTestCase.java
│                           │   └── MessageUtil.java
│                           └── feature/
│                               ├── CalcService.java
│                               ├── CalcServiceImpl.java
│                               ├── MessageBodySize.java
│                               ├── MessageNumLimit.java
│                               └── ThriftWithAMQPRpc.java
├── common-component/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── messagebus/
│           │           └── common/
│           │               ├── AuthInfo.java
│           │               ├── Constants.java
│           │               ├── Event.java
│           │               ├── ExceptionHelper.java
│           │               ├── GsonUtil.java
│           │               ├── HttpHelper.java
│           │               ├── IAsyncCallback.java
│           │               ├── InnerNoticeEntity.java
│           │               ├── NumberHelper.java
│           │               ├── RandomHelper.java
│           │               ├── RouterType.java
│           │               ├── ShellHelper.java
│           │               ├── TestVariableInfo.java
│           │               ├── UUIDGenerator.java
│           │               └── compress/
│           │                   ├── CompressEnum.java
│           │                   ├── CompressorFactory.java
│           │                   ├── ICompressor.java
│           │                   ├── LZFCompressor.java
│           │                   └── SnappyCompressor.java
│           └── resources/
│               └── log4j.properties
├── httpbridge/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── messagebus/
│       │   │           └── httpbridge/
│       │   │               ├── controller/
│       │   │               │   ├── ExceptionHandler.java
│       │   │               │   └── HttpBridge.java
│       │   │               ├── filter/
│       │   │               │   └── URLDispatcher.java
│       │   │               ├── listener/
│       │   │               │   └── AppContextListener.java
│       │   │               ├── model/
│       │   │               │   └── TextMessage.java
│       │   │               └── util/
│       │   │                   ├── CommonUtil.java
│       │   │                   ├── Constants.java
│       │   │                   ├── ResponseUtil.java
│       │   │                   └── TextMessageJSONSerializer.java
│       │   ├── resources/
│       │   │   └── log4j.properties
│       │   └── webapp/
│       │       └── WEB-INF/
│       │           ├── jetty-web.xml
│       │           └── web.xml
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── messagebus/
│           │           └── httpbridge/
│           │               └── util/
│           │                   └── PropertiesHelper.java
│           └── resource/
│               └── common.properties
├── interactor-component/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── messagebus/
│                       └── interactor/
│                           ├── proxy/
│                           │   ├── ProxyConsumer.java
│                           │   └── ProxyProducer.java
│                           ├── rabbitmq/
│                           │   ├── AbstractInitializer.java
│                           │   ├── Exchange.java
│                           │   ├── ExchangeManager.java
│                           │   ├── MQDataInitializer.java
│                           │   ├── Queue.java
│                           │   ├── QueueManager.java
│                           │   └── RabbitmqServerManager.java
│                           └── util/
│                               └── ShellHelper.java
├── managesystem/
│   └── banyan_DB.sql
├── pom.xml
└── scenario/
    ├── pom.xml
    └── src/
        └── main/
            ├── java/
            │   └── com/
            │       └── messagebus/
            │           └── scenario/
            │               ├── client/
            │               │   ├── BroadcastSubscribe.java
            │               │   ├── ClientUnderMultiThread.java
            │               │   ├── ProduceConsume.java
            │               │   ├── PublishSubscribe.java
            │               │   ├── RequestResponse.java
            │               │   └── XSLTTestCase.java
            │               ├── httpBridge/
            │               │   ├── ProduceConsume.java
            │               │   ├── PublishSubscribe.java
            │               │   ├── RequestTemplate.java
            │               │   └── ResponseTemplate.java
            │               └── util/
            │                   └── PropertiesHelper.java
            └── resources/
                ├── common.properties
                ├── consumerSchema.xml
                ├── pToc.xsl
                ├── producerSchema.xml
                └── producerXml.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.idea/*
.DS_Store
*/target/*
*.iml
META-INF/*
*.rdb
*.MF
*.class

================================================
FILE: .travis.yml
================================================
language: java

================================================
FILE: README.md
================================================
#overview

[![Build Status](https://travis-ci.org/yanghua/banyan.svg?branch=messagebus-ng)](https://travis-ci.org/yanghua/banyan)

![img 15][15]


```
banyan is a tree has thick branches which grows in the East Asia. 
```
Thanks for [@ok95](https://github.com/ok95) & [@Joy-Zhang](https://github.com/Joy-Zhang) given the good idea & guidance.

![img 14][14]

banyan used to communicate and integrate over multi-app. It depends on [RabbitMQ](http://www.rabbitmq.com/) as backend broker(message exchanger). Most scenario:

* enterprise information Integration
* oriented-component & oriented-module distributed developer
* infrastructure for esb or soa
* json-rpc / IDL-RPC(thrift)
* configured compress/uncompress
* http-bridge for all platform
* web-console UI

the necessity of encapsulating with RabbitMQ:

* provide router pattern
* embed permission into client-jar
* removed create & delete & update operation from client, replaced with central-register mode

more information please see : [banyan-category](http://blog.csdn.net/column/details/banyan.html)

##tree topology structure
the message bus's implementation is based on Rabbitmq. It can takes advantage of multiple message exchange-types rabbitmq provided and builds many kinds of router pattern. The message bus's router topology lists below:


![img 3][3]

the advantages of the tree topology:

* hide the router topology from client-caller (just need to know the `proxy` node)
* multiple message communication pattern (p2p, pub/sub, broadcast)
* implement the message log without interrupting the message channel
* communication-policy configure once , push everywhere

##web-console
banyan has its' own web console that built as a Apache-ofbiz's component. The web console provide a dashboard about rabbitmq : 

![img 16][16]

and some core model's maintenance such as queue : 

![img 17][17]

##Restful API

* [apis](https://github.com/yanghua/banyan/tree/master/httpbridge)

##scenario & usage

###produce & consume

* [produce](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsume.java#L34) / [pull consume](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsume.java#L46)
* [produce](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsume.java#L34) / [push consume](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsume.java#L64)
* [produce](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsume.java#L34) / [async consume with another thread](https://github.com/yanghua/banyan/blob/master/scenario%2Fsrc%2Fmain%2Fjava%2Fcom%2Fmessagebus%2Fscenario%2Fclient%2FProduceConsume.java#L91)
* [produce-loopback](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsumeLoopback.java#L15) / [consume-loopback](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FProduceConsumeLoopback.java#L15)


###request & response

* [request](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FRequestResponse.java#L35) / [response](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FRequestResponse.java#L35) 

###publish & subscirbe

* [publish](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FPublishSubscribe.java#L31) / [subscribe](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FPublishSubscribe.java#L31)

###broadcast & notification-handler

* [broadcast](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FBroadcast.java#L31) / [notification-handler](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FBroadcast.java#L31)

###json-rpc(wrapped-offical-java-client)

* [rpc-request](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FRpcRequestResponse.java#L28) / [rpc-response](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Fapi%2FRpcRequestResponse.java#L28)

###thrift-rpc(thrid-party-rpc-integrated)

* [rpc-request](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Ffeature%2FThriftWithAMQPRpc.java#L36) / [rpc-response](https://github.com/yanghua/banyan/blob/master/client%2Fsrc%2Ftest%2Fjava%2Fcom%2Fmessagebus%2Fclient%2Ffeature%2FThriftWithAMQPRpc.java#L59)


###http-restful

* [http-apis](https://github.com/yanghua/banyan/tree/master/scenario/src/main/java/com/messagebus/scenario/httpBridge)

##benchmark
it shows the  `client` performance:

###hardware
client : 

```
OS : Mac os x Yosemite (version 10.10)
Processor : 2.5GHz Intel Core i5
Memory : 8GB 1600 MHz DDR3
JDK Version : 1.7.0_45
```

server :

```
OS : Ubuntu Server 14.04.1 (GNU/Linux 3.13.0-37-generic x86_64)
Processor : Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz (8核)
Memory : 8GB
JDK Version : 1.7.0_72
```

###produce
* single thread,multiple message size ,cycle send,compare:

![img 10][10]

* single thread,same message size,use client channel pool or not,compare:

![img 11][11]

###consume
* single thread,multiple message size,async receive,compare:

![img 12][12]

* single thread,same message size,use client channel pool or not,compare:

![img 13][13]

##licence
Copyright (c) 2014-2015 yanghua. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

```
http://www.apache.org/licenses/LICENSE-2.0
```
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.



[1]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/overview/architecture.png
[2]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/overview/module-dependency.png
[3]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/overview/router-topology.png
[4]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/client/carry-inherits.png
[5]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/client/handle-chain.png
[6]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/client/handler-chain-config.png
[7]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/client/node.png
[8]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/client/node-db-info.png
[9]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/common/message-design.png
[10]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/produce/singleThreadClientVSOriginal.png
[11]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/produce/singleThreadOptionPool.png
[12]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/consume/singleThreadClientVSOriginal.png
[13]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/consume/singleThreadOptionPool.png
[14]:https://raw.githubusercontent.com/yanghua/banyan/master/screenshots/overview/rabbitmq-offical-screenshot.png
[15]:https://raw.githubusercontent.com/yanghua/banyan/master/screenshots/overview/banyan.jpg
[16]:https://raw.githubusercontent.com/yanghua/banyan/master/screenshots/overview/webconsole-dashboard.png
[17]:https://raw.githubusercontent.com/yanghua/banyan/master/screenshots/overview/webconsole-queueManage.png

================================================
FILE: benchmark/README-CN.md
================================================
#overview

本项目用于对消息总线的 `client` 进行测试,以展示不同场景下 `client` 的性能表现。

##测试说明

配置说明:

client : 

```
OS : Mac os x Yosemite (version 10.10)
Processor : 2.5GHz Intel Core i5
Memory : 8GB 1600 MHz DDR3
JDK Version : 1.7.0_45
```

server :

```
OS : Ubuntu Server 14.04.1 (GNU/Linux 3.13.0-37-generic x86_64)
Processor : Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz (8核)
Memory : 8GB
JDK Version : 1.7.0_72
```

> 每次测试之前,rabbitmq都会重新初始化,也就是说,每次测试之前总线中没有消息!

##实现说明
测试模块的相关类图:

![img 1][1]


测试逻辑由一个个测试用例构成,测试用例都是形如XXXTestCase的Java文件,所有的TestCase都继承自 `Benchmark` 类,它提供了一个 `test` 方法:

```
public void test(Runnable testTask, int holdTime, int fetchNum, String fileName);
```
它需要的几个参数:

* testTask - 具体的测试逻辑所属类,上面的 `BasicProduce`的实例
* holdTime - 测试维持的毫秒数
* fetchNum - 采样次数
* fileName - 采集数据要存储的文件名

`test` 方法提供了一个实现,并完成了一些 `Aspect`,它们有:

* 日志记录
* testTask的多线程启动
* 测试数据的采集
* testTask的关闭
* 采集数据写入文件


每个继承自 `Benchmark` 的 testcase 都包含有若干个 testTask (它们都是静态内部类,都实现了 `Runnable`接口,如上图的 `BasicProduce`),每个testcase都包含有一个 `main` 入口方法,该方法用于运行测试。
对于每一个testTask,它们通常都会实现两个接口:

* ITerminater : 终止testTask的接口
* IFetcher : 提取/采集测试数据的接口

这两个接口在 `Benchmark` 的 `test` 方法中使用。

除此之外,还有几个辅助类:

- TestMessageFactory : 用于安装给定的size来生成测试消息
- TestConfigConstant : 用于统一配置一些测试常量
- TestUtility : 帮助类,测试数据写文件等


##scenario
###produce

> orignal : native-java-client 发送,但也走server的topology route,测试时共享一个channel
> client : 如无特殊说明,client发送时都基于pool-channel模式

* 单线程,不同大小的消息体,循环发送,对比:

![img 2][2]

* 单线程,相同大小的消息体,是否使用client channel pool,对比:

![img 3][3]

###consume

>所有消息以接收后拆包封装为 `Message` 对象,为接收完成,所有的测试都基于rabbitmq server中预先生成 **50W** 条消息为基础

* 单线程,不同大小的消息体,异步接收,对比:

![img 4][4]

* 单线程,相同大小的消息体,是否使用client channel pool,对比:

![img 5][5]

>由于在异步消费的时候,本身就是使用单个channel的长连接事件循环,所以此处基本没有体现出差异。

###其他通信方式

由于其他两种消息通信方式都是由produce/consume演变而来,因此其他场景下的 **单方面** 的性能跟以上相当!


[1]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/benchmark-class-diagram.png
[2]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/produce/singleThreadClientVSOriginal.png
[3]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/produce/singleThreadOptionPool.png
[4]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/consume/singleThreadClientVSOriginal.png
[5]:https://raw.githubusercontent.com/yanghua/messagebus/master/screenshots/benchmark/consume/singleThreadOptionPool.png

================================================
FILE: benchmark/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>messagebus</artifactId>
        <groupId>com.messagebus</groupId>
        <version>1.0.5</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>benchmark</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.messagebus</groupId>
            <artifactId>client</artifactId>
            <version>1.0.5</version>
        </dependency>

        <!-- thrift -->
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.9.2</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>

    </dependencies>


</project>

================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/Benchmark.java
================================================
package com.messagebus.benchmark.client;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.concurrent.TimeUnit;

public abstract class Benchmark {

    private static final Log logger = LogFactory.getLog(Benchmark.class);

    public void test(Runnable testTask, int holdTime, int fetchNum, String fileName) {
        logger.info("test begin");

        int fetchInterval = holdTime / fetchNum;
        long[] xArr = new long[fetchNum];
        long[] yArr = new long[fetchNum];

        //initialize value
        xArr[0] = 0;
        yArr[0] = 0;

        ILifeCycle testCase = (ILifeCycle) testTask;
        testCase.start();

        try {
            for (int i = 1; i < fetchNum; i++) {
                TimeUnit.MILLISECONDS.sleep(fetchInterval);

                xArr[i] = i * fetchInterval;
                yArr[i] = ((IFetcher) testTask).fetch();
            }

            ((ILifeCycle) testTask).terminate();

            //write to report file
            TestUtility.writeFile(fileName, xArr, yArr);
        } catch (InterruptedException e) {

        }

        logger.info("test end");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/IFetcher.java
================================================
package com.messagebus.benchmark.client;

public interface IFetcher {

    long fetch();

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/ILifeCycle.java
================================================
package com.messagebus.benchmark.client;

public interface ILifeCycle {

    void start();

    void terminate();

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/TestConfigConstant.java
================================================
package com.messagebus.benchmark.client;

public class TestConfigConstant {

    public static final String ORIGINAL_PRODUCE_ROUTING_KEY           = "routingkey.proxy.message.procon.erpDemoConsume";
    public static final String DEFAULT_EXCHANGE_NAME_WITHOUT_TOPOLOGY = "amq.fanout";

    public static final String PRODUCER_SECRET     = "kljasdoifqoikjhhhqwhebasdfasdf";
    public static final String PRODUCER_TOKEN      = "hlkasjdhfkqlwhlfalksjdhgssssas";
    public static final String CONSUMER_QUEUE_NAME = "emapDemoConsume";
    public static final String CONSUMER_SECRET     = "zxdjnflakwenklasjdflkqpiasdfnj";

    public static final String OUTPUT_FILE_PATH_FORMAT = "/tmp/%s.data";

    public static final int MSG_BODY_SIZE_OF_BYTE = 3000;                  //B
    public static final int HOLD_TIME_OF_MILLIS   = 60000;             //one minute
    public static final int FETCH_NUM             = 6;

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/TestMessageFactory.java
================================================
package com.messagebus.benchmark.client;

import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageFactory;
import com.messagebus.client.message.model.MessageType;

public class TestMessageFactory {

    public static Message create(MessageType type, int sizeOfByte) {
        Message msg = MessageFactory.createMessage(type);

        byte[] content = generate(sizeOfByte);

        msg.setContent(content);

        return msg;
    }

    public static Message[] create(MessageType type, int sizeOfByte, int num) {
        Message[] msgs = new Message[num];
        Message msg = create(type, sizeOfByte);
        for (int i = 0; i < num; i++) {
            msgs[i] = msg;
        }

        return msgs;
    }

    private static byte[] generate(int sizeOfByte) {
        byte[] result = new byte[sizeOfByte];
        for (int i = 0; i < sizeOfByte; i++) {
            result[i] = (byte) 1;
        }

        return result;
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/TestUtility.java
================================================
package com.messagebus.benchmark.client;

import com.messagebus.client.Messagebus;
import com.messagebus.client.MessagebusSinglePool;
import com.messagebus.client.MessagebusUnOpenException;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.common.ExceptionHelper;
import com.messagebus.common.TestVariableInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.*;

public class TestUtility {

    private final static Log logger = LogFactory.getLog(TestUtility.class);

    public static void writeFile(String fileName, long[] xArr, long[] yArr) {
        String filePath = String.format(TestConfigConstant.OUTPUT_FILE_PATH_FORMAT, fileName);

        File dataFile = new File(filePath);
        try {
            if (!dataFile.exists() && (!dataFile.createNewFile())) {
                throw new RuntimeException("create new file at : " + filePath + " , failure.");
            }
        } catch (IOException e) {
            ExceptionHelper.logException(logger, e, "writeFile");
            throw new RuntimeException(e);
        }

        FileWriter fileWriter = null;
        PrintWriter out = null;
        try {
            fileWriter = new FileWriter(filePath);
            out = new PrintWriter(fileWriter);
            out.println("#x y");

            for (int i = 0; i < xArr.length; i++) {
                out.println(xArr[i] + " " + yArr[i]);
            }

            out.flush();
        } catch (IOException e) {
            ExceptionHelper.logException(logger, e, "writeFile");
            throw new RuntimeException(e);
        } finally {
            try {
                if (fileWriter != null) fileWriter.close();
                if (out != null) out.close();
            } catch (IOException e) {

            }
        }
    }

    public static void exec(String[] cmds, boolean hasOutput) {
        if (cmds == null || cmds.length == 0) {
            return;
        }

        if (hasOutput) {
            Process process = null;
            try {
                process = Runtime.getRuntime().exec(cmds);
            } catch (IOException e) {
                ExceptionHelper.logException(logger, e, "exec");
                throw new RuntimeException(e.toString());
            }

            InputStreamReader ir = null;
            LineNumberReader input = null;
            try {
                ir = new InputStreamReader(process.getInputStream());
                input = new LineNumberReader(ir);
                String line;
                while ((line = input.readLine()) != null)
                    System.out.println(line);
            } catch (IOException e) {
                ExceptionHelper.logException(logger, e, "exec");
                throw new RuntimeException(e.toString());
            } finally {
                try {
                    if (ir != null) ir.close();
                    if (input != null) input.close();
                } catch (IOException e) {

                }
            }
        }
    }

    public static void produce(long total) {
        Message msg = TestMessageFactory.create(MessageType.QueueMessage, TestConfigConstant.MSG_BODY_SIZE_OF_BYTE);

        MessagebusSinglePool singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST,
                                                                   TestVariableInfo.PUBSUBER_PORT);
        Messagebus client = singlePool.getResource();

        try {
            for (int i = 0; i < total; i++) {
                client.produce(TestConfigConstant.PRODUCER_SECRET, TestConfigConstant.CONSUMER_QUEUE_NAME, msg, TestConfigConstant.PRODUCER_TOKEN);
            }
        } catch (MessagebusUnOpenException e) {
            e.printStackTrace();
        } finally {
            singlePool.returnResource(client);
            singlePool.destroy();
        }
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/CalcService.java
================================================
/**
 * Autogenerated by Thrift Compiler (0.9.2)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
package com.messagebus.benchmark.client.testCase;

import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import org.apache.thrift.async.AsyncMethodCallback;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;
import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Generated;
import java.util.*;

@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-4-17")
public class CalcService {

    public interface Iface {

        public int calcSum() throws TException;

    }

    public interface AsyncIface {

        public void calcSum(AsyncMethodCallback resultHandler) throws TException;

    }

    public static class Client extends org.apache.thrift.TServiceClient implements Iface {
        public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
            public Factory() {
            }

            public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
                return new Client(prot);
            }

            public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
                return new Client(iprot, oprot);
            }
        }

        public Client(org.apache.thrift.protocol.TProtocol prot) {
            super(prot, prot);
        }

        public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
            super(iprot, oprot);
        }

        public int calcSum() throws TException {
            send_calcSum();
            return recv_calcSum();
        }

        public void send_calcSum() throws TException {
            calcSum_args args = new calcSum_args();
            sendBase("calcSum", args);
        }

        public int recv_calcSum() throws TException {
            calcSum_result result = new calcSum_result();
            receiveBase(result, "calcSum");
            if (result.isSetSuccess()) {
                return result.success;
            }
            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "calcSum failed: unknown result");
        }

    }

    public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
        public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
            private org.apache.thrift.async.TAsyncClientManager clientManager;
            private org.apache.thrift.protocol.TProtocolFactory protocolFactory;

            public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
                this.clientManager = clientManager;
                this.protocolFactory = protocolFactory;
            }

            public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
                return new AsyncClient(protocolFactory, clientManager, transport);
            }
        }

        public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
            super(protocolFactory, clientManager, transport);
        }

        public void calcSum(AsyncMethodCallback resultHandler) throws TException {
            checkReady();
            calcSum_call method_call = new calcSum_call(resultHandler, this, ___protocolFactory, ___transport);
            this.___currentMethod = method_call;
            ___manager.call(method_call);
        }

        public static class calcSum_call extends org.apache.thrift.async.TAsyncMethodCall {
            public calcSum_call(AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws TException {
                super(client, protocolFactory, transport, resultHandler, false);
            }

            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws TException {
                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("calcSum", org.apache.thrift.protocol.TMessageType.CALL, 0));
                calcSum_args args = new calcSum_args();
                args.write(prot);
                prot.writeMessageEnd();
            }

            public int getResult() throws TException {
                if (getState() != State.RESPONSE_READ) {
                    throw new IllegalStateException("Method call not finished!");
                }
                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
                return (new Client(prot)).recv_calcSum();
            }
        }

    }

    public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
        private static final Logger LOGGER = LoggerFactory.getLogger(Processor.class.getName());

        public Processor(I iface) {
            super(iface, getProcessMap(new HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
        }

        protected Processor(I iface, Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
            super(iface, getProcessMap(processMap));
        }

        private static <I extends Iface> Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
            processMap.put("calcSum", new calcSum());
            return processMap;
        }

        public static class calcSum<I extends Iface> extends org.apache.thrift.ProcessFunction<I, calcSum_args> {
            public calcSum() {
                super("calcSum");
            }

            public calcSum_args getEmptyArgsInstance() {
                return new calcSum_args();
            }

            protected boolean isOneway() {
                return false;
            }

            public calcSum_result getResult(I iface, calcSum_args args) throws TException {
                calcSum_result result = new calcSum_result();
                result.success = iface.calcSum();
                result.setSuccessIsSet(true);
                return result;
            }
        }

    }

    public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
        private static final Logger LOGGER = LoggerFactory.getLogger(AsyncProcessor.class.getName());

        public AsyncProcessor(I iface) {
            super(iface, getProcessMap(new HashMap<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
        }

        protected AsyncProcessor(I iface, Map<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>> processMap) {
            super(iface, getProcessMap(processMap));
        }

        private static <I extends AsyncIface> Map<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>> getProcessMap(Map<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>> processMap) {
            processMap.put("calcSum", new calcSum());
            return processMap;
        }

        public static class calcSum<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, calcSum_args, Integer> {
            public calcSum() {
                super("calcSum");
            }

            public calcSum_args getEmptyArgsInstance() {
                return new calcSum_args();
            }

            public AsyncMethodCallback<Integer> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
                final org.apache.thrift.AsyncProcessFunction fcall = this;
                return new AsyncMethodCallback<Integer>() {
                    public void onComplete(Integer o) {
                        calcSum_result result = new calcSum_result();
                        result.success = o;
                        result.setSuccessIsSet(true);
                        try {
                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY, seqid);
                            return;
                        } catch (Exception e) {
                            LOGGER.error("Exception writing to internal frame buffer", e);
                        }
                        fb.close();
                    }

                    public void onError(Exception e) {
                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
                        org.apache.thrift.TBase msg;
                        calcSum_result result = new calcSum_result();
                        {
                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
                            msg = (org.apache.thrift.TBase) new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
                        }
                        try {
                            fcall.sendResponse(fb, msg, msgType, seqid);
                            return;
                        } catch (Exception ex) {
                            LOGGER.error("Exception writing to internal frame buffer", ex);
                        }
                        fb.close();
                    }
                };
            }

            protected boolean isOneway() {
                return false;
            }

            public void start(I iface, calcSum_args args, AsyncMethodCallback<Integer> resultHandler) throws TException {
                iface.calcSum(resultHandler);
            }
        }

    }

    public static class calcSum_args implements org.apache.thrift.TBase<calcSum_args, calcSum_args._Fields>, java.io.Serializable, Cloneable, Comparable<calcSum_args> {
        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("calcSum_args");


        private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();

        static {
            schemes.put(StandardScheme.class, new calcSum_argsStandardSchemeFactory());
            schemes.put(TupleScheme.class, new calcSum_argsTupleSchemeFactory());
        }


        /**
         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
         */
        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
            ;

            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();

            static {
                for (_Fields field : EnumSet.allOf(_Fields.class)) {
                    byName.put(field.getFieldName(), field);
                }
            }

            /**
             * Find the _Fields constant that matches fieldId, or null if its not found.
             */
            public static _Fields findByThriftId(int fieldId) {
                switch (fieldId) {
                    default:
                        return null;
                }
            }

            /**
             * Find the _Fields constant that matches fieldId, throwing an exception
             * if it is not found.
             */
            public static _Fields findByThriftIdOrThrow(int fieldId) {
                _Fields fields = findByThriftId(fieldId);
                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                return fields;
            }

            /**
             * Find the _Fields constant that matches name, or null if its not found.
             */
            public static _Fields findByName(String name) {
                return byName.get(name);
            }

            private final short  _thriftId;
            private final String _fieldName;

            _Fields(short thriftId, String fieldName) {
                _thriftId = thriftId;
                _fieldName = fieldName;
            }

            public short getThriftFieldId() {
                return _thriftId;
            }

            public String getFieldName() {
                return _fieldName;
            }
        }

        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;

        static {
            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
            metaDataMap = Collections.unmodifiableMap(tmpMap);
            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(calcSum_args.class, metaDataMap);
        }

        public calcSum_args() {
        }

        /**
         * Performs a deep copy on <i>other</i>.
         */
        public calcSum_args(calcSum_args other) {
        }

        public calcSum_args deepCopy() {
            return new calcSum_args(this);
        }

        @Override
        public void clear() {
        }

        public void setFieldValue(_Fields field, Object value) {
            switch (field) {
            }
        }

        public Object getFieldValue(_Fields field) {
            switch (field) {
            }
            throw new IllegalStateException();
        }

        /**
         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
         */
        public boolean isSet(_Fields field) {
            if (field == null) {
                throw new IllegalArgumentException();
            }

            switch (field) {
            }
            throw new IllegalStateException();
        }

        @Override
        public boolean equals(Object that) {
            if (that == null)
                return false;
            if (that instanceof calcSum_args)
                return this.equals((calcSum_args) that);
            return false;
        }

        public boolean equals(calcSum_args that) {
            if (that == null)
                return false;

            return true;
        }

        @Override
        public int hashCode() {
            List<Object> list = new ArrayList<Object>();

            return list.hashCode();
        }

        @Override
        public int compareTo(calcSum_args other) {
            if (!getClass().equals(other.getClass())) {
                return getClass().getName().compareTo(other.getClass().getName());
            }

            int lastComparison = 0;

            return 0;
        }

        public _Fields fieldForId(int fieldId) {
            return _Fields.findByThriftId(fieldId);
        }

        public void read(org.apache.thrift.protocol.TProtocol iprot) throws TException {
            schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
        }

        public void write(org.apache.thrift.protocol.TProtocol oprot) throws TException {
            schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder("calcSum_args(");
            boolean first = true;

            sb.append(")");
            return sb.toString();
        }

        public void validate() throws TException {
            // check for required fields
            // check for sub-struct validity
        }

        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
            try {
                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
            } catch (TException te) {
                throw new java.io.IOException(te);
            }
        }

        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
            try {
                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
            } catch (TException te) {
                throw new java.io.IOException(te);
            }
        }

        private static class calcSum_argsStandardSchemeFactory implements SchemeFactory {
            public calcSum_argsStandardScheme getScheme() {
                return new calcSum_argsStandardScheme();
            }
        }

        private static class calcSum_argsStandardScheme extends StandardScheme<calcSum_args> {

            public void read(org.apache.thrift.protocol.TProtocol iprot, calcSum_args struct) throws TException {
                org.apache.thrift.protocol.TField schemeField;
                iprot.readStructBegin();
                while (true) {
                    schemeField = iprot.readFieldBegin();
                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
                        break;
                    }
                    switch (schemeField.id) {
                        default:
                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
                    }
                    iprot.readFieldEnd();
                }
                iprot.readStructEnd();

                // check for required fields of primitive type, which can't be checked in the validate method
                struct.validate();
            }

            public void write(org.apache.thrift.protocol.TProtocol oprot, calcSum_args struct) throws TException {
                struct.validate();

                oprot.writeStructBegin(STRUCT_DESC);
                oprot.writeFieldStop();
                oprot.writeStructEnd();
            }

        }

        private static class calcSum_argsTupleSchemeFactory implements SchemeFactory {
            public calcSum_argsTupleScheme getScheme() {
                return new calcSum_argsTupleScheme();
            }
        }

        private static class calcSum_argsTupleScheme extends TupleScheme<calcSum_args> {

            @Override
            public void write(org.apache.thrift.protocol.TProtocol prot, calcSum_args struct) throws TException {
                TTupleProtocol oprot = (TTupleProtocol) prot;
            }

            @Override
            public void read(org.apache.thrift.protocol.TProtocol prot, calcSum_args struct) throws TException {
                TTupleProtocol iprot = (TTupleProtocol) prot;
            }
        }

    }

    public static class calcSum_result implements org.apache.thrift.TBase<calcSum_result, calcSum_result._Fields>, java.io.Serializable, Cloneable, Comparable<calcSum_result> {
        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("calcSum_result");

        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I32, (short) 0);

        private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();

        static {
            schemes.put(StandardScheme.class, new calcSum_resultStandardSchemeFactory());
            schemes.put(TupleScheme.class, new calcSum_resultTupleSchemeFactory());
        }

        public int success; // required

        /**
         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
         */
        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
            SUCCESS((short) 0, "success");

            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();

            static {
                for (_Fields field : EnumSet.allOf(_Fields.class)) {
                    byName.put(field.getFieldName(), field);
                }
            }

            /**
             * Find the _Fields constant that matches fieldId, or null if its not found.
             */
            public static _Fields findByThriftId(int fieldId) {
                switch (fieldId) {
                    case 0: // SUCCESS
                        return SUCCESS;
                    default:
                        return null;
                }
            }

            /**
             * Find the _Fields constant that matches fieldId, throwing an exception
             * if it is not found.
             */
            public static _Fields findByThriftIdOrThrow(int fieldId) {
                _Fields fields = findByThriftId(fieldId);
                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                return fields;
            }

            /**
             * Find the _Fields constant that matches name, or null if its not found.
             */
            public static _Fields findByName(String name) {
                return byName.get(name);
            }

            private final short  _thriftId;
            private final String _fieldName;

            _Fields(short thriftId, String fieldName) {
                _thriftId = thriftId;
                _fieldName = fieldName;
            }

            public short getThriftFieldId() {
                return _thriftId;
            }

            public String getFieldName() {
                return _fieldName;
            }
        }

        // isset id assignments
        private static final int  __SUCCESS_ISSET_ID = 0;
        private              byte __isset_bitfield   = 0;
        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;

        static {
            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
            metaDataMap = Collections.unmodifiableMap(tmpMap);
            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(calcSum_result.class, metaDataMap);
        }

        public calcSum_result() {
        }

        public calcSum_result(
            int success) {
            this();
            this.success = success;
            setSuccessIsSet(true);
        }

        /**
         * Performs a deep copy on <i>other</i>.
         */
        public calcSum_result(calcSum_result other) {
            __isset_bitfield = other.__isset_bitfield;
            this.success = other.success;
        }

        public calcSum_result deepCopy() {
            return new calcSum_result(this);
        }

        @Override
        public void clear() {
            setSuccessIsSet(false);
            this.success = 0;
        }

        public int getSuccess() {
            return this.success;
        }

        public calcSum_result setSuccess(int success) {
            this.success = success;
            setSuccessIsSet(true);
            return this;
        }

        public void unsetSuccess() {
            __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
        }

        /**
         * Returns true if field success is set (has been assigned a value) and false otherwise
         */
        public boolean isSetSuccess() {
            return EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
        }

        public void setSuccessIsSet(boolean value) {
            __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
        }

        public void setFieldValue(_Fields field, Object value) {
            switch (field) {
                case SUCCESS:
                    if (value == null) {
                        unsetSuccess();
                    } else {
                        setSuccess((Integer) value);
                    }
                    break;

            }
        }

        public Object getFieldValue(_Fields field) {
            switch (field) {
                case SUCCESS:
                    return Integer.valueOf(getSuccess());

            }
            throw new IllegalStateException();
        }

        /**
         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
         */
        public boolean isSet(_Fields field) {
            if (field == null) {
                throw new IllegalArgumentException();
            }

            switch (field) {
                case SUCCESS:
                    return isSetSuccess();
            }
            throw new IllegalStateException();
        }

        @Override
        public boolean equals(Object that) {
            if (that == null)
                return false;
            if (that instanceof calcSum_result)
                return this.equals((calcSum_result) that);
            return false;
        }

        public boolean equals(calcSum_result that) {
            if (that == null)
                return false;

            boolean this_present_success = true;
            boolean that_present_success = true;
            if (this_present_success || that_present_success) {
                if (!(this_present_success && that_present_success))
                    return false;
                if (this.success != that.success)
                    return false;
            }

            return true;
        }

        @Override
        public int hashCode() {
            List<Object> list = new ArrayList<Object>();

            boolean present_success = true;
            list.add(present_success);
            if (present_success)
                list.add(success);

            return list.hashCode();
        }

        @Override
        public int compareTo(calcSum_result other) {
            if (!getClass().equals(other.getClass())) {
                return getClass().getName().compareTo(other.getClass().getName());
            }

            int lastComparison = 0;

            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
            if (lastComparison != 0) {
                return lastComparison;
            }
            if (isSetSuccess()) {
                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                if (lastComparison != 0) {
                    return lastComparison;
                }
            }
            return 0;
        }

        public _Fields fieldForId(int fieldId) {
            return _Fields.findByThriftId(fieldId);
        }

        public void read(org.apache.thrift.protocol.TProtocol iprot) throws TException {
            schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
        }

        public void write(org.apache.thrift.protocol.TProtocol oprot) throws TException {
            schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder("calcSum_result(");
            boolean first = true;

            sb.append("success:");
            sb.append(this.success);
            first = false;
            sb.append(")");
            return sb.toString();
        }

        public void validate() throws TException {
            // check for required fields
            // check for sub-struct validity
        }

        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
            try {
                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
            } catch (TException te) {
                throw new java.io.IOException(te);
            }
        }

        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
            try {
                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
                __isset_bitfield = 0;
                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
            } catch (TException te) {
                throw new java.io.IOException(te);
            }
        }

        private static class calcSum_resultStandardSchemeFactory implements SchemeFactory {
            public calcSum_resultStandardScheme getScheme() {
                return new calcSum_resultStandardScheme();
            }
        }

        private static class calcSum_resultStandardScheme extends StandardScheme<calcSum_result> {

            public void read(org.apache.thrift.protocol.TProtocol iprot, calcSum_result struct) throws TException {
                org.apache.thrift.protocol.TField schemeField;
                iprot.readStructBegin();
                while (true) {
                    schemeField = iprot.readFieldBegin();
                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
                        break;
                    }
                    switch (schemeField.id) {
                        case 0: // SUCCESS
                            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                                struct.success = iprot.readI32();
                                struct.setSuccessIsSet(true);
                            } else {
                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
                            }
                            break;
                        default:
                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
                    }
                    iprot.readFieldEnd();
                }
                iprot.readStructEnd();

                // check for required fields of primitive type, which can't be checked in the validate method
                struct.validate();
            }

            public void write(org.apache.thrift.protocol.TProtocol oprot, calcSum_result struct) throws TException {
                struct.validate();

                oprot.writeStructBegin(STRUCT_DESC);
                if (struct.isSetSuccess()) {
                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
                    oprot.writeI32(struct.success);
                    oprot.writeFieldEnd();
                }
                oprot.writeFieldStop();
                oprot.writeStructEnd();
            }

        }

        private static class calcSum_resultTupleSchemeFactory implements SchemeFactory {
            public calcSum_resultTupleScheme getScheme() {
                return new calcSum_resultTupleScheme();
            }
        }

        private static class calcSum_resultTupleScheme extends TupleScheme<calcSum_result> {

            @Override
            public void write(org.apache.thrift.protocol.TProtocol prot, calcSum_result struct) throws TException {
                TTupleProtocol oprot = (TTupleProtocol) prot;
                BitSet optionals = new BitSet();
                if (struct.isSetSuccess()) {
                    optionals.set(0);
                }
                oprot.writeBitSet(optionals, 1);
                if (struct.isSetSuccess()) {
                    oprot.writeI32(struct.success);
                }
            }

            @Override
            public void read(org.apache.thrift.protocol.TProtocol prot, calcSum_result struct) throws TException {
                TTupleProtocol iprot = (TTupleProtocol) prot;
                BitSet incoming = iprot.readBitSet(1);
                if (incoming.get(0)) {
                    struct.success = iprot.readI32();
                    struct.setSuccessIsSet(true);
                }
            }
        }

    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ConsumeTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.*;
import com.messagebus.client.IMessageReceiveListener;
import com.messagebus.client.Messagebus;
import com.messagebus.client.MessagebusSinglePool;
import com.messagebus.client.MessagebusUnOpenException;
import com.messagebus.client.message.model.Message;
import com.messagebus.common.TestVariableInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.concurrent.TimeUnit;

public class ConsumeTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(ConsumeTestCase.class);

    private static class BasicConsume implements Runnable, ILifeCycle, IFetcher {

        private MessagebusSinglePool singlePool;
        private Messagebus           client;
        private long counter = 0;
        private Thread currentThread;

        private BasicConsume() {
            singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST, TestVariableInfo.PUBSUBER_PORT);
            client = singlePool.getResource();
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public long fetch() {
            return this.counter;
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.currentThread.interrupt();
        }

        @Override
        public void run() {
            try {
                client.consume(TestConfigConstant.CONSUMER_SECRET,
                               Integer.MAX_VALUE, TimeUnit.SECONDS, new IMessageReceiveListener() {
                        @Override
                        public void onMessage(Message message) {
                            ++counter;
                        }
                    });
            } catch (MessagebusUnOpenException e) {
                e.printStackTrace();
            } finally {
                singlePool.returnResource(client);
                singlePool.destroy();
            }
        }
    }

    public static void main(String[] args) {
//        produce some message for consuming
        TestUtility.produce(500000);

        try {
            TimeUnit.SECONDS.sleep(30);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        ConsumeTestCase testCase = new ConsumeTestCase();

        Runnable task = new BasicConsume();
        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS, TestConfigConstant.FETCH_NUM,
                      "single_thread_consume_async_" + TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_KB");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/MessagebusJSONRpcTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.Benchmark;
import com.messagebus.benchmark.client.IFetcher;
import com.messagebus.benchmark.client.ILifeCycle;
import com.messagebus.benchmark.client.TestConfigConstant;
import com.messagebus.client.Messagebus;
import com.messagebus.client.MessagebusSinglePool;
import com.messagebus.client.MessagebusUnOpenException;
import com.messagebus.client.extension.thrift.TAMQPClientTransport;
import com.messagebus.common.ExceptionHelper;
import com.messagebus.common.TestVariableInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TJSONProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TTransport;

/**
 * Created by yanghua on 4/17/15.
 */
public class MessagebusJSONRpcTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(MessagebusJSONRpcTestCase.class);

    public static class OriginalJSONRpc implements Runnable, ILifeCycle, IFetcher {

        private MessagebusSinglePool singlePool;
        private Messagebus           client;
        private boolean flag    = true;
        private long    counter = 0;
        private Thread currentThread;

        String secret      = "kliwhiduhaiucvarkjajksdbfkjabw";
        String targetQueue = "emapDemoRpcResponse";
        String token       = "klasehnfkljashdnflhkjahwlekdjf";
        String methodName  = "calcSum";

        public OriginalJSONRpc() {
            singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST, TestVariableInfo.PUBSUBER_PORT);
            client = singlePool.getResource();
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public void run() {
            try {
                while (flag) {
                    Object responseObj = client.call(secret, targetQueue, methodName, new Object[0], token, 10000);
                    if (Integer.parseInt(responseObj.toString()) == 5050) ++counter;
                }
            } catch (MessagebusUnOpenException e) {
                ExceptionHelper.logException(logger, e, "[JSONRpc#run]");
            } finally {
                singlePool.returnResource(client);
                singlePool.destroy();
            }
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public long fetch() {
            return this.counter;
        }
    }

    public static class ThriftJSONRpc implements Runnable, ILifeCycle, IFetcher {

        private MessagebusSinglePool singlePool;
        private Messagebus           client;
        private Thread               currentThread;
        private TTransport           transport;
        private boolean flag    = true;
        private long    counter = 0;

        String secret      = "kliwhiduhaiucvarkjajksdbfkjabw";
        String targetQueue = "emapDemoRpcResponse";
        String token       = "klasehnfkljashdnflhkjahwlekdjf";
        String methodName  = "calcSum";

        public ThriftJSONRpc() {
            singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST, TestVariableInfo.PUBSUBER_PORT);
            client = singlePool.getResource();
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public long fetch() {
            return this.counter;
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public void run() {
            //client code
            transport = new TAMQPClientTransport(this.client,
                                                 "kliwhiduhaiucvarkjajksdbfkjabw",
                                                 "emapDemoRpcResponse",
                                                 "klasehnfkljashdnflhkjahwlekdjf",
                                                 10000);
            int result = 0;
            try {
                transport.open();
                TProtocol protocol = new TJSONProtocol(transport);
                CalcService.Client client = new CalcService.Client(protocol);
                while (flag) {
                    result = client.calcSum();
                    if (result == 5050) ++counter;
                }
            } catch (TException e) {
                e.printStackTrace();
            } finally {
                transport.close();
                singlePool.returnResource(client);
                singlePool.destroy();
            }
        }
    }

    public static void main(String[] args) {
//        MessagebusJSONRpcTestCase testCase = new MessagebusJSONRpcTestCase();
//        Runnable task = new OriginalJSONRpc();
//
//        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
//                      TestConfigConstant.FETCH_NUM, "messagebus_original_json_rpc_noHA");

        MessagebusJSONRpcTestCase testCase = new MessagebusJSONRpcTestCase();
        Runnable task = new ThriftJSONRpc();

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "messagebus_thrift_json_rpc_noHA");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalConsumeTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.Benchmark;
import com.messagebus.benchmark.client.IFetcher;
import com.messagebus.benchmark.client.ILifeCycle;
import com.messagebus.benchmark.client.TestConfigConstant;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageFactory;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.client.message.transfer.MessageHeaderTransfer;
import com.messagebus.common.TestVariableInfo;
import com.messagebus.interactor.proxy.ProxyConsumer;
import com.messagebus.interactor.rabbitmq.AbstractInitializer;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.QueueingConsumer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;

public class OriginalConsumeTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(OriginalConsumeTestCase.class);

    public static class BasicConsume extends AbstractInitializer implements Runnable, ILifeCycle, IFetcher {

        private static final String  consumerTag   = "tag.consumer.msgLog";
        private              boolean flag          = true;
        private              long    counter       = 0;
        private              String  realQueueName = "";
        private Thread currentThread;

        public BasicConsume(String host) {
            super(host);
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public long fetch() {
            return this.counter;
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            this.flag = false;
        }

        @Override
        public void run() {
            try {
                super.init();
                QueueingConsumer consumer = ProxyConsumer.consume(this.channel,
                                                                  this.getRealQueueName(),
                                                                  consumerTag);

                while (flag) {
                    QueueingConsumer.Delivery delivery = consumer.nextDelivery();

                    AMQP.BasicProperties properties = delivery.getProperties();
                    byte[] msgBody = delivery.getBody();

                    this.channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

                    String msgTypeStr = properties.getType();
                    if (msgTypeStr == null || msgTypeStr.isEmpty()) {
                        logger.error("[run] message type is null or empty");
                    }

                    MessageType msgType = null;
                    try {
                        msgType = MessageType.lookup(msgTypeStr);
                    } catch (UnknownError unknownError) {
                        throw new RuntimeException("unknown message type : " + msgTypeStr);
                    }

                    Message msg = MessageFactory.createMessage(msgType);
                    initMessage(msg, msgType, properties, msgBody);

                    ++counter;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                try {
                    this.channel.basicCancel(consumerTag);
                    super.close();
                } catch (IOException e) {
                    logger.error("[run] occurs a IOException : " + e.getMessage());
                }
            }
        }

        private void initMessage(Message msg, MessageType msgType, AMQP.BasicProperties properties, byte[] bodyData) {
            MessageHeaderTransfer.unbox(properties, msg);
            msg.setContent(bodyData);
        }

        public String getRealQueueName() {
            return realQueueName;
        }

        public void setRealQueueName(String realQueueName) {
            this.realQueueName = realQueueName;
        }
    }

    public static void main(String[] args) {
        //produce some message for consuming
//        TestUtility.produce(50_0000);
//
//        try {
//            TimeUnit.SECONDS.sleep(30);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }

        OriginalConsumeTestCase testCase = new OriginalConsumeTestCase();
        BasicConsume task = new BasicConsume(TestVariableInfo.RABBITMQ_SERVER_HOST);
        task.setRealQueueName("queue.proxy.message.business.crm");

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS, TestConfigConstant.FETCH_NUM,
                      "single_thread_original_consume_async_" + TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_KB");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalProduceTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.*;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.client.message.transfer.MessageHeaderTransfer;
import com.messagebus.common.Constants;
import com.messagebus.common.TestVariableInfo;
import com.messagebus.interactor.proxy.ProxyProducer;
import com.messagebus.interactor.rabbitmq.AbstractInitializer;
import com.rabbitmq.client.AMQP;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;

public class OriginalProduceTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(OriginalProduceTestCase.class);

    private static class BasicProduce extends AbstractInitializer implements Runnable, ILifeCycle, IFetcher {

        private Message msg;
        private String  routingkey;
        private boolean flag    = true;
        private long    counter = 0;
        private Thread currentThread;

        private BasicProduce(String host, int msgBodySize) {
            super(host);
            msg = TestMessageFactory.create(MessageType.QueueMessage, msgBodySize);
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            this.flag = false;
        }

        @Override
        public void run() {
            try {
                this.init();
                AMQP.BasicProperties header = MessageHeaderTransfer.box(msg);
                while (flag) {
                    ProxyProducer.produce(Constants.PROXY_EXCHANGE_NAME,
                                          this.channel,
                                          this.getRoutingkey(),
                                          msg.getContent(),
                                          header);
                    ++counter;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    this.close();
                } catch (IOException e) {

                }
            }
        }

        @Override
        public long fetch() {
            return counter;
        }

        public String getRoutingkey() {
            return routingkey;
        }

        public void setRoutingkey(String routingkey) {
            this.routingkey = routingkey;
        }
    }

    public static void main(String[] args) {
        OriginalProduceTestCase testCase = new OriginalProduceTestCase();

        BasicProduce task = new BasicProduce(TestVariableInfo.RABBITMQ_SERVER_HOST, TestConfigConstant.MSG_BODY_SIZE_OF_BYTE);
        task.setRoutingkey(TestConfigConstant.ORIGINAL_PRODUCE_ROUTING_KEY);

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "one_thread_original_produce_one_by_one_" +
                TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_Byte");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalProduceWithoutTopologyTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.*;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.client.message.transfer.MessageHeaderTransfer;
import com.messagebus.common.TestVariableInfo;
import com.messagebus.interactor.proxy.ProxyProducer;
import com.messagebus.interactor.rabbitmq.AbstractInitializer;
import com.rabbitmq.client.AMQP;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;

/**
 * Created by yanghua on 3/25/15.
 */
public class OriginalProduceWithoutTopologyTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(OriginalProduceWithoutTopologyTestCase.class);

    private static class BasicProduce extends AbstractInitializer implements Runnable, ILifeCycle, IFetcher {

        private Message msg;
        private String  routingkey;
        private boolean flag    = true;
        private long    counter = 0;
        private Thread currentThread;

        private BasicProduce(String host, int msgBodySize) {
            super(host);
            msg = TestMessageFactory.create(MessageType.QueueMessage, msgBodySize);
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            this.flag = false;
        }

        @Override
        public void run() {
            try {
                this.init();
                AMQP.BasicProperties header = MessageHeaderTransfer.box(msg);
                while (flag) {
                    ProxyProducer.produce(TestConfigConstant.DEFAULT_EXCHANGE_NAME_WITHOUT_TOPOLOGY,
                                          this.channel,
                                          this.getRoutingkey(),
                                          msg.getContent(),
                                          header);
                    ++counter;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    this.close();
                } catch (IOException e) {

                }
            }
        }

        @Override
        public long fetch() {
            return counter;
        }

        public String getRoutingkey() {
            return routingkey;
        }

        public void setRoutingkey(String routingkey) {
            this.routingkey = routingkey;
        }
    }

    public static void main(String[] args) {
        OriginalProduceTestCase testCase = new OriginalProduceTestCase();

        BasicProduce task = new BasicProduce(TestVariableInfo.RABBITMQ_SERVER_HOST, TestConfigConstant.MSG_BODY_SIZE_OF_BYTE);
        task.setRoutingkey("");

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "one_thread_original_produce_without_topology_one_by_one_" +
                TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_Byte");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceRemainLogTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.*;
import com.messagebus.client.Messagebus;
import com.messagebus.client.MessagebusSinglePool;
import com.messagebus.client.MessagebusUnOpenException;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.common.ExceptionHelper;
import com.messagebus.common.TestVariableInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Created by yanghua on 3/25/15.
 */
public class ProduceRemainLogTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(ProduceRemainLogTestCase.class);

    private static class BasicProduce implements Runnable, ILifeCycle, IFetcher {

        private MessagebusSinglePool singlePool;
        private Messagebus           client;
        private Message              msg;
        private boolean flag    = true;
        private long    counter = 0;
        private Thread currentThread;

        private BasicProduce(int msgBodySize) {
            msg = TestMessageFactory.create(MessageType.QueueMessage, msgBodySize);
            singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST, TestVariableInfo.PUBSUBER_PORT);
            client = singlePool.getResource();
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public void run() {
            try {
                while (flag) {
                    client.produce(TestConfigConstant.PRODUCER_SECRET, TestConfigConstant.CONSUMER_QUEUE_NAME, msg, TestConfigConstant.PRODUCER_TOKEN);
                    ++counter;
                }
            } catch (MessagebusUnOpenException e) {
                ExceptionHelper.logException(logger, e, "[BasicProduce#run]");
            } finally {
                singlePool.returnResource(client);
                singlePool.destroy();
            }
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public long fetch() {
            return this.counter;
        }
    }

    public static void main(String[] args) {
        ProduceTestCase testCase = new ProduceTestCase();

        Runnable task = new BasicProduce(TestConfigConstant.MSG_BODY_SIZE_OF_BYTE);

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "one_thread_remain_log_produce_one_by_one_" +
                TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_Byte");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.*;
import com.messagebus.client.Messagebus;
import com.messagebus.client.MessagebusSinglePool;
import com.messagebus.client.MessagebusUnOpenException;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.common.ExceptionHelper;
import com.messagebus.common.TestVariableInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ProduceTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(ProduceTestCase.class);

    private static class BasicProduce implements Runnable, ILifeCycle, IFetcher {

        private MessagebusSinglePool singlePool;
        private Messagebus           client;
        private Message              msg;
        private boolean flag    = true;
        private long    counter = 0;
        private Thread currentThread;

        private BasicProduce(int msgBodySize) {
            msg = TestMessageFactory.create(MessageType.QueueMessage, msgBodySize);
            singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST, TestVariableInfo.PUBSUBER_PORT);
            client = singlePool.getResource();
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public void run() {
            try {
                while (flag) {
                    client.produce(TestConfigConstant.PRODUCER_SECRET, TestConfigConstant.CONSUMER_QUEUE_NAME, msg, TestConfigConstant.PRODUCER_TOKEN);
                    ++counter;
                }
            } catch (MessagebusUnOpenException e) {
                ExceptionHelper.logException(logger, e, "[BasicProduce#run]");
            } finally {
                singlePool.returnResource(client);
                singlePool.destroy();
            }
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public long fetch() {
            return this.counter;
        }
    }

    public static void main(String[] args) {
        ProduceTestCase testCase = new ProduceTestCase();

        Runnable task = new BasicProduce(TestConfigConstant.MSG_BODY_SIZE_OF_BYTE);

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "one_thread_produce_one_by_one_" +
                TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_Byte");
    }
}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceWithoutLogTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.*;
import com.messagebus.client.Messagebus;
import com.messagebus.client.MessagebusSinglePool;
import com.messagebus.client.MessagebusUnOpenException;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageType;
import com.messagebus.common.ExceptionHelper;
import com.messagebus.common.TestVariableInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Created by yanghua on 3/25/15.
 */
public class ProduceWithoutLogTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(ProduceWithoutLogTestCase.class);

    private static class BasicProduce implements Runnable, ILifeCycle, IFetcher {

        private MessagebusSinglePool singlePool;
        private Messagebus           client;
        private Message              msg;
        private boolean flag    = true;
        private long    counter = 0;
        private Thread currentThread;

        private BasicProduce(int msgBodySize) {
            msg = TestMessageFactory.create(MessageType.QueueMessage, msgBodySize);
            singlePool = new MessagebusSinglePool(TestVariableInfo.PUBSUBER_HOST, TestVariableInfo.PUBSUBER_PORT);
            client = singlePool.getResource();
            currentThread = new Thread(this);
            currentThread.setDaemon(true);
        }

        @Override
        public void run() {
            try {
                while (flag) {
                    client.produce(TestConfigConstant.PRODUCER_SECRET, TestConfigConstant.CONSUMER_QUEUE_NAME, msg, TestConfigConstant.PRODUCER_TOKEN);
                    ++counter;
                }
            } catch (MessagebusUnOpenException e) {
                ExceptionHelper.logException(logger, e, "[BasicProduce#run]");
            } finally {
                singlePool.returnResource(client);
                singlePool.destroy();
            }
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public long fetch() {
            return this.counter;
        }
    }

    public static void main(String[] args) {
        ProduceTestCase testCase = new ProduceTestCase();

        Runnable task = new BasicProduce(TestConfigConstant.MSG_BODY_SIZE_OF_BYTE);

        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "one_thread_without_log_produce_one_by_one_" +
                TestConfigConstant.MSG_BODY_SIZE_OF_BYTE + "_Byte");
    }

}


================================================
FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ThriftJSONRpcTestCase.java
================================================
package com.messagebus.benchmark.client.testCase;

import com.messagebus.benchmark.client.Benchmark;
import com.messagebus.benchmark.client.IFetcher;
import com.messagebus.benchmark.client.ILifeCycle;
import com.messagebus.benchmark.client.TestConfigConstant;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TJSONProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

/**
 * Created by yanghua on 4/17/15.
 */
public class ThriftJSONRpcTestCase extends Benchmark {

    private static final Log logger = LogFactory.getLog(ThriftJSONRpcTestCase.class);

    public static class JSONRpc implements Runnable, ILifeCycle, IFetcher {

        private Thread currentThread;
        private long    counter = 0;
        private boolean flag    = true;

        public JSONRpc() {
            this.currentThread = new Thread(this);
            this.currentThread.setDaemon(true);
        }

        @Override
        public long fetch() {
            return this.counter;
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public void run() {
            TTransport transport = new TSocket("172.16.206.29", 7911);
            int result = 0;

            try {
                transport.open();
                TProtocol protocol = new TJSONProtocol(transport);
                CalcService.Client client = new CalcService.Client(protocol);
                while (flag) {
                    result = client.calcSum();
                    if (result == 5050) ++counter;
                }
                logger.info(result);
            } catch (TException e) {
                e.printStackTrace();
            } finally {
                transport.close();
            }
        }
    }

    public static class BinaryRpc implements Runnable, ILifeCycle, IFetcher {

        private Thread currentThread;
        private long    counter = 0;
        private boolean flag    = true;

        public BinaryRpc() {
            this.currentThread = new Thread(this);
            this.currentThread.setDaemon(true);
        }

        @Override
        public long fetch() {
            return this.counter;
        }

        @Override
        public void start() {
            this.currentThread.start();
        }

        @Override
        public void terminate() {
            logger.info("closing test task ....");
            this.flag = false;
        }

        @Override
        public void run() {
            TTransport transport = new TSocket("172.16.206.29", 7911);
            int result = 0;
            try {
                transport.open();
                TProtocol protocol = new TBinaryProtocol(transport);
                CalcService.Client client = new CalcService.Client(protocol);

                while (flag) {
                    result = client.calcSum();
                    if (result == 5050) ++counter;
                }
            } catch (TException e) {
                e.printStackTrace();
            } finally {
                transport.close();
            }
        }
    }

    public static void main(String[] args) {
//        ThriftJSONRpcTestCase testCase = new ThriftJSONRpcTestCase();
//
//        Runnable task = new JSONRpc();
//        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
//                      TestConfigConstant.FETCH_NUM, "thrift_original_json_rpc");

        ThriftJSONRpcTestCase testCase = new ThriftJSONRpcTestCase();

        Runnable task = new BinaryRpc();
        testCase.test(task, TestConfigConstant.HOLD_TIME_OF_MILLIS,
                      TestConfigConstant.FETCH_NUM, "thrift_original_binary_rpc");
    }
}


================================================
FILE: benchmark/src/main/resources/clearEnv.sh
================================================
#! /bin/sh

sudo service messagebus-server stop
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl start_app
sudo service messagebus-server start

================================================
FILE: benchmark/src/main/resources/log4j.properties
================================================
# Configure logging for testing
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.encoding=utf-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] -%d{yyyy-MM-dd HH:mm:ss,SSS} method:%l - %m%n

================================================
FILE: benchmark/src/main/resources/plotscript_consume.sh
================================================
#! /usr/bin/env gnuplot
reset
set terminal png

#write you image dir path
set output "/Users/yanghua/Documents/GitHub/messagebus/screenshots/benchmark/consume/singleThreadClientVSOriginal.png"

#set logscale x
#set logscale y

set xlabel "time (ms)"
set ylabel "records num"

set title "single thread async consume performance test "

set key reverse Left outside
set grid
set autoscale

set style data linespoints

set yrange [0:500000]
set xrange [0:60000]

plot "/tmp/single_thread_consume_async_1.0_KB.data" using 1:2 title "client 1KB",\
	 "/tmp/single_thread_original_consume_async_1.0_KB.data" using 1:2 title "original 1KB",\
	 "/tmp/single_thread_consume_async_3.0_KB.data" using 1:2 title "client 3KB",\
	 "/tmp/single_thread_original_consume_async_3.0_KB.data" using 1:2 title "original 3KB",\
	 "/tmp/single_thread_consume_async_5.0_KB.data" using 1:2 title "client 5KB",\
	 "/tmp/single_thread_original_consume_async_5.0_KB.data" using 1:2 title "original 5KB";

================================================
FILE: benchmark/src/main/resources/plotscript_messagebus_client_produce.sh
================================================
#! /usr/bin/env gnuplot
reset
set terminal png size 800,600

#write you image dir path
set output "/Users/yanghua/Documents/GitHub/messagebus/screenshots/benchmark/produce/singleThreadMultipleMsgBodySizeMBClientProduce.png"

#set logscale x
#set logscale y

set xlabel "time (ms)"
set ylabel "records num"

set title "single thread messagebus-client produce performance "

set key reverse Left outside
set grid
set autoscale

set style data linespoints

set yrange [0:500000]
set xrange [0:60000]

plot "/tmp/one_thread_produce_one_by_one_500_Byte.data" using 1:2 title "messagebus 0.5KB",\
	 "/tmp/one_thread_produce_one_by_one_1000_Byte.data" using 1:2 title "messagebus 1KB",\
	 "/tmp/one_thread_produce_one_by_one_2000_Byte.data" using 1:2 title "messagebus 2KB",\
	 "/tmp/one_thread_produce_one_by_one_3000_Byte.data" using 1:2 title "messagebus 3KB";

================================================
FILE: benchmark/src/main/resources/plotscript_messagebus_client_remain_log_produce.sh
================================================
#! /usr/bin/env gnuplot
reset
set terminal png size 800,600

#write you image dir path
set output "/Users/yanghua/Documents/GitHub/messagebus/screenshots/benchmark/produce/singleThreadMultipleMsgBodySizeMBClientRemainLogProduce.png"

#set logscale x
#set logscale y

set xlabel "time (ms)"
set ylabel "records num"

set title "one thread mb-client remain log produce performance "

set key reverse Left outside
set grid
set autoscale

set style data linespoints

set yrange [0:500000]
set xrange [0:60000]

plot "/tmp/one_thread_remain_log_produce_one_by_one_500_Byte.data" using 1:2 title "messagebus 0.5KB",\
	 "/tmp/one_thread_remain_log_produce_one_by_one_1000_Byte.data" using 1:2 title "messagebus 1KB",\
	 "/tmp/one_thread_remain_log_produce_one_by_one_2000_Byte.data" using 1:2 title "messagebus 2KB",\
	 "/tmp/one_thread_remain_log_produce_one_by_one_3000_Byte.data" using 1:2 title "messagebus 3KB";

================================================
FILE: benchmark/src/main/resources/plotscript_messagebus_client_without_realtime_log_produce.sh
================================================
#! /usr/bin/env gnuplot
reset
set terminal png size 800,600

#write you image dir path
set output "/Users/yanghua/Documents/GitHub/messagebus/screenshots/benchmark/produce/singleThreadMultipleMsgBodySizeMBClientWithoutRealtimeLogProduce.png"

#set logscale x
#set logscale y

set xlabel "time (ms)"
set ylabel "records num"

set title "one thread mb-client no realtime log produce performance "

set key reverse Left outside
set grid
set autoscale

set style data linespoints

set yrange [0:500000]
set xrange [0:60000]

plot "/tmp/one_thread_without_log_produce_one_by_one_500_Byte.data" using 1:2 title "messagebus 0.5KB",\
	 "/tmp/one_thread_without_log_produce_one_by_one_1000_Byte.data" using 1:2 title "messagebus 1KB",\
	 "/tmp/one_thread_without_log_produce_one_by_one_2000_Byte.data" using 1:2 title "messagebus 2KB",\
	 "/tmp/one_thread_without_log_produce_one_by_one_3000_Byte.data" using 1:2 title "messagebus 3KB";

================================================
FILE: benchmark/src/main/resources/plotscript_official_client_produce.sh
================================================
#! /usr/bin/env gnuplot
reset
set terminal png size 800,600

#write you image dir path
set output "/Users/yanghua/Documents/GitHub/messagebus/screenshots/benchmark/produce/singleThreadMultipleMsgBodySizeOfficialClientProduce.png"

#set logscale x
#set logscale y

set xlabel "time (ms)"
set ylabel "records num"

set title "single thread official-client produce performance  "

set key reverse Left outside
set grid
set autoscale

set style data linespoints

set yrange [0:500000]
set xrange [0:60000]

plot "/tmp/one_thread_original_produce_one_by_one_500_Byte.data" using 1:2 title "official 0.5KB",\
	 "/tmp/one_thread_original_produce_one_by_one_1000_Byte.data" using 1:2 title "official 1KB",\
	 "/tmp/one_thread_original_produce_one_by_one_2000_Byte.data" using 1:2 title "official 2KB",\
	 "/tmp/one_thread_original_produce_one_by_one_3000_Byte.data" using 1:2 title "official 3KB";

================================================
FILE: benchmark/src/main/resources/plotscript_official_client_without_topology_produce.sh
================================================
#! /usr/bin/env gnuplot
reset
set terminal png size 800,600

#write you image dir path
set output "/Users/yanghua/Documents/GitHub/messagebus/screenshots/benchmark/produce/singleThreadMultipleMsgBodySizeOfficialClientWithoutTopologyProduce.png"

#set logscale x
#set logscale y

set xlabel "time (ms)"
set ylabel "records num"

set title "single thread official-client without topology produce performance  "

set key reverse Left outside
set grid
set autoscale

set style data linespoints

set yrange [0:500000]
set xrange [0:60000]

plot "/tmp/one_thread_original_produce_without_topology_one_by_one_500_Byte.data" using 1:2 title "official 0.5KB",\
	 "/tmp/one_thread_original_produce_without_topology_one_by_one_1000_Byte.data" using 1:2 title "official 1KB",\
	 "/tmp/one_thread_original_produce_without_topology_one_by_one_2000_Byte.data" using 1:2 title "official 2KB",\
	 "/tmp/one_thread_original_produce_without_topology_one_by_one_3000_Byte.data" using 1:2 title "official 3KB";

================================================
FILE: client/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>messagebus</artifactId>
        <groupId>com.messagebus</groupId>
        <version>1.0.5</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>client</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.messagebus</groupId>
            <artifactId>common</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>com.messagebus</groupId>
            <artifactId>interactor-component</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- apache common pool -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.2</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <!-- thrift -->
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.9.2</version>
        </dependency>

        <!--<dependency>-->
        <!--<groupId>org.slf4j</groupId>-->
        <!--<artifactId>slf4j-api</artifactId>-->
        <!--<version>1.7.12</version>-->
        <!--</dependency>-->

    </dependencies>

    <build>
        <finalName>messagebus-client</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <index>true</index>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-5</version>
                <configuration>
                    <archive>
                        <manifest>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <distributionManagement>
        <repository>
            <id>release</id>
            <name>release@172.16.1.104</name>
            <url>http://172.16.1.104:8081/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>

</project>

================================================
FILE: client/src/main/java/com/messagebus/client/AbstractPool.java
================================================
package com.messagebus.client;

import com.messagebus.common.ExceptionHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

/**
 * the abstract pool
 *
 * @param <T> the Object that the pool want to cache
 */
abstract class AbstractPool<T> {

    private static final Log logger = LogFactory.getLog(AbstractPool.class);

    protected GenericObjectPool<T> internalPool;

    public AbstractPool(final GenericObjectPoolConfig poolConfig,
                        PooledObjectFactory<T> factory) {
        this.initPool(poolConfig, factory);
    }

    private void initPool(final GenericObjectPoolConfig poolConfig,
                          PooledObjectFactory<T> factory) {
        if (this.internalPool != null) {
            closeInternalPool();
        }

        this.internalPool = new GenericObjectPool<T>(factory, poolConfig);
    }

    public T getResource() {
        try {
            return internalPool.borrowObject();
        } catch (Exception e) {
            ExceptionHelper.logException(logger, e, "[getResource]");
            throw new RuntimeException("can not get a resource from the pool ", e);
        }
    }

    public void returnResourceObject(final T resource) {
        internalPool.returnObject(resource);
    }

    public void returnBrokenResource(final T resource) {
        returnBrokenResourceObject(resource);
    }

    public void returnResource(final T resource) {
        returnResourceObject(resource);
    }

    public void destroy() {
        closeInternalPool();
    }

    protected void returnBrokenResourceObject(final T resource) {
        try {
            internalPool.invalidateObject(resource);
        } catch (Exception e) {
            throw new RuntimeException("Could not return the resource to the pool", e);
        }
    }

    protected void closeInternalPool() {
        internalPool.close();
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/Address.java
================================================
package com.messagebus.client;

import java.io.Serializable;

/**
 * Created by yanghua on 2/12/2015.
 */
public class Address implements Serializable {

    private String host;
    private int    port;

    public Address() {
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/ConfigManager.java
================================================
package com.messagebus.client;

import com.google.common.base.Strings;
import com.google.common.eventbus.EventBus;
import com.google.gson.Gson;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;

import java.util.HashMap;
import java.util.Map;

/**
 * the config manager
 */
public class ConfigManager {

    private static final Log    logger            = LogFactory.getLog(ConfigManager.class);
    private static final Gson   GSON              = new Gson();
    private static final String SOURCE_EVENT_TYPE = "source";
    private static final String SINK_EVENT_TYPE   = "sink";
    private static final String STREAM_EVENT_TYPE = "stream";

    private static final String REVERSE_MESSAGE_ZK_PATH               = "/reverse/message";
    private static final String REVERSE_MESSAGE_SOURCE_ZK_PATH        = REVERSE_MESSAGE_ZK_PATH + "/source";
    private static final String REVERSE_MESSAGE_SINK_ZK_PATH          = REVERSE_MESSAGE_ZK_PATH + "/sink";
    private static final String REVERSE_MESSAGE_STREAM_ZK_PATH        = REVERSE_MESSAGE_ZK_PATH + "/stream";
    private static final String REVERSE_MESSAGE_SOURCE_SECRET_ZK_PATH = REVERSE_MESSAGE_SOURCE_ZK_PATH + "/secret";
    private static final String REVERSE_MESSAGE_SOURCE_NAME_ZK_PATH   = REVERSE_MESSAGE_SOURCE_ZK_PATH + "/name";
    private static final String REVERSE_MESSAGE_SINK_SECRET_ZK_PATH   = REVERSE_MESSAGE_SINK_ZK_PATH + "/secret";
    private static final String REVERSE_MESSAGE_SINK_NAME_ZK_PATH     = REVERSE_MESSAGE_SINK_ZK_PATH + "/name";
    private static final String REVERSE_MESSAGE_STREAM_TOKEN_ZK_PATH  = REVERSE_MESSAGE_STREAM_ZK_PATH + "/token";

    private Map<String, Source> secretSourceMap = new HashMap<String, Source>();
    private Map<String, Source> nameSourceMap   = new HashMap<String, Source>();
    private Map<String, Sink>   secretSinkMap   = new HashMap<String, Sink>();
    private Map<String, Sink>   nameSinkMap     = new HashMap<String, Sink>();
    private Map<String, Stream> streamMap       = new HashMap<String, Stream>();

    private CuratorFramework openedZookeeper;
    private EventBus         componentEventBus;

    public ConfigManager(CuratorFramework zookeeper) {
        this.openedZookeeper = zookeeper;

        //source -> secret
        PathChildrenCache sourceSecretCache = new PathChildrenCache(zookeeper,
                REVERSE_MESSAGE_SOURCE_SECRET_ZK_PATH, false);
        sourceSecretCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework curatorFramework,
                                   PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                onPathChildrenChanged(REVERSE_MESSAGE_SOURCE_SECRET_ZK_PATH);
            }
        });

        //source -> name
        PathChildrenCache souceNameCache = new PathChildrenCache(zookeeper,
                REVERSE_MESSAGE_SOURCE_NAME_ZK_PATH, false);
        souceNameCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework curatorFramework,
                                   PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                onPathChildrenChanged(REVERSE_MESSAGE_SOURCE_NAME_ZK_PATH);
            }
        });

        //sink -> secret
        PathChildrenCache sinkSecretCache = new PathChildrenCache(zookeeper,
                REVERSE_MESSAGE_SINK_SECRET_ZK_PATH, false);
        sinkSecretCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework curatorFramework,
                                   PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                onPathChildrenChanged(REVERSE_MESSAGE_SINK_SECRET_ZK_PATH);
            }
        });

        //sink -> name
        PathChildrenCache sinkNameCache = new PathChildrenCache(zookeeper,
                REVERSE_MESSAGE_SINK_NAME_ZK_PATH, false);
        sinkNameCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                onPathChildrenChanged(REVERSE_MESSAGE_SINK_NAME_ZK_PATH);
            }
        });

        //stream -> token
        PathChildrenCache streamTokenCache = new PathChildrenCache(zookeeper,
                REVERSE_MESSAGE_STREAM_TOKEN_ZK_PATH, false);
        streamTokenCache.getListenable().addListener(new PathChildrenCacheListener() {
            public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {
                onPathChildrenChanged(REVERSE_MESSAGE_STREAM_TOKEN_ZK_PATH);
            }
        });
    }

    public EventBus getComponentEventBus() {
        return componentEventBus;
    }

    public void setComponentEventBus(EventBus componentEventBus) {
        this.componentEventBus = componentEventBus;
    }

    public Source getSourceBySecret(String secret) {
        if (Strings.isNullOrEmpty(secret)) {
            throw new NullPointerException("the secret can not be null or empty");
        }

        if (this.secretSourceMap.containsKey(secret)) {     //local cache
            return this.secretSourceMap.get(secret);
        } else {                                            //remote data then save to local cache
            String sourceStr = getDataFromZK(REVERSE_MESSAGE_SOURCE_SECRET_ZK_PATH + "/" + secret);
            Source source    = GSON.fromJson(sourceStr, Source.class);
            this.secretSourceMap.put(secret, source);
            return source;
        }
    }

    public Source getSourceByName(String name) {
        if (Strings.isNullOrEmpty(name)) {
            throw new NullPointerException("the name can not be null or empty");
        }

        if (this.nameSourceMap.containsKey(name)) {         //local cache
            return this.nameSourceMap.get(name);
        } else {                                            //remote data then save to local cache
            String sourceJson = getDataFromZK(REVERSE_MESSAGE_SOURCE_NAME_ZK_PATH + "/" + name);
            Source source     = GSON.fromJson(sourceJson, Source.class);
            this.nameSourceMap.put(name, source);
            return source;
        }
    }

    public Sink getSinkBySecret(String secret) {
        if (Strings.isNullOrEmpty(secret)) {
            throw new NullPointerException("the secret can not be null or empty");
        }

        if (this.secretSinkMap.containsKey(secret)) {       //local cache
            return this.secretSinkMap.get(secret);
        } else {                                            //remote data then save to local cache
            String sinkJson = getDataFromZK(REVERSE_MESSAGE_SINK_SECRET_ZK_PATH + "/" + secret);
            Sink   sink     = GSON.fromJson(sinkJson, Sink.class);
            this.secretSinkMap.put(secret, sink);
            return sink;
        }
    }

    public Sink getSinkByName(String name) {
        if (Strings.isNullOrEmpty(name)) {
            throw new NullPointerException("the name can not be null or empty");
        }

        if (this.nameSinkMap.containsKey(name)) {           //local cache
            return this.nameSinkMap.get(name);
        } else {                                            //remote data then save to local cache
            String sinkJson = getDataFromZK(REVERSE_MESSAGE_SINK_NAME_ZK_PATH + "/" + name);
            Sink   sink     = GSON.fromJson(sinkJson, Sink.class);
            this.nameSinkMap.put(name, sink);
            return sink;
        }
    }

    public Stream getStreamByToken(String token) {
        if (Strings.isNullOrEmpty(token)) {
            throw new NullPointerException("the token can not be null or empty");
        }

        if (this.streamMap.containsKey(token)) {            //local cache
            return this.streamMap.get(token);
        } else {                                            //remote data then save to local cache
            String streamJson = getDataFromZK(REVERSE_MESSAGE_STREAM_ZK_PATH + "/" + token);
            Stream stream     = GSON.fromJson(streamJson, Stream.class);
            this.streamMap.put(token, stream);
            return stream;
        }
    }

    private void refreshSourceCache(boolean bySecret) {
        if (bySecret) {
            for (String secret : this.secretSourceMap.keySet()) {
                String sourceStr = getDataFromZK(REVERSE_MESSAGE_SOURCE_SECRET_ZK_PATH + "/" + secret);
                Source source    = GSON.fromJson(sourceStr, Source.class);
                this.secretSourceMap.put(secret, source);
            }
        } else {
            for (String name : this.nameSourceMap.keySet()) {
                String sourceJson = getDataFromZK(REVERSE_MESSAGE_SOURCE_NAME_ZK_PATH + "/" + name);
                Source source     = GSON.fromJson(sourceJson, Source.class);
                this.nameSourceMap.put(name, source);
            }
        }
    }

    private void refreshSinkCache(boolean bySecret) {
        if (bySecret) {
            for (String secret : this.secretSinkMap.keySet()) {
                String sinkJson = getDataFromZK(REVERSE_MESSAGE_SINK_SECRET_ZK_PATH + "/" + secret);
                Sink   sink     = GSON.fromJson(sinkJson, Sink.class);
                this.secretSinkMap.put(secret, sink);
            }
        } else {
            for (String name : this.nameSinkMap.keySet()) {
                String sinkJson = getDataFromZK(REVERSE_MESSAGE_SINK_NAME_ZK_PATH + "/" + name);
                Sink   sink     = GSON.fromJson(sinkJson, Sink.class);
                this.nameSinkMap.put(name, sink);
            }
        }
    }

    private void refreshStreamCache() {
        for (String token : this.streamMap.keySet()) {
            String streamJson = getDataFromZK(REVERSE_MESSAGE_STREAM_ZK_PATH + "/" + token);
            Stream stream     = GSON.fromJson(streamJson, Stream.class);
            this.streamMap.put(token, stream);
        }
    }

    public static class Source {

        private String secret;
        private String name;
        private String type;
        private String appId;
        private String broadcastable;
        private String routingKey;

        public Source() {
        }

        public String getSecret() {
            return secret;
        }

        public void setSecret(String secret) {
            this.secret = secret;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getAppId() {
            return appId;
        }

        public void setAppId(String appId) {
            this.appId = appId;
        }

        public String getBroadcastable() {
            return broadcastable;
        }

        public void setBroadcastable(String broadcastable) {
            this.broadcastable = broadcastable;
        }

        public String getRoutingKey() {
            return routingKey;
        }

        public void setRoutingKey(String routingKey) {
            this.routingKey = routingKey;
        }
    }

    public static class Sink {
        private String secret;
        private String name;
        private String queueName;
        private String routingKey;
        private String type;
        private String appId;
        private String autoAck;
        private String msgBodySize;

        public Sink() {
        }

        public String getSecret() {
            return secret;
        }

        public void setSecret(String secret) {
            this.secret = secret;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getQueueName() {
            return queueName;
        }

        public void setQueueName(String queueName) {
            this.queueName = queueName;
        }

        public String getRoutingKey() {
            return routingKey;
        }

        public void setRoutingKey(String routingKey) {
            this.routingKey = routingKey;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getAppId() {
            return appId;
        }

        public void setAppId(String appId) {
            this.appId = appId;
        }

        public boolean isAutoAck() {
            return autoAck == "1";
        }

        public void setAutoAck(String autoAck) {
            this.autoAck = autoAck;
        }

        public String getMsgBodySize() {
            return msgBodySize;
        }

        public void setMsgBodySize(String msgBodySize) {
            this.msgBodySize = msgBodySize;
        }
    }

    public static class Stream {
        private String sourceSecret;
        private String sourceName;
        private String sinkSecret;
        private String sinkName;
        private String token;

        public Stream() {
        }

        public String getSourceSecret() {
            return sourceSecret;
        }

        public void setSourceSecret(String sourceSecret) {
            this.sourceSecret = sourceSecret;
        }

        public String getSourceName() {
            return sourceName;
        }

        public void setSourceName(String sourceName) {
            this.sourceName = sourceName;
        }

        public String getSinkSecret() {
            return sinkSecret;
        }

        public void setSinkSecret(String sinkSecret) {
            this.sinkSecret = sinkSecret;
        }

        public String getSinkName() {
            return sinkName;
        }

        public void setSinkName(String sinkName) {
            this.sinkName = sinkName;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }
    }

    private String getDataFromZK(String path) {
        try {
            logger.debug("path : " + path);
            return new String(openedZookeeper.getData().forPath(path));
        } catch (Exception e) {
            logger.error(e);
        }

        return "";
    }

    private void onPathChildrenChanged(String path) {
        logger.debug("received path change from zookeeper, key : " + path);
        String partPath = path.replace(REVERSE_MESSAGE_ZK_PATH + "/", "");

        if (partPath.startsWith(SOURCE_EVENT_TYPE)) {
            boolean refreshBySecret = partPath.endsWith("secret");
            refreshSourceCache(refreshBySecret);
        } else if (partPath.startsWith(SINK_EVENT_TYPE)) {
            boolean refreshBySecret = partPath.endsWith("secret");
            refreshSinkCache(refreshBySecret);
        } else if (partPath.startsWith(STREAM_EVENT_TYPE)) {
            refreshStreamCache();
        } else {
            logger.warn("received unknown event type : " + partPath);
        }

    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/GenericContext.java
================================================
package com.messagebus.client;

import com.google.common.eventbus.EventBus;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

/**
 * generic context. contains both general object
 * and those object that it owns resource that must be destroyed
 */
public class GenericContext {

    private ConfigManager           configManager;
    private Channel                 channel;
    private Connection              connection;
    private IMessageReceiveListener noticeListener;
    private EventBus                carryEventBus;
    private EventBus                componentEventBus;

    public GenericContext() {
    }

    public ConfigManager getConfigManager() {
        return configManager;
    }

    public void setConfigManager(ConfigManager configManager) {
        this.configManager = configManager;
    }

    public Channel getChannel() {
        return channel;
    }

    public void setChannel(Channel channel) {
        this.channel = channel;
    }

    public Connection getConnection() {
        return connection;
    }

    public void setConnection(Connection connection) {
        this.connection = connection;
    }

    public EventBus getCarryEventBus() {
        return carryEventBus;
    }

    public void setCarryEventBus(EventBus carryEventBus) {
        this.carryEventBus = carryEventBus;
    }

    public EventBus getComponentEventBus() {
        return componentEventBus;
    }

    public void setComponentEventBus(EventBus componentEventBus) {
        this.componentEventBus = componentEventBus;
    }

    @Override
    public String toString() {
        return "GeneralContext{}";
    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/IMessageReceiveListener.java
================================================
package com.messagebus.client;

import com.messagebus.client.message.model.Message;

/**
 * message receive listener interface
 */
public interface IMessageReceiveListener {

    public void onMessage(Message message);

}


================================================
FILE: client/src/main/java/com/messagebus/client/IRequestListener.java
================================================
package com.messagebus.client;

import com.messagebus.client.message.model.Message;

/**
 * Created by yanghua on 3/16/15.
 */
public interface IRequestListener {

    public Message onRequest(Message requestMsg);

}


================================================
FILE: client/src/main/java/com/messagebus/client/IRpcMessageProcessor.java
================================================
package com.messagebus.client;

/**
 * Created by yanghua on 4/17/15.
 */
public interface IRpcMessageProcessor {

    public byte[] onRpcMessage(byte[] in);

}


================================================
FILE: client/src/main/java/com/messagebus/client/InnerClient.java
================================================
package com.messagebus.client;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.event.component.ClientDestroyEvent;
import com.messagebus.client.event.component.ClientInitedEvent;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * Created by yanghua on 3/1/15.
 */
abstract class InnerClient {

    private static final Log logger = LogFactory.getLog(Messagebus.class);

    private   ConfigManager configManager;
    private   Connection    connection;
    protected EventBus      componentEventBus;
    protected EventBus      carryEventBus;

    private   Channel        channel;
    protected GenericContext context;

    private AtomicBoolean isOpen = new AtomicBoolean(false);

    public InnerClient() {
        context = new GenericContext();
    }

    private void open() {
        if (this.isOpen())
            return;

        try {
            this.channel = this.connection.createChannel();
            context.setChannel(this.channel);
        } catch (IOException e) {
            logger.error("create channel error, connection host : " + this.connection.getAddress().getHostAddress()
                    + " connection port : " + this.connection.getPort(), e);
            throw new RuntimeException(e);
        }

        carryEventBus = new EventBus("carryEventBus");

        context.setCarryEventBus(carryEventBus);
        context.setConfigManager(this.configManager);
        context.setConnection(this.connection);

        this.isOpen.compareAndSet(false, true);

        this.componentEventBus.post(new ClientInitedEvent());
    }

    private void close() {
        //release all resource
        synchronized (this.channel) {
            try {
                if (this.channel != null && this.channel.isOpen())
                    this.channel.close();

                this.carryEventBus = null;

                this.isOpen.compareAndSet(true, false);

                this.componentEventBus.post(new ClientDestroyEvent());
            } catch (IOException e) {
                logger.error("close inner client exception : ", e);
                throw new RuntimeException("close inner client exception : ", e);
            } catch (TimeoutException e) {
                logger.error("close inner client exception : ", e);
                throw new RuntimeException("close inner client exception : ", e);
            } catch (Exception e) {
                logger.error("close inner client exception : ", e);
                throw new RuntimeException("close inner client exception : ", e);
            }
        }
    }

    public boolean isOpen() {
        return this.isOpen.get();
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/InnerPool.java
================================================
package com.messagebus.client;

import com.google.common.eventbus.EventBus;
import com.rabbitmq.client.Connection;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

/**
 * Created by yanghua on 3/5/15.
 */
class InnerPool extends AbstractPool<Messagebus> {

    public InnerPool(GenericObjectPoolConfig poolConfig,
                     ConfigManager configManager,
                     Connection connection,
                     EventBus componentEventBus) {
        super(poolConfig, new MessagebusFactory(
                configManager,
                connection,
                componentEventBus)
        );
    }

    /**
     * inner class : default messagebus pool
     */
    private static class DefaultMessagebusPool extends GenericObjectPoolConfig {

        public DefaultMessagebusPool() {
            setTestWhileIdle(false);
            setMinEvictableIdleTimeMillis(60000);
            setTimeBetweenEvictionRunsMillis(30000);
            setNumTestsPerEvictionRun(-1);
        }

    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/MessageContext.java
================================================
package com.messagebus.client;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.model.MessageCarryType;
import com.rabbitmq.client.Channel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * the message context, mostly used in handler chain
 */
public class MessageContext {

    private static final Log logger = LogFactory.getLog(MessageContext.class);

    private String                  host;
    private String                  secret;
    private String                  token;
    private boolean                 enableTransaction;
    private Message[]               messages;
    private String                  consumerTag;
    private MessageCarryType        carryType;
    private ConfigManager.Source    source;
    private ConfigManager.Sink      sink;
    private ConfigManager.Stream    stream;
    private Channel                 channel;
    private IMessageReceiveListener receiveListener;
    private long                    timeout;
    private TimeUnit                timeoutUnit;
    private boolean                 hasTimeout;
    private int                     consumeMsgNum;
    private List<Message>           consumeMsgs;
    private String                  tempQueueName;
    private ConfigManager           configManager;
    private IRequestListener        requestListener;
    private EventBus                carryEventBus;

    private Map<String, Object> otherParams = new HashMap<String, Object>();
    private boolean             isSync      = false;

    private Throwable throwable;

    public MessageContext() {
    }

    public String getHost() {
        return this.host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getSecret() {
        return secret;
    }

    public void setSecret(String secret) {
        this.secret = secret;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public boolean isEnableTransaction() {
        return enableTransaction;
    }

    public void setEnableTransaction(boolean enableTransaction) {
        this.enableTransaction = enableTransaction;
    }

    public Message[] getMessages() {
        return messages;
    }

    public void setMessages(Message[] messages) {
        this.messages = messages;
    }

    public Channel getChannel() {
        return channel;
    }

    public void setChannel(Channel channel) {
        this.channel = channel;
    }

    public MessageCarryType getCarryType() {
        return carryType;
    }

    public void setCarryType(MessageCarryType carryType) {
        this.carryType = carryType;
    }

    public ConfigManager.Sink getSink() {
        return sink;
    }

    public void setSink(ConfigManager.Sink sink) {
        this.sink = sink;
    }

    public ConfigManager.Source getSource() {
        return source;
    }

    public void setSource(ConfigManager.Source source) {
        this.source = source;
    }

    public ConfigManager.Stream getStream() {
        return stream;
    }

    public void setStream(ConfigManager.Stream stream) {
        this.stream = stream;
    }

    public Map<String, Object> getOtherParams() {
        return otherParams;
    }

    public IMessageReceiveListener getReceiveListener() {
        return receiveListener;
    }

    public void setReceiveListener(IMessageReceiveListener receiveListener) {
        this.receiveListener = receiveListener;
    }

    public long getTimeout() {
        return timeout;
    }

    public void setTimeout(long timeout) {
        this.timeout = timeout;
    }

    public TimeUnit getTimeoutUnit() {
        return timeoutUnit;
    }

    public void setTimeoutUnit(TimeUnit timeoutUnit) {
        this.timeoutUnit = timeoutUnit;
    }

    public boolean isTimeout() {
        return hasTimeout;
    }

    public void setIsTimeout(boolean hasTimeout) {
        this.hasTimeout = hasTimeout;
    }

    public String getTempQueueName() {
        return tempQueueName;
    }

    public void setTempQueueName(String tempQueueName) {
        this.tempQueueName = tempQueueName;
    }

    public int getConsumeMsgNum() {
        return consumeMsgNum;
    }

    public void setConsumeMsgNum(int consumeMsgNum) {
        this.consumeMsgNum = consumeMsgNum;
    }

    public List<Message> getConsumeMsgs() {
        return consumeMsgs;
    }

    public void setConsumeMsgs(List<Message> consumeMsgs) {
        this.consumeMsgs = consumeMsgs;
    }

    public boolean isSync() {
        return isSync;
    }

    public void setSync(boolean isSync) {
        this.isSync = isSync;
    }

    public String getConsumerTag() {
        return consumerTag;
    }

    public void setConsumerTag(String consumerTag) {
        this.consumerTag = consumerTag;
    }

    public ConfigManager getConfigManager() {
        return configManager;
    }

    public void setConfigManager(ConfigManager configManager) {
        this.configManager = configManager;
    }

    public IRequestListener getRequestListener() {
        return requestListener;
    }

    public void setRequestListener(IRequestListener requestListener) {
        this.requestListener = requestListener;
    }

    public EventBus getCarryEventBus() {
        return carryEventBus;
    }

    public void setCarryEventBus(EventBus carryEventBus) {
        this.carryEventBus = carryEventBus;
    }

    public Throwable getThrowable() {
        return throwable;
    }

    public void setThrowable(Throwable throwable) {
        this.throwable = throwable;
    }

    @Override
    public String toString() {
        return "MessageContext";
    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/MessageResponseTimeoutException.java
================================================
package com.messagebus.client;

public class MessageResponseTimeoutException extends RuntimeException {

    public MessageResponseTimeoutException() {
        super();
    }

    public MessageResponseTimeoutException(String message) {
        super(message);
    }

    public MessageResponseTimeoutException(String message, Throwable cause) {
        super(message, cause);
    }

    public MessageResponseTimeoutException(Throwable cause) {
        super(cause);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/Messagebus.java
================================================
package com.messagebus.client;

import com.messagebus.client.carry.*;
import com.messagebus.client.message.model.Message;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * the main operator of messagebus client
 */
public class Messagebus extends InnerClient implements IProducer, IConsumer,
        IRequester, IResponser,
        IRpcRequester, IRpcResponser,
        IPublisher, ISubscriber,
        IBroadcaster {

    private static final Log logger = LogFactory.getLog(Messagebus.class);

    private IProducer     producer;
    private IConsumer     consumer;
    private IPublisher    publisher;
    private ISubscriber   subscriber;
    private IRequester    requester;
    private IResponser    responser;
    private IRpcRequester rpcRequester;
    private IRpcResponser rpcResponser;
    private IBroadcaster  broadcaster;

    private Messagebus() {
        super();

        producer = CarryFactory.createProducer(context);
        consumer = CarryFactory.createConsumer(context);
        publisher = CarryFactory.createPublisher(context);
        subscriber = CarryFactory.createSubscriber(context);
        requester = CarryFactory.createRequester(context);
        responser = CarryFactory.createResponser(context);
        rpcRequester = CarryFactory.createRpcRequester(context);
        rpcResponser = CarryFactory.createRpcResponser(context);
        broadcaster = CarryFactory.createBroadcaster(context);
    }

    /**
     * 生产消息
     *
     * @param secret 通过管控台申请的自身队列标识
     * @param to     目标队列名称(必须通过管控台申请与目标队列的通信权限,否则无法通信)
     * @param msg    待发送的消息对象
     * @param token  自身队列跟目标队列通信需要的token,用于校验单向通信是否被授权
     */
    @Override
    public void produce(String secret, String to, Message msg, String token) {
        producer.produce(secret, to, msg, token);
    }

    /**
     * 批量生产消息
     *
     * @param secret 通过管控台申请的自身队列标识
     * @param to     目标队列名称(必须通过管控台申请与目标队列的通信权限,否则无法通信)
     * @param msgs   待发送的消息对象集合
     * @param token  自身队列跟目标队列通信需要的token,用于校验单向通信是否被授权
     */
    @Override
    public void batchProduce(String secret, String to, Message[] msgs, String token) {
        producer.batchProduce(secret, to, msgs, token);
    }

    /**
     * 实时消息消费(Push),该消息消费API被设计为阻塞式的,具体的阻塞时间依赖<param>timeout</param>,
     * 以及<param>TimeUnit</param>这两个参数确定。被阻塞期间,会产生一定时间内的消息消费的事件处理循环。
     * 在这段时间内,只要总线的队列里有消息,都会被推送到客户端来。因此该API的实用场景为:实时消费。
     * 需要注意的是,如果实时消费的时间较长,请将<param>timeout</param>的值设置为: Integer.MAX_VALUE。
     * 并在一个独立的线程上进行异步消费,然后将该线程的控制权外放给主线程或其他控制线程。
     * 另外如果实时消费处于web环境下,推荐将消费线程的启停通过继承<code>ServletContextListener</code>
     * 类实现一个特定的Listener来加以控制。
     *
     * @param secret    通过管控台申请的自身队列标识
     * @param timeout   阻塞超时时间值,该值必须与参数<param>unit</param>一起参考才有意义
     * @param unit      阻塞超时时间的单位,该值必须与参数<param>timeout</param>一起参考才有意义
     * @param onMessage 收到消息后触发的事件,用于实现自己的消息处理实现
     */
    @Override
    public void consume(String secret, long timeout, TimeUnit unit, IMessageReceiveListener onMessage) {
        consumer.consume(secret, timeout, unit, onMessage);
    }

    /**
     * 同步获取式(Pull)消息消费API,该API提供同步获取<param>expectedNum</param>条消息的功能
     * 需要注意的是,该参数<param>expectedNum</param>为单次调用能够获取到的最大值
     *
     * @param secret      通过管控台申请的自身队列标识
     * @param expectedNum 希望获取到的消息条数
     * @return 消费到的消息对象的集合
     */
    @Override
    public List<Message> consume(String secret, int expectedNum) {
        return consumer.consume(secret, expectedNum);
    }

    /**
     * 请求消息API,该接口用于实现常用C/S或B/S架构的request/response的request方,
     * 当消息发送后,它阻塞等待响应消息,直到:
     * - 收到响应
     * - 等待指定的时间后超时(抛出MessageResponseTimeoutException异常)
     *
     * @param secret  通过管控台申请的自身队列标识
     * @param to      目标队列的队列名称
     * @param msg     请求消息对象
     * @param token   自身队列跟目标队列通信需要的token,用于校验单向通信是否被授权
     * @param timeout 指定的超时时间,默认单位为秒
     * @return 获取到的响应消息对象
     * @throws MessageResponseTimeoutException 当超过指定的<param>timeout</param>时间后,
     *                                         仍未收到响应,将抛出该异常
     */
    @Override
    public Message request(String secret, String to, Message msg, String token, long timeout)
            throws MessageResponseTimeoutException {
        return requester.request(secret, to, msg, token, timeout);
    }

    /**
     * 应答/响应API,该接口用于实现request/response的response方,因为response方通常需要一个事件处理循环,
     * 所以该API也是阻塞式的,阻塞的时间依据参数<param>timeout</param>以及<param>timeUnit</param>联合确定。
     * 如果阻塞的时间非常长,请将<param>timeout</param>设置为Integer.MAX_VALUE,
     * 然后以一个独立的事件处理线程来控制它,并将该事件处理线程的控制权暴露给主控线程
     *
     * @param secret    通过管控台申请的自身队列标识
     * @param onRequest 当前请求消息到来时触发的时间,用于获取请求消息,并已返回值的方式返回响应消息
     * @param timeout   阻塞超时时间值,该值必须与参数<param>unit</param>一起参考才有意义
     * @param timeUnit  阻塞超时时间的单位,该值必须与参数<param>timeout</param>一起参考才有意义
     */
    @Override
    public void response(String secret, IRequestListener onRequest, long timeout, TimeUnit timeUnit) {
        responser.response(secret, onRequest, timeout, timeUnit);
    }

    /**
     * 发布消息API,该接口会将消息发布给所有通过管控台申请的所有订阅者
     *
     * @param secret 通过管控台申请的自身队列标识
     * @param msgs   要发布的消息数组
     */
    @Override
    public void publish(String secret, Message[] msgs) {
        publisher.publish(secret, msgs);
    }

    /**
     * 订阅消息API,这里假设订阅的场景具有较强的实时性,因此它以阻塞式的事件方式提供调用
     * 阻塞的时间依据参数<param>timeout</param>以及<param>timeUnit</param>联合确定。
     * 如果阻塞的时间非常长,请将<param>timeout</param>设置为Integer.MAX_VALUE,
     * 然后以一个独立的处理线程来控制它,并将该处理线程的控制权暴露给主控线程
     *
     * @param secret    通过管控台申请的自身队列标识
     * @param from
     * @param token
     * @param onMessage 订阅某个频道队列(Channel Queue)后,收到消息的事件处理器
     * @param timeout   阻塞超时时间值,该值必须与参数<param>unit</param>一起参考才有意义
     * @param unit      阻塞超时时间的单位,该值必须与参数<param>timeout</param>一起参考才有意义
     */
    @Override
    public void subscribe(String secret, String from, String token, IMessageReceiveListener onMessage, long timeout, TimeUnit unit) {
        subscriber.subscribe(secret, from, token, onMessage, timeout, unit);
    }

    /**
     * 广播消息的接口,广播权限需要从管控台申请
     *
     * @param secret 通过管控台申请的自身队列标识
     * @param msgs   待广播的消息对象数组
     */
    @Override
    public void broadcast(String secret, Message[] msgs) {
        broadcaster.broadcast(secret, msgs);
    }

    /**
     * 广播消息接收API,注意:不是每个队列都能收到广播消息。通常情况下,
     * 只有能获取消息的队列才能收到广播消息,广播消息不是必须要求消费的,但推荐在调用消息总线的所有API时,
     * 设置广播消息处理器。如果不设置该处理器,在收到广播消息时,广播消息将被丢弃!
     *
     * @param notificationListener 广播消息接收处理器
     */
    @Deprecated
    public void setNotificationListener(IMessageReceiveListener notificationListener) {
        throw new UnsupportedOperationException("this interface has been deprecated! ");
    }

    /**
     * 支持JSON协议的远程过程调用(JSON-RPC)的请求接口,用于请求一个远程方法,并指定一个获取响应的超时时间。
     * 注意,RPC的请求方需要通过管控台授权,拿到token才能发起请求,另外参数顺序必须与目标方法的参数顺序一致。
     *
     * @param secret               通过管控台申请的自身队列标识
     * @param target               目标队列
     * @param methodName           目标方法名称
     * @param params               目标方法的处理参数
     * @param token                自身队列跟目标队列通信需要的token,用于校验单向通信是否被授权
     * @param timeoutOfMilliSecond 超时的毫秒数
     * @return 远程方法调用的返回值,通常只支持:String/Object/Map这些简单java原生对象格式
     */
    @Override
    public Object call(String secret, String target, String methodName,
                       Object[] params, String token, long timeoutOfMilliSecond) {
        return rpcRequester.call(secret, target, methodName, params, token, timeoutOfMilliSecond);
    }

    /**
     * 支持JSON协议的远程过程调用(JSON-RPC)的响应接口,用于作为一个远程方法的响应方,因此为阻塞式事件处理形式。
     * 阻塞的时间依据参数<param>timeout</param>以及<param>timeUnit</param>联合确定。
     * 如果阻塞的时间非常长,请将<param>timeout</param>设置为Integer.MAX_VALUE,
     * 然后以一个独立的处理线程来控制它,并将该处理线程的控制权暴露给主控线程
     *
     * @param secret           通过管控台申请的自身队列标识
     * @param clazzOfInterface 用于响应处理的接口的Class实例
     * @param serviceProvider  用于响应处理的服务提供者对象,该对象必须实现<param>clazzOfInterface</param>对应的接口
     * @param timeout          阻塞超时时间值,该值必须与参数<param>unit</param>一起参考才有意义
     * @param timeUnit         阻塞超时时间的单位,该值必须与参数<param>timeout</param>一起参考才有意义
     */
    @Override
    public void callback(String secret, Class<?> clazzOfInterface,
                         Object serviceProvider, long timeout, TimeUnit timeUnit) {
        rpcResponser.callback(secret, clazzOfInterface, serviceProvider, timeout, timeUnit);
    }

    /**
     * 原始数据格式请求API,该API为request的原始形式,另一个作用是辅助实现以消息总线作为底层通信的
     * 第三方RPC框架的接入。具体实现可参考package:
     * com.messagebus.client.extension.thrift.TAMQPClientTransport
     *
     * @param secret               通过管控台申请的自身队列标识
     * @param target               目标队列
     * @param requestMsg           请求消息被序列化后的字节数组
     * @param token                自身队列跟目标队列通信需要的token,用于校验单向通信是否被授权
     * @param timeoutOfMilliSecond 等待响应的超时时间(毫秒数)
     * @return 响应消息被序列化后的字节数组
     */
    @Override
    public byte[] primitiveRequest(String secret, String target, byte[] requestMsg,
                                   String token, long timeoutOfMilliSecond) {
        return requester.primitiveRequest(secret, target, requestMsg, token, timeoutOfMilliSecond);
    }

    /**
     * 用于构建RPC响应服务器的帮助方法,该方法用于辅助第三方RPC框架来构造用于消息总线的通信方式以及事件处理循环
     *
     * @param secret          通过管控台申请的自身队列标识
     * @param rpcMsgProcessor 一个RPC消息处理器,当有RPC请求消息到来时触发
     * @return 返回一个被包装过的RPCServer
     */
    @Override
    public WrappedRpcServer buildRpcServer(String secret, IRpcMessageProcessor rpcMsgProcessor) {
        return rpcResponser.buildRpcServer(secret, rpcMsgProcessor);
    }

    /**
     * 注册消息总线支持的事件处理器;事件处理器对象遵循Guava的事件订阅模式(@Subscribe)
     *
     * @param eventProcessor 事件处理器对象的实例
     */
    public void registerEventProcessor(Object eventProcessor) {
        componentEventBus.register(eventProcessor);
    }


    /**
     * 注销消息总线支持的事件处理器;
     *
     * @param eventProcessor 事件处理器对象的实例
     */
    public void unregisterEventProcessor(Object eventProcessor) {
        componentEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/MessagebusConnectedFailedException.java
================================================
package com.messagebus.client;

/**
 * the exception about messagebus connect failed exception
 */
public class MessagebusConnectedFailedException extends Exception {

    public MessagebusConnectedFailedException() {
        super();
    }

    public MessagebusConnectedFailedException(String message) {
        super(message);
    }

    public MessagebusConnectedFailedException(String message, Throwable cause) {
        super(message, cause);
    }

    public MessagebusConnectedFailedException(Throwable cause) {
        super(cause);
    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/MessagebusFactory.java
================================================
package com.messagebus.client;

import com.google.common.eventbus.EventBus;
import com.messagebus.common.ExceptionHelper;
import com.rabbitmq.client.Connection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Created by yanghua on 3/5/15.
 */
class MessagebusFactory implements PooledObjectFactory<Messagebus> {

    private static final Log logger = LogFactory.getLog(MessagebusFactory.class.getName());

    private ConfigManager configManager;
    private Connection    connection;
    private EventBus      componentEventBus;

    private final Method openMethod;
    private final Method closeMethod;

    public MessagebusFactory(ConfigManager configManager,
                             Connection connection,
                             EventBus componentEventBus) {
        this.configManager = configManager;
        this.connection = connection;
        this.componentEventBus = componentEventBus;

        try {
            openMethod = Messagebus.class.getSuperclass().getDeclaredMethod("open");
            openMethod.setAccessible(true);
            closeMethod = Messagebus.class.getSuperclass().getDeclaredMethod("close");
            closeMethod.setAccessible(true);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public PooledObject<Messagebus> makeObject() throws Exception {
        Constructor<Messagebus> privateCtor = Messagebus.class.getDeclaredConstructor();
        privateCtor.setAccessible(true);
        Messagebus client = privateCtor.newInstance();
        privateCtor.setAccessible(false);

        Class<?> superClient = Messagebus.class.getSuperclass();

        //set private field
        Field configManagerField = superClient.getDeclaredField("configManager");
        configManagerField.setAccessible(true);
        configManagerField.set(client, this.configManager);
        configManagerField.setAccessible(false);

        Field connectionField = superClient.getDeclaredField("connection");
        connectionField.setAccessible(true);
        connectionField.set(client, this.connection);
        connectionField.setAccessible(false);

        Field componentEventBus = superClient.getDeclaredField("componentEventBus");
        componentEventBus.setAccessible(true);
        componentEventBus.set(client, this.componentEventBus);
        componentEventBus.setAccessible(false);

        openMethod.invoke(client);

        return new DefaultPooledObject<Messagebus>(client);
    }

    @Override
    public void destroyObject(PooledObject<Messagebus> pooledObject) throws Exception {
        Messagebus client = pooledObject.getObject();
        if (client != null) {
            if (client.isOpen()) {
                closeMethod.invoke(client);
            }
        }
    }

    @Override
    public boolean validateObject(PooledObject<Messagebus> pooledObject) {
        Messagebus client = pooledObject.getObject();
        if (client != null && !client.isOpen()) {
            try {
                openMethod.invoke(client);
            } catch (IllegalAccessException e) {
                ExceptionHelper.logException(logger, e, "validateObject");
            } catch (InvocationTargetException e) {
                ExceptionHelper.logException(logger, e, "validateObject");
            }
        }

        return client != null && client.isOpen();
    }

    @Override
    public void activateObject(PooledObject<Messagebus> pooledObject) throws Exception {

    }

    @Override
    public void passivateObject(PooledObject<Messagebus> pooledObject) throws Exception {

    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/MessagebusPool.java
================================================
package com.messagebus.client;

import com.google.common.base.Strings;
import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventBus;
import com.messagebus.client.event.component.ClientDestroyEventProcessor;
import com.messagebus.client.event.component.ClientInitedEventProcessor;
import com.messagebus.client.event.component.NoticeEvent;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.message.model.MessageFactory;
import com.messagebus.common.RandomHelper;
import com.messagebus.interactor.proxy.ProxyConsumer;
import com.rabbitmq.client.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.imps.CuratorFrameworkState;
import org.apache.curator.retry.ExponentialBackoffRetry;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;

/**
 * Created by yanghua on 3/18/15.
 */
public class MessagebusPool {

    private static final Log logger = LogFactory.getLog(MessagebusPool.class);

    private static final String INNER_EXCHANGE_NAME        = "exchange.proxy.message.inner";
    private static final String EVENT_ROUTING_KEY_NAME     = "routingkey.proxy.message.inner.event";
    private static final String NOTICE_ROUTING_KEY_NAME    = "routingkey.proxy.message.inner.notice";
    private static final String EVENT_QUEUE_NAME_PREFIX    = "autodelete_exclusive.queue.proxy.message.inner.event.";
    private static final String NOTICE_QUEUE_NAME_PREFIX   = "autodelete_exclusive.queue.proxy.message.inner.notice.";
    private static final String EVENT_CONSUMER_TAG_PREFIX  = "tag.proxy.message.inner.event.";
    private static final String NOTICE_CONSUMER_TAG_PREFIX = "tag.proxy.message.inner.notice.";
    private static final String MESSAGE_SERVER_ZK_PATH     = "/component/message/server";

    private com.rabbitmq.client.Address[] innerAddresses;
    private ConfigManager                 configManager;
    private CuratorFramework              zookeeper;
    private Connection                    connection;
    private Channel                       innerChannel;
    private EventBus                      componentEventBus;
    private RemoteNoticeListener          remoteNoticeListener;

    protected InnerPool innerPool;

    public MessagebusPool(String zkConnectionStr,
                          GenericObjectPoolConfig poolConfig) {
        this.init(zkConnectionStr);
        this.innerPool = new InnerPool(poolConfig,
                configManager,
                connection,
                componentEventBus);
    }

    public void registerComponentEventListener(Object listener) {
        this.componentEventBus.register(listener);
    }

    public Messagebus getResource() {
        return this.innerPool.getResource();
    }

    public void returnResource(Messagebus client) {
        this.innerPool.returnResource(client);
    }

    public void destroy() {
        this.remoteNoticeListener.shutdown();

        this.innerPool.destroy();

        try {
            if (this.innerChannel != null && this.innerChannel.isOpen()) {
                this.innerChannel.close();
            }

            if (this.connection != null && this.connection.isOpen()) {
                this.connection.close();
            }

            if (zookeeper != null
                    && zookeeper.getState().equals(CuratorFrameworkState.STARTED)) {
                this.zookeeper.close();
            }
        } catch (IOException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (Exception e) {
            logger.error(e);
            throw new RuntimeException(e);
        }
    }

    protected void init(String zkConnectionStr) {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
        zookeeper = CuratorFrameworkFactory.newClient(
                zkConnectionStr, retryPolicy);

        try {
            zookeeper.start();
            String mqConnectionStr = new String(
                    zookeeper.getData().forPath(MESSAGE_SERVER_ZK_PATH)
            );

            if (Strings.isNullOrEmpty(mqConnectionStr)) {
                logger.info("can not get mq connection info");
                throw new RuntimeException("can not get mq connection info");
            }
            String[] hostPortPairArr = mqConnectionStr.split(",");

            this.innerAddresses = new com.rabbitmq.client.Address[hostPortPairArr.length];

            for (int i = 0; i < hostPortPairArr.length; i++) {
                String[] hostPortArr = hostPortPairArr[i].split(":");
                com.rabbitmq.client.Address address = new com.rabbitmq.client.Address(
                        hostPortArr[0], Integer.parseInt(hostPortArr[1])
                );
                this.innerAddresses[i] = address;
            }

            this.componentEventBus = new AsyncEventBus("componentEventBus",
                    Executors.newSingleThreadExecutor());

            this.configManager = new ConfigManager(zookeeper);
            this.configManager.setComponentEventBus(this.componentEventBus);

            this.registerComponentEventProcessor();

            ConnectionFactory connectionFactory = new ConnectionFactory();

            connectionFactory.setAutomaticRecoveryEnabled(true);
            connectionFactory.setTopologyRecoveryEnabled(true);
            connectionFactory.setConnectionTimeout(60000);
            connectionFactory.setRequestedHeartbeat(10);

            this.connection = connectionFactory.newConnection(innerAddresses);
            this.innerChannel = this.connection.createChannel();

        } catch (IOException e) {
            logger.error("init message pool exception ", e);
            throw new RuntimeException("init message pool exception", e);
        } catch (TimeoutException e) {
            logger.error("init message pool exception ", e);
            throw new RuntimeException("init message pool exception ", e);
        } catch (Exception e) {
            logger.error("init message pool exception ", e);
            throw new RuntimeException("init message pool exception ", e);
        }

        this.remoteNoticeListener = new RemoteNoticeListener();

        //start listen remote notice
        this.remoteNoticeListener.start();
    }

    private void registerComponentEventProcessor() {
        this.componentEventBus.register(new ClientDestroyEventProcessor());
        this.componentEventBus.register(new ClientInitedEventProcessor());
    }

    private class RemoteNoticeListener implements Runnable {

        private Thread currentThread;

        public RemoteNoticeListener() {
            this.currentThread = new Thread(this);
            this.currentThread.setDaemon(true);
            this.currentThread.setName("remote notice listener");
        }

        @Override
        public void run() {
            try {
                String queueName = NOTICE_QUEUE_NAME_PREFIX + RandomHelper.randomNumberAndCharacter(5);
                //declare a non-durable auto-delete & exclusive queue then consume
                innerChannel.queueDeclare(queueName, false, true, true, null);

                Map<String, Object> matchHeader = new HashMap<String, Object>(2);
                matchHeader.put("x-match", "all");
                matchHeader.put("type", "notice");
                innerChannel.queueBind(queueName, INNER_EXCHANGE_NAME, NOTICE_ROUTING_KEY_NAME, matchHeader);

                String randomTag = RandomHelper.randomNumberAndCharacter(6);
                QueueingConsumer consumer = ProxyConsumer.consume(
                        innerChannel,
                        queueName,
                        true,
                        NOTICE_CONSUMER_TAG_PREFIX + randomTag);
                while (true) {
                    QueueingConsumer.Delivery delivery = consumer.nextDelivery();

                    final Message msg = MessageFactory.createMessage(delivery);

                    if (msg == null) continue;

                    NoticeEvent noticeEvent = new NoticeEvent();
                    noticeEvent.setMsg(msg);

                    componentEventBus.post(noticeEvent);
                }
            } catch (InterruptedException e) {
            } catch (ShutdownSignalException e) {
                logger.error(e);
            } catch (Exception e) {
                logger.error(e);
            }
        }

        public void start() {
            this.currentThread.start();
        }

        public void shutdown() {
            this.currentThread.interrupt();
        }

    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/MessagebusSinglePool.java
================================================
package com.messagebus.client;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

/**
 * Created by yanghua on 3/18/15.
 */
public class MessagebusSinglePool extends MessagebusPool {

    public MessagebusSinglePool(String zkConnectionStr) {
        super(zkConnectionStr, new DefaultMessagebusPoolConfig());
    }

    /**
     * inner class : single messagebus instance config
     */
    private static class DefaultMessagebusPoolConfig extends GenericObjectPoolConfig {

        public DefaultMessagebusPoolConfig() {
            setTestWhileIdle(false);
            setMaxTotal(1);
            setMinEvictableIdleTimeMillis(60000);
            setTimeBetweenEvictionRunsMillis(30000);
            setNumTestsPerEvictionRun(-1);
        }

    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/MessagebusUnOpenException.java
================================================
package com.messagebus.client;

/**
 * the exception about messagebus unopened, mostly for semantic
 */
public class MessagebusUnOpenException extends RuntimeException {

    public MessagebusUnOpenException() {
        super();
    }

    public MessagebusUnOpenException(String message) {
        super(message);
    }

    public MessagebusUnOpenException(String message, Throwable cause) {
        super(message, cause);
    }

    public MessagebusUnOpenException(Throwable cause) {
        super(cause);
    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/WrappedRpcServer.java
================================================
package com.messagebus.client;

import com.messagebus.common.ExceptionHelper;
import com.rabbitmq.client.RpcServer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;

/**
 * Created by yanghua on 4/16/15.
 */
public class WrappedRpcServer {

    private static final Log logger = LogFactory.getLog(WrappedRpcServer.class);

    private RpcServer innerRpcServer;

    private WrappedRpcServer(RpcServer rpcServer) {
        this.innerRpcServer = rpcServer;
    }

    public void mainLoop() {
        try {
            innerRpcServer.mainloop();
        } catch (IOException e) {
            ExceptionHelper.logException(logger, e, "mainLoop");
            throw new RuntimeException(e);
        }
    }

    public void terminateMainloop() {
        innerRpcServer.terminateMainloop();
    }

    public void close() {
        try {
            innerRpcServer.close();
        } catch (IOException e) {
            ExceptionHelper.logException(logger, e, "close");
            throw new RuntimeException(e);
        }
    }
}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/AbstractMessageCarryer.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.GenericContext;
import com.messagebus.client.MessageContext;

/**
 * abstract class of message carryer
 * in message bus, we treat producer and consumer as carryer
 */
abstract class AbstractMessageCarryer {

    private GenericContext context;

    protected MessageContext initMessageContext() {
        MessageContext msgCtx = new MessageContext();
        msgCtx.setConfigManager(this.context.getConfigManager());
        msgCtx.setChannel(this.context.getChannel());
        msgCtx.setHost(this.context.getConnection().getAddress().getHostAddress());
        msgCtx.setCarryEventBus(this.context.getCarryEventBus());

        return msgCtx;
    }

    public GenericContext getContext() {
        return context;
    }

    public void setContext(GenericContext context) {
        this.context = context;
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/CarryFactory.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.GenericContext;

/**
 * Created by yanghua on 4/2/15.
 */
public class CarryFactory {

    public static IBroadcaster createBroadcaster(GenericContext context) {
        GenericBroadcaster broadcaster = new GenericBroadcaster();
        broadcaster.setContext(context);

        return broadcaster;
    }

    public static IConsumer createConsumer(GenericContext context) {
        GenericConsumer consumer = new GenericConsumer();
        consumer.setContext(context);

        return consumer;
    }

    public static IProducer createProducer(GenericContext context) {
        GenericProducer producer = new GenericProducer();
        producer.setContext(context);

        return producer;
    }

    public static IPublisher createPublisher(GenericContext context) {
        GenericPublisher publisher = new GenericPublisher();
        publisher.setContext(context);

        return publisher;
    }

    public static IRequester createRequester(GenericContext context) {
        GenericRequester requester = new GenericRequester();
        requester.setContext(context);

        return requester;
    }

    public static IResponser createResponser(GenericContext context) {
        GenericResponser responser = new GenericResponser();
        responser.setContext(context);

        return responser;
    }

    public static IRpcRequester createRpcRequester(GenericContext context) {
        GenericRpcRequester rpcRequester = new GenericRpcRequester();
        rpcRequester.setContext(context);

        return rpcRequester;
    }

    public static IRpcResponser createRpcResponser(GenericContext context) {
        GenericRpcResponser rpcResponser = new GenericRpcResponser();
        rpcResponser.setContext(context);

        return rpcResponser;
    }

    public static ISubscriber createSubscriber(GenericContext context) {
        GenericSubscriber subscriber = new GenericSubscriber();
        subscriber.setContext(context);

        return subscriber;
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericBroadcaster.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.BroadcastEventProcessor;
import com.messagebus.client.event.carry.CommonEventProcessor;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

class GenericBroadcaster extends AbstractMessageCarryer implements IBroadcaster {

    private static final Log logger = LogFactory.getLog(GenericBroadcaster.class);

    public GenericBroadcaster() {
    }

    @Override
    public void broadcast(String secret, Message[] msgs) {
        MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setCarryType(MessageCarryType.BROADCAST);
        ctx.setSource(this.getContext().getConfigManager().getSourceBySecret(secret));
        ctx.setMessages(msgs);

        this.innerBroadcast(ctx);
    }

    private void innerBroadcast(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        BroadcastEventProcessor eventProcessor = new BroadcastEventProcessor();
        carryEventBus.register(eventProcessor);

        CommonEventProcessor.MsgIdGenerateEvent      msgIdGenerateEvent   = new CommonEventProcessor.MsgIdGenerateEvent();
        BroadcastEventProcessor.ValidateEvent        validateEvent        = new BroadcastEventProcessor.ValidateEvent();
        BroadcastEventProcessor.PermissionCheckEvent permissionCheckEvent = new BroadcastEventProcessor.PermissionCheckEvent();
        BroadcastEventProcessor.BroadcastEvent       broadcastEvent       = new BroadcastEventProcessor.BroadcastEvent();

        msgIdGenerateEvent.setMessageContext(ctx);
        validateEvent.setMessageContext(ctx);
        permissionCheckEvent.setMessageContext(ctx);
        broadcastEvent.setMessageContext(ctx);

        carryEventBus.post(msgIdGenerateEvent);
        carryEventBus.post(validateEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(broadcastEvent);

        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericConsumer.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.IMessageReceiveListener;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.CommonEventProcessor;
import com.messagebus.client.event.carry.ConsumeEventProcessor;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * Created by yanghua on 6/26/15.
 */
class GenericConsumer extends AbstractMessageCarryer implements IConsumer {

    private static final Log logger = LogFactory.getLog(GenericConsumer.class);

    @Override
    public void consume(String secret, long timeout, TimeUnit unit, IMessageReceiveListener onMessage) {
        logger.debug("current secret is : " + secret);
        final MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setCarryType(MessageCarryType.CONSUME);
        ctx.setSink(this.getContext().getConfigManager().getSinkBySecret(secret));
        ctx.setReceiveListener(onMessage);
        ctx.setTimeout(timeout);
        ctx.setTimeoutUnit(unit);
        ctx.setSync(false);

        this.innerConsume(ctx);
    }

    @Override
    public List<Message> consume(String secret, int expectedNum) {
        final MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setCarryType(MessageCarryType.CONSUME);
        ctx.setSink(this.getContext().getConfigManager().getSinkBySecret(secret));
        ctx.setConsumeMsgNum(expectedNum);
        ctx.setSync(true);

        this.innerConsume(ctx);

        return ctx.getConsumeMsgs();
    }

    private void innerConsume(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        ConsumeEventProcessor eventProcessor = new ConsumeEventProcessor();
        carryEventBus.register(eventProcessor);

        //init events
        ConsumeEventProcessor.ValidateEvent        validateEvent        = new ConsumeEventProcessor.ValidateEvent();
        ConsumeEventProcessor.PermissionCheckEvent permissionCheckEvent = new ConsumeEventProcessor.PermissionCheckEvent();
        ConsumeEventProcessor.TagGenerateEvent     tagGenerateEvent     = new ConsumeEventProcessor.TagGenerateEvent();
        CommonEventProcessor.PreConsumeEvent       perConsumeEvent      = new CommonEventProcessor.PreConsumeEvent();

        validateEvent.setMessageContext(ctx);
        permissionCheckEvent.setMessageContext(ctx);
        tagGenerateEvent.setMessageContext(ctx);
        perConsumeEvent.setMessageContext(ctx);

        //arrange event order and emit
        carryEventBus.post(validateEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(tagGenerateEvent);
        carryEventBus.post(perConsumeEvent);

        if (ctx.isSync()) {
            ConsumeEventProcessor.SyncConsumeEvent syncConsumeEvent = new ConsumeEventProcessor.SyncConsumeEvent();
            syncConsumeEvent.setMessageContext(ctx);
            carryEventBus.post(syncConsumeEvent);
        } else {
            ConsumeEventProcessor.AsyncMessageLoopEvent asyncMessageLoopEvent = new ConsumeEventProcessor.AsyncMessageLoopEvent();
            asyncMessageLoopEvent.setMessageContext(ctx);
            carryEventBus.post(asyncMessageLoopEvent);
        }

        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericProducer.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.ConfigManager;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.ProduceEventProcessor;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * a generic producer implements the IProducer interface
 */
class GenericProducer extends AbstractMessageCarryer implements IProducer {

    private static final Log logger = LogFactory.getLog(GenericProducer.class);

    /**
     * simple producer just produces a message
     *
     * @param secret
     * @param to     the message's destination
     * @param msg    a general message
     * @param token
     */
    @Override
    public void produce(String secret, String to, Message msg, String token) {
        MessageContext ctx = this.initMsgContext(secret, to, token);
        ctx.setMessages(new Message[]{msg});
        innerProduce(ctx);
    }

    /**
     * a producer produces a set of messages
     *
     * @param secret
     * @param to     the message's destination
     * @param msgs   a general message's array
     * @param token
     */
    @Override
    public void batchProduce(String secret, String to, Message[] msgs, String token) {
        MessageContext context = this.initMsgContext(secret, to, token);
        context.setMessages(msgs);
        innerProduce(context);
    }

    private MessageContext initMsgContext(String secret, String to, String token) {
        MessageContext context = initMessageContext();
        context.setSecret(secret);
        context.setCarryType(MessageCarryType.PRODUCE);
        context.setSource(this.getContext().getConfigManager().getSourceBySecret(secret));
        ConfigManager.Sink sink = this.getContext().getConfigManager().getSinkByName(to);
        context.setSink(sink);
        context.setToken(token);
        context.setStream(this.getContext().getConfigManager().getStreamByToken(token));

        return context;
    }

    private void innerProduce(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        ProduceEventProcessor eventProcessor = new ProduceEventProcessor();
        carryEventBus.register(eventProcessor);

        //init events
        ProduceEventProcessor.ValidateEvent         validateEvent         = new ProduceEventProcessor.ValidateEvent();
        ProduceEventProcessor.MsgBodySizeCheckEvent msgBodySizeCheckEvent = new ProduceEventProcessor.MsgBodySizeCheckEvent();
        ProduceEventProcessor.PermissionCheckEvent  permissionCheckEvent  = new ProduceEventProcessor.PermissionCheckEvent();
        ProduceEventProcessor.MsgIdGenerateEvent    msgIdGenerateEvent    = new ProduceEventProcessor.MsgIdGenerateEvent();
        ProduceEventProcessor.MsgBodyCompressEvent  msgBodyCompressEvent  = new ProduceEventProcessor.MsgBodyCompressEvent();
        ProduceEventProcessor.ProduceEvent          produceEvent          = new ProduceEventProcessor.ProduceEvent();

        validateEvent.setMessageContext(ctx);
        msgBodySizeCheckEvent.setMessageContext(ctx);
        permissionCheckEvent.setMessageContext(ctx);
        msgIdGenerateEvent.setMessageContext(ctx);
        msgBodyCompressEvent.setMessageContext(ctx);
        produceEvent.setMessageContext(ctx);

        //arrange event order and emit!
        carryEventBus.post(validateEvent);
        carryEventBus.post(msgBodySizeCheckEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(msgIdGenerateEvent);
        carryEventBus.post(msgBodyCompressEvent);
        carryEventBus.post(produceEvent);

        //unregister event processor
        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericPublisher.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.CommonEventProcessor;
import com.messagebus.client.event.carry.PublishEventProcessor;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

class GenericPublisher extends AbstractMessageCarryer implements IPublisher {

    private static final Log logger = LogFactory.getLog(GenericPublisher.class);

    public GenericPublisher() {
    }

    @Override
    public void publish(String secret, Message[] msgs) {
        MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setCarryType(MessageCarryType.PUBLISH);
        ctx.setSource(this.getContext().getConfigManager().getSourceBySecret(secret));
        ctx.setMessages(msgs);

        this.innerPublish(ctx);
    }

    private void innerPublish(MessageContext context) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        PublishEventProcessor eventProcessor = new PublishEventProcessor();
        carryEventBus.register(eventProcessor);

        //init events
        CommonEventProcessor.MsgIdGenerateEvent    msgIdGenerateEvent   = new CommonEventProcessor.MsgIdGenerateEvent();
        PublishEventProcessor.ValidateEvent        validateEvent        = new PublishEventProcessor.ValidateEvent();
        PublishEventProcessor.PermissionCheckEvent permissionCheckEvent = new PublishEventProcessor.PermissionCheckEvent();
        PublishEventProcessor.PublishEvent         publishEvent         = new PublishEventProcessor.PublishEvent();

        msgIdGenerateEvent.setMessageContext(context);
        validateEvent.setMessageContext(context);
        permissionCheckEvent.setMessageContext(context);
        publishEvent.setMessageContext(context);

        //arrange event order and emit
        carryEventBus.post(msgIdGenerateEvent);
        carryEventBus.post(validateEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(publishEvent);

        //unregister
        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericRequester.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.ConfigManager;
import com.messagebus.client.MessageContext;
import com.messagebus.client.MessageResponseTimeoutException;
import com.messagebus.client.event.carry.CommonEventProcessor;
import com.messagebus.client.event.carry.RequestEventProcessor;
import com.messagebus.client.message.model.Message;
import com.messagebus.client.model.MessageCarryType;
import com.messagebus.common.Constants;
import com.messagebus.common.ExceptionHelper;
import com.rabbitmq.client.RpcClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

class GenericRequester extends AbstractMessageCarryer implements IRequester {

    private static final Log logger = LogFactory.getLog(GenericRequester.class);

    public GenericRequester() {
    }

    /**
     * send a request and got a response
     *
     * @param secret
     * @param to      send to destination
     * @param msg     request message
     * @param token
     * @param timeout response wait timeout  @return Message the response
     * @throws com.messagebus.client.MessageResponseTimeoutException
     */
    @Override
    public Message request(String secret, String to, Message msg,
                           String token, long timeout) throws MessageResponseTimeoutException {
        MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setToken(token);
        ctx.setCarryType(MessageCarryType.REQUEST);
        ctx.setSource(this.getContext().getConfigManager().getSourceBySecret(secret));
        ctx.setStream(this.getContext().getConfigManager().getStreamByToken(token));
        ConfigManager.Sink sink = this.getContext().getConfigManager().getSinkByName(to);
        ctx.setSink(sink);
        ctx.setTimeout(timeout);
        ctx.setMessages(new Message[]{msg});

        this.innerRequest(ctx);

        if (ctx.isTimeout() || ctx.getConsumeMsgs() == null || ctx.getConsumeMsgs().size() == 0)
            throw new MessageResponseTimeoutException("message request time out.");

        return ctx.getConsumeMsgs().get(0);
    }

    @Override
    public byte[] primitiveRequest(String secret,
                                   String target,
                                   byte[] requestMsg,
                                   String token,
                                   long timeoutOfMilliSecond) {
        ConfigManager.Source source = this.getContext().getConfigManager().getSourceBySecret(secret);
        ConfigManager.Sink   sink   = this.getContext().getConfigManager().getSinkByName(target);

        RpcClient innerRpcClient = null;
        try {
            innerRpcClient = new RpcClient(this.getContext().getChannel(),
                    Constants.PROXY_EXCHANGE_NAME,
                    sink.getRoutingKey(),
                    (int) timeoutOfMilliSecond);
            return innerRpcClient.primitiveCall(requestMsg);
        } catch (IOException e) {
            ExceptionHelper.logException(logger, e, "primitive request ");
        } catch (TimeoutException e) {
            logger.info("primitiveRequest timeout : " + "[secret] " + secret + " [target] " + target);
        } finally {
            try {
                if (innerRpcClient != null) innerRpcClient.close();
            } catch (IOException e) {
                ExceptionHelper.logException(logger, e, "primitive request finally close inner rpc client");
            }
        }

        return new byte[0];
    }


    private void innerRequest(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        RequestEventProcessor eventProcessor = new RequestEventProcessor();
        carryEventBus.register(eventProcessor);

        RequestEventProcessor.ValidateEvent                validateEvent                = new RequestEventProcessor.ValidateEvent();
        CommonEventProcessor.MsgBodySizeCheckEvent         msgBodySizeCheckEvent        = new CommonEventProcessor.MsgBodySizeCheckEvent();
        RequestEventProcessor.PermissionCheckEvent         permissionCheckEvent         = new RequestEventProcessor.PermissionCheckEvent();
        CommonEventProcessor.MsgIdGenerateEvent            msgIdGenerateEvent           = new CommonEventProcessor.MsgIdGenerateEvent();
        RequestEventProcessor.TempQueueInitializeEvent     tempQueueInitializeEvent     = new RequestEventProcessor.TempQueueInitializeEvent();
        CommonEventProcessor.MsgBodyCompressEvent          msgBodyCompressEvent         = new CommonEventProcessor.MsgBodyCompressEvent();
        RequestEventProcessor.RequestEvent                 requestEvent                 = new RequestEventProcessor.RequestEvent();
        CommonEventProcessor.TagGenerateEvent              tagGenerateEvent             = new CommonEventProcessor.TagGenerateEvent();
        RequestEventProcessor.BlockAndTimeoutResponseEvent blockAndTimeoutResponseEvent = new RequestEventProcessor.BlockAndTimeoutResponseEvent();

        validateEvent.setMessageContext(ctx);
        msgBodySizeCheckEvent.setMessageContext(ctx);
        permissionCheckEvent.setMessageContext(ctx);
        msgIdGenerateEvent.setMessageContext(ctx);
        tempQueueInitializeEvent.setMessageContext(ctx);
        msgBodyCompressEvent.setMessageContext(ctx);
        requestEvent.setMessageContext(ctx);
        tagGenerateEvent.setMessageContext(ctx);
        blockAndTimeoutResponseEvent.setMessageContext(ctx);

        //arrange event order and emit
        carryEventBus.post(validateEvent);
        carryEventBus.post(msgBodySizeCheckEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(msgIdGenerateEvent);
        carryEventBus.post(tempQueueInitializeEvent);
        carryEventBus.post(msgBodyCompressEvent);
        carryEventBus.post(requestEvent);
        carryEventBus.post(tagGenerateEvent);
        carryEventBus.post(blockAndTimeoutResponseEvent);

        //unregister
        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericResponser.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.IRequestListener;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.CommonEventProcessor;
import com.messagebus.client.event.carry.ResponseEventProcessor;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.concurrent.TimeUnit;

class GenericResponser extends AbstractMessageCarryer implements IResponser {

    private static final Log logger = LogFactory.getLog(GenericResponser.class);

    @Override
    public void response(String secret, IRequestListener onRequest, long timeout, TimeUnit timeUnit) {
        final MessageContext ctx = initMessageContext();
        ctx.setCarryType(MessageCarryType.RESPONSE);
        ctx.setSecret(secret);
        ctx.setSink(this.getContext().getConfigManager().getSinkBySecret(secret));
        ctx.setRequestListener(onRequest);
        ctx.setTimeout(timeout);
        ctx.setTimeoutUnit(timeUnit);

        this.innerResponse(ctx);
    }

    private void innerResponse(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        ResponseEventProcessor eventProcessor = new ResponseEventProcessor();
        carryEventBus.register(eventProcessor);

        CommonEventProcessor.TagGenerateEvent       tagGenerateEvent      = new CommonEventProcessor.TagGenerateEvent();
        ResponseEventProcessor.ValidateEvent        validateEvent         = new ResponseEventProcessor.ValidateEvent();
        ResponseEventProcessor.PermissionCheckEvent permissionCheckEvent  = new ResponseEventProcessor.PermissionCheckEvent();
        CommonEventProcessor.PreConsumeEvent        perConsumeEvent       = new CommonEventProcessor.PreConsumeEvent();
        CommonEventProcessor.AsyncMessageLoopEvent  asyncMessageLoopEvent = new CommonEventProcessor.AsyncMessageLoopEvent();

        tagGenerateEvent.setMessageContext(ctx);
        validateEvent.setMessageContext(ctx);
        permissionCheckEvent.setMessageContext(ctx);
        perConsumeEvent.setMessageContext(ctx);
        asyncMessageLoopEvent.setMessageContext(ctx);

        //arrange event order and emit
        carryEventBus.post(tagGenerateEvent);
        carryEventBus.post(validateEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(perConsumeEvent);
        carryEventBus.post(asyncMessageLoopEvent);

        //unregister
        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericRpcRequester.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.RpcRequestEventProcessor;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.Map;

/**
 * Created by yanghua on 4/8/15.
 */
public class GenericRpcRequester extends AbstractMessageCarryer implements IRpcRequester {

    private static final Log logger = LogFactory.getLog(GenericRpcRequester.class);

    public GenericRpcRequester() {
    }

    @Override
    public Object call(String secret, String target, String methodName, Object[] params, String token, long timeoutOfMilliSecond) {
        MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setToken(token);
        ctx.setCarryType(MessageCarryType.RPCREQUEST);
        ctx.setSource(this.getContext().getConfigManager().getSourceBySecret(secret));
        ctx.setTimeout(timeoutOfMilliSecond);
        ctx.setSink(this.getContext().getConfigManager().getSinkByName(target));
        ctx.setStream(this.getContext().getConfigManager().getStreamByToken(token));
        Map<String, Object> otherParams = ctx.getOtherParams();
        otherParams.put("methodName", methodName);
        otherParams.put("params", params);

        this.innerRpcRequest(ctx);

        return otherParams.get("result");
    }

    private void innerRpcRequest(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        RpcRequestEventProcessor eventProcessor = new RpcRequestEventProcessor();
        carryEventBus.register(eventProcessor);

        RpcRequestEventProcessor.PermissionCheckEvent permissionCheckEvent = new RpcRequestEventProcessor.PermissionCheckEvent();
        RpcRequestEventProcessor.RpcRequestEvent      rpcRequestEvent      = new RpcRequestEventProcessor.RpcRequestEvent();

        permissionCheckEvent.setMessageContext(ctx);
        rpcRequestEvent.setMessageContext(ctx);

        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(rpcRequestEvent);

        //unregister
        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericRpcResponser.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.ConfigManager;
import com.messagebus.client.IRpcMessageProcessor;
import com.messagebus.client.MessageContext;
import com.messagebus.client.WrappedRpcServer;
import com.messagebus.client.event.carry.RpcResponseEventProcessor;
import com.messagebus.client.model.MessageCarryType;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.RpcServer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * Created by yanghua on 4/8/15.
 */
public class GenericRpcResponser extends AbstractMessageCarryer implements IRpcResponser {

    private static final Log logger = LogFactory.getLog(GenericRpcResponser.class);

    public GenericRpcResponser() {
    }

    @Override
    public void callback(String secret, Class<?> clazzOfInterface, Object serviceProvider, long timeout, TimeUnit timeUnit) {
        MessageContext ctx = initMessageContext();
        ctx.setSecret(secret);
        ctx.setCarryType(MessageCarryType.RPCRESPONSE);
        ctx.setSink(this.getContext().getConfigManager().getSinkBySecret(secret));
        Map<String, Object> otherParams = ctx.getOtherParams();
        otherParams.put("serviceProvider", serviceProvider);
        otherParams.put("clazzOfInterface", clazzOfInterface);
        ctx.setTimeout(timeout);
        ctx.setTimeoutUnit(timeUnit);

        this.innerRpcResponse(ctx);
    }

    @Override
    public WrappedRpcServer buildRpcServer(String secret, final IRpcMessageProcessor rpcMsgProcessor) {
        ConfigManager.Sink sink = this.getContext().getConfigManager().getSinkBySecret(secret);
        try {
            RpcServer aServer = new RpcServer(this.getContext().getChannel(), sink.getQueueName()) {

                @Override
                public byte[] handleCall(QueueingConsumer.Delivery request, AMQP.BasicProperties replyProperties) {
                    return rpcMsgProcessor.onRpcMessage(request.getBody());
                }

            };

            Constructor<WrappedRpcServer> rpcServerConstructor = WrappedRpcServer.class.getDeclaredConstructor(RpcServer.class);
            rpcServerConstructor.setAccessible(true);
            WrappedRpcServer wrappedRpcServer = rpcServerConstructor.newInstance(aServer);
            rpcServerConstructor.setAccessible(false);

            return wrappedRpcServer;
        } catch (IOException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (NoSuchMethodException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            logger.error(e);
            throw new RuntimeException(e);
        } catch (Exception e) {
            logger.error(e);
            throw new RuntimeException(e);
        }
    }

    private void innerRpcResponse(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        RpcResponseEventProcessor eventProcessor = new RpcResponseEventProcessor();
        carryEventBus.register(eventProcessor);

        RpcResponseEventProcessor.RpcResponseEvent rpcResponseEvent = new RpcResponseEventProcessor.RpcResponseEvent();

        rpcResponseEvent.setMessageContext(ctx);
        carryEventBus.post(rpcResponseEvent);
        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/GenericSubscriber.java
================================================
package com.messagebus.client.carry;

import com.google.common.eventbus.EventBus;
import com.messagebus.client.IMessageReceiveListener;
import com.messagebus.client.MessageContext;
import com.messagebus.client.event.carry.CommonEventProcessor;
import com.messagebus.client.event.carry.SubscribeEventProcessor;
import com.messagebus.client.model.MessageCarryType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.concurrent.TimeUnit;

class GenericSubscriber extends AbstractMessageCarryer implements ISubscriber {

    private static final Log logger = LogFactory.getLog(GenericSubscriber.class);

    public GenericSubscriber() {
    }

    @Override
    public void subscribe(String secret,
                          String from, String token,
                          IMessageReceiveListener onMessage,
                          long timeout, TimeUnit unit) {
        final MessageContext ctx = initMessageContext();
        ctx.setCarryType(MessageCarryType.SUBSCRIBE);
        ctx.setSecret(secret);
        ctx.setToken(token);
        ctx.setSource(this.getContext().getConfigManager().getSourceByName(from));
        ctx.setSink(this.getContext().getConfigManager().getSinkBySecret(secret));
        ctx.setStream(this.getContext().getConfigManager().getStreamByToken(token));
        ctx.setReceiveListener(onMessage);
        ctx.setSync(false);
        ctx.setTimeout(timeout);
        ctx.setTimeoutUnit(unit);

        this.innerSubscribe(ctx);
    }

    private void innerSubscribe(MessageContext ctx) {
        EventBus carryEventBus = this.getContext().getCarryEventBus();

        //register event processor
        SubscribeEventProcessor eventProcessor = new SubscribeEventProcessor();
        carryEventBus.register(eventProcessor);

        //init events
        CommonEventProcessor.TagGenerateEvent        tagGenerateEvent      = new CommonEventProcessor.TagGenerateEvent();
        SubscribeEventProcessor.ValidateEvent        validateEvent         = new SubscribeEventProcessor.ValidateEvent();
        SubscribeEventProcessor.PermissionCheckEvent permissionCheckEvent  = new SubscribeEventProcessor.PermissionCheckEvent();
        CommonEventProcessor.PreConsumeEvent         perConsumeEvent       = new CommonEventProcessor.PreConsumeEvent();
        CommonEventProcessor.AsyncMessageLoopEvent   asyncMessageLoopEvent = new CommonEventProcessor.AsyncMessageLoopEvent();

        tagGenerateEvent.setMessageContext(ctx);
        validateEvent.setMessageContext(ctx);
        permissionCheckEvent.setMessageContext(ctx);
        perConsumeEvent.setMessageContext(ctx);
        asyncMessageLoopEvent.setMessageContext(ctx);

        carryEventBus.post(tagGenerateEvent);
        carryEventBus.post(validateEvent);
        carryEventBus.post(permissionCheckEvent);
        carryEventBus.post(perConsumeEvent);
        carryEventBus.post(asyncMessageLoopEvent);

        carryEventBus.unregister(eventProcessor);
    }

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IBroadcaster.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.message.model.Message;

public interface IBroadcaster {

    public void broadcast(String secret, Message[] msgs);

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IConsumer.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.IMessageReceiveListener;
import com.messagebus.client.message.model.Message;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * Created by yanghua on 3/1/15.
 */
public interface IConsumer {

    public void consume(String secret, long timeout, TimeUnit unit, IMessageReceiveListener onMessage);

    public List<Message> consume(String secret, int expectedNum);

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IProducer.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.message.model.Message;

/**
 * the interface of producer
 */
public interface IProducer {

    public void produce(String secret, String to, Message msg, String token);

    public void batchProduce(String secret, String to, Message[] msgs, String token);

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IPublisher.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.message.model.Message;

public interface IPublisher {

    public void publish(String secret, Message[] msgs);

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IRequester.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.MessageResponseTimeoutException;
import com.messagebus.client.message.model.Message;

public interface IRequester {

    public Message request(String secret, String to, Message msg, String token, long timeout)
            throws MessageResponseTimeoutException;

    public byte[] primitiveRequest(String secret, String target, byte[] requestMsg, String token, long timeoutOfMilliSecond);


}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IResponser.java
================================================
package com.messagebus.client.carry;


import com.messagebus.client.IRequestListener;

import java.util.concurrent.TimeUnit;

public interface IResponser {

    /**
     * response a temp message to a named queue
     *
     * @param toTmpQueue      the temp queue name
     * @param msg             the entity of message
     * @param receiveListener
     * @param secret
     * @param onRequest
     * @param timeout
     * @param timeUnit
     */
    public void response(String secret, IRequestListener onRequest, long timeout, TimeUnit timeUnit);

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IRpcRequester.java
================================================
package com.messagebus.client.carry;

/**
 * Created by yanghua on 4/8/15.
 */
public interface IRpcRequester {

    public Object call(String secret, String target, String methodName, Object[] params, String token, long timeoutOfMilliSecond);

}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/IRpcResponser.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.IRpcMessageProcessor;
import com.messagebus.client.WrappedRpcServer;

import java.util.concurrent.TimeUnit;

/**
 * Created by yanghua on 4/8/15.
 */
public interface IRpcResponser {

    public void callback(String secret, Class<?> clazzOfInterface, Object serviceProvider, long timeout, TimeUnit timeUnit);

    public WrappedRpcServer buildRpcServer(String secret, IRpcMessageProcessor rpcMsgProcessor);
}


================================================
FILE: client/src/main/java/com/messagebus/client/carry/ISubscriber.java
================================================
package com.messagebus.client.carry;

import com.messagebus.client.IMessageReceiveListener;

import java.util.concurrent.TimeUnit;

/**
 * Created by yanghua on 3/1/15.
 */
public interface ISubscriber {

    public void subscribe(String secret,
                          String from, String token, IMessageReceiveListener onMessage,
                          long timeout, TimeUnit unit);

}


================================================
FILE: client/src/main/java/com/messagebus/client/event/carry/BroadcastEventProcessor.java
================================================
package com.messagebus.client.event.carry;

import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
import com.messagebus.client.ConfigManager;
import com.messagebus.client.MessageContext;
import com.messagebus.client.message
Download .txt
gitextract_25jgdlw4/

├── .gitignore
├── .travis.yml
├── README.md
├── benchmark/
│   ├── README-CN.md
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── messagebus/
│           │           └── benchmark/
│           │               └── client/
│           │                   ├── Benchmark.java
│           │                   ├── IFetcher.java
│           │                   ├── ILifeCycle.java
│           │                   ├── TestConfigConstant.java
│           │                   ├── TestMessageFactory.java
│           │                   ├── TestUtility.java
│           │                   └── testCase/
│           │                       ├── CalcService.java
│           │                       ├── ConsumeTestCase.java
│           │                       ├── MessagebusJSONRpcTestCase.java
│           │                       ├── OriginalConsumeTestCase.java
│           │                       ├── OriginalProduceTestCase.java
│           │                       ├── OriginalProduceWithoutTopologyTestCase.java
│           │                       ├── ProduceRemainLogTestCase.java
│           │                       ├── ProduceTestCase.java
│           │                       ├── ProduceWithoutLogTestCase.java
│           │                       └── ThriftJSONRpcTestCase.java
│           └── resources/
│               ├── clearEnv.sh
│               ├── log4j.properties
│               ├── plotscript_consume.sh
│               ├── plotscript_messagebus_client_produce.sh
│               ├── plotscript_messagebus_client_remain_log_produce.sh
│               ├── plotscript_messagebus_client_without_realtime_log_produce.sh
│               ├── plotscript_official_client_produce.sh
│               └── plotscript_official_client_without_topology_produce.sh
├── client/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── messagebus/
│       │   │           └── client/
│       │   │               ├── AbstractPool.java
│       │   │               ├── Address.java
│       │   │               ├── ConfigManager.java
│       │   │               ├── GenericContext.java
│       │   │               ├── IMessageReceiveListener.java
│       │   │               ├── IRequestListener.java
│       │   │               ├── IRpcMessageProcessor.java
│       │   │               ├── InnerClient.java
│       │   │               ├── InnerPool.java
│       │   │               ├── MessageContext.java
│       │   │               ├── MessageResponseTimeoutException.java
│       │   │               ├── Messagebus.java
│       │   │               ├── MessagebusConnectedFailedException.java
│       │   │               ├── MessagebusFactory.java
│       │   │               ├── MessagebusPool.java
│       │   │               ├── MessagebusSinglePool.java
│       │   │               ├── MessagebusUnOpenException.java
│       │   │               ├── WrappedRpcServer.java
│       │   │               ├── carry/
│       │   │               │   ├── AbstractMessageCarryer.java
│       │   │               │   ├── CarryFactory.java
│       │   │               │   ├── GenericBroadcaster.java
│       │   │               │   ├── GenericConsumer.java
│       │   │               │   ├── GenericProducer.java
│       │   │               │   ├── GenericPublisher.java
│       │   │               │   ├── GenericRequester.java
│       │   │               │   ├── GenericResponser.java
│       │   │               │   ├── GenericRpcRequester.java
│       │   │               │   ├── GenericRpcResponser.java
│       │   │               │   ├── GenericSubscriber.java
│       │   │               │   ├── IBroadcaster.java
│       │   │               │   ├── IConsumer.java
│       │   │               │   ├── IProducer.java
│       │   │               │   ├── IPublisher.java
│       │   │               │   ├── IRequester.java
│       │   │               │   ├── IResponser.java
│       │   │               │   ├── IRpcRequester.java
│       │   │               │   ├── IRpcResponser.java
│       │   │               │   └── ISubscriber.java
│       │   │               ├── event/
│       │   │               │   ├── carry/
│       │   │               │   │   ├── BroadcastEventProcessor.java
│       │   │               │   │   ├── CarryEvent.java
│       │   │               │   │   ├── CommonEventProcessor.java
│       │   │               │   │   ├── ConsumeEventProcessor.java
│       │   │               │   │   ├── ProduceEventProcessor.java
│       │   │               │   │   ├── PublishEventProcessor.java
│       │   │               │   │   ├── RequestEventProcessor.java
│       │   │               │   │   ├── ResponseEventProcessor.java
│       │   │               │   │   ├── RpcRequestEventProcessor.java
│       │   │               │   │   ├── RpcResponseEventProcessor.java
│       │   │               │   │   └── SubscribeEventProcessor.java
│       │   │               │   └── component/
│       │   │               │       ├── ClientDestroyEvent.java
│       │   │               │       ├── ClientDestroyEventProcessor.java
│       │   │               │       ├── ClientInitedEvent.java
│       │   │               │       ├── ClientInitedEventProcessor.java
│       │   │               │       ├── InnerEvent.java
│       │   │               │       └── NoticeEvent.java
│       │   │               ├── extension/
│       │   │               │   └── thrift/
│       │   │               │       ├── TAMQPClientTransport.java
│       │   │               │       └── ThriftMessageHandler.java
│       │   │               ├── message/
│       │   │               │   ├── model/
│       │   │               │   │   ├── Message.java
│       │   │               │   │   ├── MessageFactory.java
│       │   │               │   │   └── MessageJSONSerializer.java
│       │   │               │   └── transfer/
│       │   │               │       └── MessageHeaderTransfer.java
│       │   │               └── model/
│       │   │                   ├── BaseModel.java
│       │   │                   ├── Config.java
│       │   │                   ├── HandlerModel.java
│       │   │                   └── MessageCarryType.java
│       │   └── resources/
│       │       └── log4j.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── messagebus/
│                       └── client/
│                           ├── api/
│                           │   ├── Broadcast.java
│                           │   ├── ComponentEventListener.java
│                           │   ├── ProduceConsume.java
│                           │   ├── ProduceConsumeLoopback.java
│                           │   ├── PublishSubscribe.java
│                           │   ├── RequestResponse.java
│                           │   └── RpcRequestResponse.java
│                           ├── core/
│                           │   ├── BaseTestCase.java
│                           │   └── MessageUtil.java
│                           └── feature/
│                               ├── CalcService.java
│                               ├── CalcServiceImpl.java
│                               ├── MessageBodySize.java
│                               ├── MessageNumLimit.java
│                               └── ThriftWithAMQPRpc.java
├── common-component/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── messagebus/
│           │           └── common/
│           │               ├── AuthInfo.java
│           │               ├── Constants.java
│           │               ├── Event.java
│           │               ├── ExceptionHelper.java
│           │               ├── GsonUtil.java
│           │               ├── HttpHelper.java
│           │               ├── IAsyncCallback.java
│           │               ├── InnerNoticeEntity.java
│           │               ├── NumberHelper.java
│           │               ├── RandomHelper.java
│           │               ├── RouterType.java
│           │               ├── ShellHelper.java
│           │               ├── TestVariableInfo.java
│           │               ├── UUIDGenerator.java
│           │               └── compress/
│           │                   ├── CompressEnum.java
│           │                   ├── CompressorFactory.java
│           │                   ├── ICompressor.java
│           │                   ├── LZFCompressor.java
│           │                   └── SnappyCompressor.java
│           └── resources/
│               └── log4j.properties
├── httpbridge/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── messagebus/
│       │   │           └── httpbridge/
│       │   │               ├── controller/
│       │   │               │   ├── ExceptionHandler.java
│       │   │               │   └── HttpBridge.java
│       │   │               ├── filter/
│       │   │               │   └── URLDispatcher.java
│       │   │               ├── listener/
│       │   │               │   └── AppContextListener.java
│       │   │               ├── model/
│       │   │               │   └── TextMessage.java
│       │   │               └── util/
│       │   │                   ├── CommonUtil.java
│       │   │                   ├── Constants.java
│       │   │                   ├── ResponseUtil.java
│       │   │                   └── TextMessageJSONSerializer.java
│       │   ├── resources/
│       │   │   └── log4j.properties
│       │   └── webapp/
│       │       └── WEB-INF/
│       │           ├── jetty-web.xml
│       │           └── web.xml
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── messagebus/
│           │           └── httpbridge/
│           │               └── util/
│           │                   └── PropertiesHelper.java
│           └── resource/
│               └── common.properties
├── interactor-component/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── messagebus/
│                       └── interactor/
│                           ├── proxy/
│                           │   ├── ProxyConsumer.java
│                           │   └── ProxyProducer.java
│                           ├── rabbitmq/
│                           │   ├── AbstractInitializer.java
│                           │   ├── Exchange.java
│                           │   ├── ExchangeManager.java
│                           │   ├── MQDataInitializer.java
│                           │   ├── Queue.java
│                           │   ├── QueueManager.java
│                           │   └── RabbitmqServerManager.java
│                           └── util/
│                               └── ShellHelper.java
├── managesystem/
│   └── banyan_DB.sql
├── pom.xml
└── scenario/
    ├── pom.xml
    └── src/
        └── main/
            ├── java/
            │   └── com/
            │       └── messagebus/
            │           └── scenario/
            │               ├── client/
            │               │   ├── BroadcastSubscribe.java
            │               │   ├── ClientUnderMultiThread.java
            │               │   ├── ProduceConsume.java
            │               │   ├── PublishSubscribe.java
            │               │   ├── RequestResponse.java
            │               │   └── XSLTTestCase.java
            │               ├── httpBridge/
            │               │   ├── ProduceConsume.java
            │               │   ├── PublishSubscribe.java
            │               │   ├── RequestTemplate.java
            │               │   └── ResponseTemplate.java
            │               └── util/
            │                   └── PropertiesHelper.java
            └── resources/
                ├── common.properties
                ├── consumerSchema.xml
                ├── pToc.xsl
                ├── producerSchema.xml
                └── producerXml.xml
Download .txt
SYMBOL INDEX (1214 symbols across 145 files)

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/Benchmark.java
  class Benchmark (line 8) | public abstract class Benchmark {
    method test (line 12) | public void test(Runnable testTask, int holdTime, int fetchNum, String...

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/IFetcher.java
  type IFetcher (line 3) | public interface IFetcher {
    method fetch (line 5) | long fetch();

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/ILifeCycle.java
  type ILifeCycle (line 3) | public interface ILifeCycle {
    method start (line 5) | void start();
    method terminate (line 7) | void terminate();

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/TestConfigConstant.java
  class TestConfigConstant (line 3) | public class TestConfigConstant {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/TestMessageFactory.java
  class TestMessageFactory (line 7) | public class TestMessageFactory {
    method create (line 9) | public static Message create(MessageType type, int sizeOfByte) {
    method create (line 19) | public static Message[] create(MessageType type, int sizeOfByte, int n...
    method generate (line 29) | private static byte[] generate(int sizeOfByte) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/TestUtility.java
  class TestUtility (line 15) | public class TestUtility {
    method writeFile (line 19) | public static void writeFile(String fileName, long[] xArr, long[] yArr) {
    method exec (line 57) | public static void exec(String[] cmds, boolean hasOutput) {
    method produce (line 93) | public static void produce(long total) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/CalcService.java
  class CalcService (line 24) | @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
    type Iface (line 28) | public interface Iface {
      method calcSum (line 30) | public int calcSum() throws TException;
    type AsyncIface (line 34) | public interface AsyncIface {
      method calcSum (line 36) | public void calcSum(AsyncMethodCallback resultHandler) throws TExcep...
    class Client (line 40) | public static class Client extends org.apache.thrift.TServiceClient im...
      class Factory (line 41) | public static class Factory implements org.apache.thrift.TServiceCli...
        method Factory (line 42) | public Factory() {
        method getClient (line 45) | public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
        method getClient (line 49) | public Client getClient(org.apache.thrift.protocol.TProtocol iprot...
      method Client (line 54) | public Client(org.apache.thrift.protocol.TProtocol prot) {
      method Client (line 58) | public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache...
      method calcSum (line 62) | public int calcSum() throws TException {
      method send_calcSum (line 67) | public void send_calcSum() throws TException {
      method recv_calcSum (line 72) | public int recv_calcSum() throws TException {
    class AsyncClient (line 83) | public static class AsyncClient extends org.apache.thrift.async.TAsync...
      class Factory (line 84) | public static class Factory implements org.apache.thrift.async.TAsyn...
        method Factory (line 88) | public Factory(org.apache.thrift.async.TAsyncClientManager clientM...
        method getAsyncClient (line 93) | public AsyncClient getAsyncClient(org.apache.thrift.transport.TNon...
      method AsyncClient (line 98) | public AsyncClient(org.apache.thrift.protocol.TProtocolFactory proto...
      method calcSum (line 102) | public void calcSum(AsyncMethodCallback resultHandler) throws TExcep...
      class calcSum_call (line 109) | public static class calcSum_call extends org.apache.thrift.async.TAs...
        method calcSum_call (line 110) | public calcSum_call(AsyncMethodCallback resultHandler, org.apache....
        method write_args (line 114) | public void write_args(org.apache.thrift.protocol.TProtocol prot) ...
        method getResult (line 121) | public int getResult() throws TException {
    class Processor (line 133) | public static class Processor<I extends Iface> extends org.apache.thri...
      method Processor (line 136) | public Processor(I iface) {
      method Processor (line 140) | protected Processor(I iface, Map<String, org.apache.thrift.ProcessFu...
      method getProcessMap (line 144) | private static <I extends Iface> Map<String, org.apache.thrift.Proce...
      class calcSum (line 149) | public static class calcSum<I extends Iface> extends org.apache.thri...
        method calcSum (line 150) | public calcSum() {
        method getEmptyArgsInstance (line 154) | public calcSum_args getEmptyArgsInstance() {
        method isOneway (line 158) | protected boolean isOneway() {
        method getResult (line 162) | public calcSum_result getResult(I iface, calcSum_args args) throws...
    class AsyncProcessor (line 172) | public static class AsyncProcessor<I extends AsyncIface> extends org.a...
      method AsyncProcessor (line 175) | public AsyncProcessor(I iface) {
      method AsyncProcessor (line 179) | protected AsyncProcessor(I iface, Map<String, org.apache.thrift.Asyn...
      method getProcessMap (line 183) | private static <I extends AsyncIface> Map<String, org.apache.thrift....
      class calcSum (line 188) | public static class calcSum<I extends AsyncIface> extends org.apache...
        method calcSum (line 189) | public calcSum() {
        method getEmptyArgsInstance (line 193) | public calcSum_args getEmptyArgsInstance() {
        method getResultHandler (line 197) | public AsyncMethodCallback<Integer> getResultHandler(final AsyncFr...
        method isOneway (line 232) | protected boolean isOneway() {
        method start (line 236) | public void start(I iface, calcSum_args args, AsyncMethodCallback<...
    class calcSum_args (line 243) | public static class calcSum_args implements org.apache.thrift.TBase<ca...
      type _Fields (line 258) | public enum _Fields implements org.apache.thrift.TFieldIdEnum {
        method findByThriftId (line 272) | public static _Fields findByThriftId(int fieldId) {
        method findByThriftIdOrThrow (line 283) | public static _Fields findByThriftIdOrThrow(int fieldId) {
        method findByName (line 292) | public static _Fields findByName(String name) {
        method _Fields (line 299) | _Fields(short thriftId, String fieldName) {
        method getThriftFieldId (line 304) | public short getThriftFieldId() {
        method getFieldName (line 308) | public String getFieldName() {
      method calcSum_args (line 321) | public calcSum_args() {
      method calcSum_args (line 327) | public calcSum_args(calcSum_args other) {
      method deepCopy (line 330) | public calcSum_args deepCopy() {
      method clear (line 334) | @Override
      method setFieldValue (line 338) | public void setFieldValue(_Fields field, Object value) {
      method getFieldValue (line 343) | public Object getFieldValue(_Fields field) {
      method isSet (line 352) | public boolean isSet(_Fields field) {
      method equals (line 362) | @Override
      method equals (line 371) | public boolean equals(calcSum_args that) {
      method hashCode (line 378) | @Override
      method compareTo (line 385) | @Override
      method fieldForId (line 396) | public _Fields fieldForId(int fieldId) {
      method read (line 400) | public void read(org.apache.thrift.protocol.TProtocol iprot) throws ...
      method write (line 404) | public void write(org.apache.thrift.protocol.TProtocol oprot) throws...
      method toString (line 408) | @Override
      method validate (line 417) | public void validate() throws TException {
      method writeObject (line 422) | private void writeObject(java.io.ObjectOutputStream out) throws java...
      method readObject (line 430) | private void readObject(java.io.ObjectInputStream in) throws java.io...
      class calcSum_argsStandardSchemeFactory (line 438) | private static class calcSum_argsStandardSchemeFactory implements Sc...
        method getScheme (line 439) | public calcSum_argsStandardScheme getScheme() {
      class calcSum_argsStandardScheme (line 444) | private static class calcSum_argsStandardScheme extends StandardSche...
        method read (line 446) | public void read(org.apache.thrift.protocol.TProtocol iprot, calcS...
        method write (line 466) | public void write(org.apache.thrift.protocol.TProtocol oprot, calc...
      class calcSum_argsTupleSchemeFactory (line 476) | private static class calcSum_argsTupleSchemeFactory implements Schem...
        method getScheme (line 477) | public calcSum_argsTupleScheme getScheme() {
      class calcSum_argsTupleScheme (line 482) | private static class calcSum_argsTupleScheme extends TupleScheme<cal...
        method write (line 484) | @Override
        method read (line 489) | @Override
    class calcSum_result (line 497) | public static class calcSum_result implements org.apache.thrift.TBase<...
      type _Fields (line 514) | public enum _Fields implements org.apache.thrift.TFieldIdEnum {
        method findByThriftId (line 528) | public static _Fields findByThriftId(int fieldId) {
        method findByThriftIdOrThrow (line 541) | public static _Fields findByThriftIdOrThrow(int fieldId) {
        method findByName (line 550) | public static _Fields findByName(String name) {
        method _Fields (line 557) | _Fields(short thriftId, String fieldName) {
        method getThriftFieldId (line 562) | public short getThriftFieldId() {
        method getFieldName (line 566) | public String getFieldName() {
      method calcSum_result (line 584) | public calcSum_result() {
      method calcSum_result (line 587) | public calcSum_result(
      method calcSum_result (line 597) | public calcSum_result(calcSum_result other) {
      method deepCopy (line 602) | public calcSum_result deepCopy() {
      method clear (line 606) | @Override
      method getSuccess (line 612) | public int getSuccess() {
      method setSuccess (line 616) | public calcSum_result setSuccess(int success) {
      method unsetSuccess (line 622) | public void unsetSuccess() {
      method isSetSuccess (line 629) | public boolean isSetSuccess() {
      method setSuccessIsSet (line 633) | public void setSuccessIsSet(boolean value) {
      method setFieldValue (line 637) | public void setFieldValue(_Fields field, Object value) {
      method getFieldValue (line 650) | public Object getFieldValue(_Fields field) {
      method isSet (line 662) | public boolean isSet(_Fields field) {
      method equals (line 674) | @Override
      method equals (line 683) | public boolean equals(calcSum_result that) {
      method hashCode (line 699) | @Override
      method compareTo (line 711) | @Override
      method fieldForId (line 732) | public _Fields fieldForId(int fieldId) {
      method read (line 736) | public void read(org.apache.thrift.protocol.TProtocol iprot) throws ...
      method write (line 740) | public void write(org.apache.thrift.protocol.TProtocol oprot) throws...
      method toString (line 744) | @Override
      method validate (line 756) | public void validate() throws TException {
      method writeObject (line 761) | private void writeObject(java.io.ObjectOutputStream out) throws java...
      method readObject (line 769) | private void readObject(java.io.ObjectInputStream in) throws java.io...
      class calcSum_resultStandardSchemeFactory (line 779) | private static class calcSum_resultStandardSchemeFactory implements ...
        method getScheme (line 780) | public calcSum_resultStandardScheme getScheme() {
      class calcSum_resultStandardScheme (line 785) | private static class calcSum_resultStandardScheme extends StandardSc...
        method read (line 787) | public void read(org.apache.thrift.protocol.TProtocol iprot, calcS...
        method write (line 815) | public void write(org.apache.thrift.protocol.TProtocol oprot, calc...
      class calcSum_resultTupleSchemeFactory (line 830) | private static class calcSum_resultTupleSchemeFactory implements Sch...
        method getScheme (line 831) | public calcSum_resultTupleScheme getScheme() {
      class calcSum_resultTupleScheme (line 836) | private static class calcSum_resultTupleScheme extends TupleScheme<c...
        method write (line 838) | @Override
        method read (line 851) | @Override

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ConsumeTestCase.java
  class ConsumeTestCase (line 15) | public class ConsumeTestCase extends Benchmark {
    class BasicConsume (line 19) | private static class BasicConsume implements Runnable, ILifeCycle, IFe...
      method BasicConsume (line 26) | private BasicConsume() {
      method fetch (line 33) | @Override
      method start (line 38) | @Override
      method terminate (line 43) | @Override
      method run (line 49) | @Override
    method main (line 68) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/MessagebusJSONRpcTestCase.java
  class MessagebusJSONRpcTestCase (line 23) | public class MessagebusJSONRpcTestCase extends Benchmark {
    class OriginalJSONRpc (line 27) | public static class OriginalJSONRpc implements Runnable, ILifeCycle, I...
      method OriginalJSONRpc (line 40) | public OriginalJSONRpc() {
      method run (line 47) | @Override
      method start (line 62) | @Override
      method terminate (line 67) | @Override
      method fetch (line 73) | @Override
    class ThriftJSONRpc (line 79) | public static class ThriftJSONRpc implements Runnable, ILifeCycle, IFe...
      method ThriftJSONRpc (line 93) | public ThriftJSONRpc() {
      method fetch (line 100) | @Override
      method start (line 105) | @Override
      method terminate (line 110) | @Override
      method run (line 116) | @Override
    method main (line 143) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalConsumeTestCase.java
  class OriginalConsumeTestCase (line 21) | public class OriginalConsumeTestCase extends Benchmark {
    class BasicConsume (line 25) | public static class BasicConsume extends AbstractInitializer implement...
      method BasicConsume (line 33) | public BasicConsume(String host) {
      method fetch (line 39) | @Override
      method start (line 44) | @Override
      method terminate (line 49) | @Override
      method run (line 54) | @Override
      method initMessage (line 101) | private void initMessage(Message msg, MessageType msgType, AMQP.Basi...
      method getRealQueueName (line 106) | public String getRealQueueName() {
      method setRealQueueName (line 110) | public void setRealQueueName(String realQueueName) {
    method main (line 115) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalProduceTestCase.java
  class OriginalProduceTestCase (line 17) | public class OriginalProduceTestCase extends Benchmark {
    class BasicProduce (line 21) | private static class BasicProduce extends AbstractInitializer implemen...
      method BasicProduce (line 29) | private BasicProduce(String host, int msgBodySize) {
      method start (line 36) | @Override
      method terminate (line 41) | @Override
      method run (line 46) | @Override
      method fetch (line 70) | @Override
      method getRoutingkey (line 75) | public String getRoutingkey() {
      method setRoutingkey (line 79) | public void setRoutingkey(String routingkey) {
    method main (line 84) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalProduceWithoutTopologyTestCase.java
  class OriginalProduceWithoutTopologyTestCase (line 19) | public class OriginalProduceWithoutTopologyTestCase extends Benchmark {
    class BasicProduce (line 23) | private static class BasicProduce extends AbstractInitializer implemen...
      method BasicProduce (line 31) | private BasicProduce(String host, int msgBodySize) {
      method start (line 38) | @Override
      method terminate (line 43) | @Override
      method run (line 48) | @Override
      method fetch (line 72) | @Override
      method getRoutingkey (line 77) | public String getRoutingkey() {
      method setRoutingkey (line 81) | public void setRoutingkey(String routingkey) {
    method main (line 86) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceRemainLogTestCase.java
  class ProduceRemainLogTestCase (line 17) | public class ProduceRemainLogTestCase extends Benchmark {
    class BasicProduce (line 21) | private static class BasicProduce implements Runnable, ILifeCycle, IFe...
      method BasicProduce (line 30) | private BasicProduce(int msgBodySize) {
      method run (line 38) | @Override
      method start (line 53) | @Override
      method terminate (line 58) | @Override
      method fetch (line 64) | @Override
    method main (line 70) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceTestCase.java
  class ProduceTestCase (line 14) | public class ProduceTestCase extends Benchmark {
    class BasicProduce (line 18) | private static class BasicProduce implements Runnable, ILifeCycle, IFe...
      method BasicProduce (line 27) | private BasicProduce(int msgBodySize) {
      method run (line 35) | @Override
      method start (line 50) | @Override
      method terminate (line 55) | @Override
      method fetch (line 61) | @Override
    method main (line 67) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceWithoutLogTestCase.java
  class ProduceWithoutLogTestCase (line 17) | public class ProduceWithoutLogTestCase extends Benchmark {
    class BasicProduce (line 21) | private static class BasicProduce implements Runnable, ILifeCycle, IFe...
      method BasicProduce (line 30) | private BasicProduce(int msgBodySize) {
      method run (line 38) | @Override
      method start (line 53) | @Override
      method terminate (line 58) | @Override
      method fetch (line 64) | @Override
    method main (line 70) | public static void main(String[] args) {

FILE: benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ThriftJSONRpcTestCase.java
  class ThriftJSONRpcTestCase (line 19) | public class ThriftJSONRpcTestCase extends Benchmark {
    class JSONRpc (line 23) | public static class JSONRpc implements Runnable, ILifeCycle, IFetcher {
      method JSONRpc (line 29) | public JSONRpc() {
      method fetch (line 34) | @Override
      method start (line 39) | @Override
      method terminate (line 44) | @Override
      method run (line 50) | @Override
    class BinaryRpc (line 72) | public static class BinaryRpc implements Runnable, ILifeCycle, IFetcher {
      method BinaryRpc (line 78) | public BinaryRpc() {
      method fetch (line 83) | @Override
      method start (line 88) | @Override
      method terminate (line 93) | @Override
      method run (line 99) | @Override
    method main (line 120) | public static void main(String[] args) {

FILE: client/src/main/java/com/messagebus/client/AbstractPool.java
  class AbstractPool (line 15) | abstract class AbstractPool<T> {
    method AbstractPool (line 21) | public AbstractPool(final GenericObjectPoolConfig poolConfig,
    method initPool (line 26) | private void initPool(final GenericObjectPoolConfig poolConfig,
    method getResource (line 35) | public T getResource() {
    method returnResourceObject (line 44) | public void returnResourceObject(final T resource) {
    method returnBrokenResource (line 48) | public void returnBrokenResource(final T resource) {
    method returnResource (line 52) | public void returnResource(final T resource) {
    method destroy (line 56) | public void destroy() {
    method returnBrokenResourceObject (line 60) | protected void returnBrokenResourceObject(final T resource) {
    method closeInternalPool (line 68) | protected void closeInternalPool() {

FILE: client/src/main/java/com/messagebus/client/Address.java
  class Address (line 8) | public class Address implements Serializable {
    method Address (line 13) | public Address() {
    method getHost (line 16) | public String getHost() {
    method setHost (line 20) | public void setHost(String host) {
    method getPort (line 24) | public int getPort() {
    method setPort (line 28) | public void setPort(int port) {

FILE: client/src/main/java/com/messagebus/client/ConfigManager.java
  class ConfigManager (line 19) | public class ConfigManager {
    method ConfigManager (line 46) | public ConfigManager(CuratorFramework zookeeper) {
    method getComponentEventBus (line 98) | public EventBus getComponentEventBus() {
    method setComponentEventBus (line 102) | public void setComponentEventBus(EventBus componentEventBus) {
    method getSourceBySecret (line 106) | public Source getSourceBySecret(String secret) {
    method getSourceByName (line 121) | public Source getSourceByName(String name) {
    method getSinkBySecret (line 136) | public Sink getSinkBySecret(String secret) {
    method getSinkByName (line 151) | public Sink getSinkByName(String name) {
    method getStreamByToken (line 166) | public Stream getStreamByToken(String token) {
    method refreshSourceCache (line 181) | private void refreshSourceCache(boolean bySecret) {
    method refreshSinkCache (line 197) | private void refreshSinkCache(boolean bySecret) {
    method refreshStreamCache (line 213) | private void refreshStreamCache() {
    class Source (line 221) | public static class Source {
      method Source (line 230) | public Source() {
      method getSecret (line 233) | public String getSecret() {
      method setSecret (line 237) | public void setSecret(String secret) {
      method getName (line 241) | public String getName() {
      method setName (line 245) | public void setName(String name) {
      method getType (line 249) | public String getType() {
      method setType (line 253) | public void setType(String type) {
      method getAppId (line 257) | public String getAppId() {
      method setAppId (line 261) | public void setAppId(String appId) {
      method getBroadcastable (line 265) | public String getBroadcastable() {
      method setBroadcastable (line 269) | public void setBroadcastable(String broadcastable) {
      method getRoutingKey (line 273) | public String getRoutingKey() {
      method setRoutingKey (line 277) | public void setRoutingKey(String routingKey) {
    class Sink (line 282) | public static class Sink {
      method Sink (line 292) | public Sink() {
      method getSecret (line 295) | public String getSecret() {
      method setSecret (line 299) | public void setSecret(String secret) {
      method getName (line 303) | public String getName() {
      method setName (line 307) | public void setName(String name) {
      method getQueueName (line 311) | public String getQueueName() {
      method setQueueName (line 315) | public void setQueueName(String queueName) {
      method getRoutingKey (line 319) | public String getRoutingKey() {
      method setRoutingKey (line 323) | public void setRoutingKey(String routingKey) {
      method getType (line 327) | public String getType() {
      method setType (line 331) | public void setType(String type) {
      method getAppId (line 335) | public String getAppId() {
      method setAppId (line 339) | public void setAppId(String appId) {
      method isAutoAck (line 343) | public boolean isAutoAck() {
      method setAutoAck (line 347) | public void setAutoAck(String autoAck) {
      method getMsgBodySize (line 351) | public String getMsgBodySize() {
      method setMsgBodySize (line 355) | public void setMsgBodySize(String msgBodySize) {
    class Stream (line 360) | public static class Stream {
      method Stream (line 367) | public Stream() {
      method getSourceSecret (line 370) | public String getSourceSecret() {
      method setSourceSecret (line 374) | public void setSourceSecret(String sourceSecret) {
      method getSourceName (line 378) | public String getSourceName() {
      method setSourceName (line 382) | public void setSourceName(String sourceName) {
      method getSinkSecret (line 386) | public String getSinkSecret() {
      method setSinkSecret (line 390) | public void setSinkSecret(String sinkSecret) {
      method getSinkName (line 394) | public String getSinkName() {
      method setSinkName (line 398) | public void setSinkName(String sinkName) {
      method getToken (line 402) | public String getToken() {
      method setToken (line 406) | public void setToken(String token) {
    method getDataFromZK (line 411) | private String getDataFromZK(String path) {
    method onPathChildrenChanged (line 422) | private void onPathChildrenChanged(String path) {

FILE: client/src/main/java/com/messagebus/client/GenericContext.java
  class GenericContext (line 11) | public class GenericContext {
    method GenericContext (line 20) | public GenericContext() {
    method getConfigManager (line 23) | public ConfigManager getConfigManager() {
    method setConfigManager (line 27) | public void setConfigManager(ConfigManager configManager) {
    method getChannel (line 31) | public Channel getChannel() {
    method setChannel (line 35) | public void setChannel(Channel channel) {
    method getConnection (line 39) | public Connection getConnection() {
    method setConnection (line 43) | public void setConnection(Connection connection) {
    method getCarryEventBus (line 47) | public EventBus getCarryEventBus() {
    method setCarryEventBus (line 51) | public void setCarryEventBus(EventBus carryEventBus) {
    method getComponentEventBus (line 55) | public EventBus getComponentEventBus() {
    method setComponentEventBus (line 59) | public void setComponentEventBus(EventBus componentEventBus) {
    method toString (line 63) | @Override

FILE: client/src/main/java/com/messagebus/client/IMessageReceiveListener.java
  type IMessageReceiveListener (line 8) | public interface IMessageReceiveListener {
    method onMessage (line 10) | public void onMessage(Message message);

FILE: client/src/main/java/com/messagebus/client/IRequestListener.java
  type IRequestListener (line 8) | public interface IRequestListener {
    method onRequest (line 10) | public Message onRequest(Message requestMsg);

FILE: client/src/main/java/com/messagebus/client/IRpcMessageProcessor.java
  type IRpcMessageProcessor (line 6) | public interface IRpcMessageProcessor {
    method onRpcMessage (line 8) | public byte[] onRpcMessage(byte[] in);

FILE: client/src/main/java/com/messagebus/client/InnerClient.java
  class InnerClient (line 18) | abstract class InnerClient {
    method InnerClient (line 32) | public InnerClient() {
    method open (line 36) | private void open() {
    method close (line 60) | private void close() {
    method isOpen (line 85) | public boolean isOpen() {

FILE: client/src/main/java/com/messagebus/client/InnerPool.java
  class InnerPool (line 10) | class InnerPool extends AbstractPool<Messagebus> {
    method InnerPool (line 12) | public InnerPool(GenericObjectPoolConfig poolConfig,
    class DefaultMessagebusPool (line 26) | private static class DefaultMessagebusPool extends GenericObjectPoolCo...
      method DefaultMessagebusPool (line 28) | public DefaultMessagebusPool() {

FILE: client/src/main/java/com/messagebus/client/MessageContext.java
  class MessageContext (line 18) | public class MessageContext {
    method MessageContext (line 49) | public MessageContext() {
    method getHost (line 52) | public String getHost() {
    method setHost (line 56) | public void setHost(String host) {
    method getSecret (line 60) | public String getSecret() {
    method setSecret (line 64) | public void setSecret(String secret) {
    method getToken (line 68) | public String getToken() {
    method setToken (line 72) | public void setToken(String token) {
    method isEnableTransaction (line 76) | public boolean isEnableTransaction() {
    method setEnableTransaction (line 80) | public void setEnableTransaction(boolean enableTransaction) {
    method getMessages (line 84) | public Message[] getMessages() {
    method setMessages (line 88) | public void setMessages(Message[] messages) {
    method getChannel (line 92) | public Channel getChannel() {
    method setChannel (line 96) | public void setChannel(Channel channel) {
    method getCarryType (line 100) | public MessageCarryType getCarryType() {
    method setCarryType (line 104) | public void setCarryType(MessageCarryType carryType) {
    method getSink (line 108) | public ConfigManager.Sink getSink() {
    method setSink (line 112) | public void setSink(ConfigManager.Sink sink) {
    method getSource (line 116) | public ConfigManager.Source getSource() {
    method setSource (line 120) | public void setSource(ConfigManager.Source source) {
    method getStream (line 124) | public ConfigManager.Stream getStream() {
    method setStream (line 128) | public void setStream(ConfigManager.Stream stream) {
    method getOtherParams (line 132) | public Map<String, Object> getOtherParams() {
    method getReceiveListener (line 136) | public IMessageReceiveListener getReceiveListener() {
    method setReceiveListener (line 140) | public void setReceiveListener(IMessageReceiveListener receiveListener) {
    method getTimeout (line 144) | public long getTimeout() {
    method setTimeout (line 148) | public void setTimeout(long timeout) {
    method getTimeoutUnit (line 152) | public TimeUnit getTimeoutUnit() {
    method setTimeoutUnit (line 156) | public void setTimeoutUnit(TimeUnit timeoutUnit) {
    method isTimeout (line 160) | public boolean isTimeout() {
    method setIsTimeout (line 164) | public void setIsTimeout(boolean hasTimeout) {
    method getTempQueueName (line 168) | public String getTempQueueName() {
    method setTempQueueName (line 172) | public void setTempQueueName(String tempQueueName) {
    method getConsumeMsgNum (line 176) | public int getConsumeMsgNum() {
    method setConsumeMsgNum (line 180) | public void setConsumeMsgNum(int consumeMsgNum) {
    method getConsumeMsgs (line 184) | public List<Message> getConsumeMsgs() {
    method setConsumeMsgs (line 188) | public void setConsumeMsgs(List<Message> consumeMsgs) {
    method isSync (line 192) | public boolean isSync() {
    method setSync (line 196) | public void setSync(boolean isSync) {
    method getConsumerTag (line 200) | public String getConsumerTag() {
    method setConsumerTag (line 204) | public void setConsumerTag(String consumerTag) {
    method getConfigManager (line 208) | public ConfigManager getConfigManager() {
    method setConfigManager (line 212) | public void setConfigManager(ConfigManager configManager) {
    method getRequestListener (line 216) | public IRequestListener getRequestListener() {
    method setRequestListener (line 220) | public void setRequestListener(IRequestListener requestListener) {
    method getCarryEventBus (line 224) | public EventBus getCarryEventBus() {
    method setCarryEventBus (line 228) | public void setCarryEventBus(EventBus carryEventBus) {
    method getThrowable (line 232) | public Throwable getThrowable() {
    method setThrowable (line 236) | public void setThrowable(Throwable throwable) {
    method toString (line 240) | @Override

FILE: client/src/main/java/com/messagebus/client/MessageResponseTimeoutException.java
  class MessageResponseTimeoutException (line 3) | public class MessageResponseTimeoutException extends RuntimeException {
    method MessageResponseTimeoutException (line 5) | public MessageResponseTimeoutException() {
    method MessageResponseTimeoutException (line 9) | public MessageResponseTimeoutException(String message) {
    method MessageResponseTimeoutException (line 13) | public MessageResponseTimeoutException(String message, Throwable cause) {
    method MessageResponseTimeoutException (line 17) | public MessageResponseTimeoutException(Throwable cause) {

FILE: client/src/main/java/com/messagebus/client/Messagebus.java
  class Messagebus (line 14) | public class Messagebus extends InnerClient implements IProducer, IConsu...
    method Messagebus (line 32) | private Messagebus() {
    method produce (line 54) | @Override
    method batchProduce (line 67) | @Override
    method consume (line 86) | @Override
    method consume (line 99) | @Override
    method request (line 119) | @Override
    method response (line 136) | @Override
    method publish (line 147) | @Override
    method subscribe (line 165) | @Override
    method broadcast (line 176) | @Override
    method setNotificationListener (line 188) | @Deprecated
    method call (line 205) | @Override
    method callback (line 223) | @Override
    method primitiveRequest (line 241) | @Override
    method buildRpcServer (line 254) | @Override
    method registerEventProcessor (line 264) | public void registerEventProcessor(Object eventProcessor) {
    method unregisterEventProcessor (line 274) | public void unregisterEventProcessor(Object eventProcessor) {

FILE: client/src/main/java/com/messagebus/client/MessagebusConnectedFailedException.java
  class MessagebusConnectedFailedException (line 6) | public class MessagebusConnectedFailedException extends Exception {
    method MessagebusConnectedFailedException (line 8) | public MessagebusConnectedFailedException() {
    method MessagebusConnectedFailedException (line 12) | public MessagebusConnectedFailedException(String message) {
    method MessagebusConnectedFailedException (line 16) | public MessagebusConnectedFailedException(String message, Throwable ca...
    method MessagebusConnectedFailedException (line 20) | public MessagebusConnectedFailedException(Throwable cause) {

FILE: client/src/main/java/com/messagebus/client/MessagebusFactory.java
  class MessagebusFactory (line 20) | class MessagebusFactory implements PooledObjectFactory<Messagebus> {
    method MessagebusFactory (line 31) | public MessagebusFactory(ConfigManager configManager,
    method makeObject (line 48) | @Override
    method destroyObject (line 78) | @Override
    method validateObject (line 88) | @Override
    method activateObject (line 104) | @Override
    method passivateObject (line 109) | @Override

FILE: client/src/main/java/com/messagebus/client/MessagebusPool.java
  class MessagebusPool (line 32) | public class MessagebusPool {
    method MessagebusPool (line 55) | public MessagebusPool(String zkConnectionStr,
    method registerComponentEventListener (line 64) | public void registerComponentEventListener(Object listener) {
    method getResource (line 68) | public Messagebus getResource() {
    method returnResource (line 72) | public void returnResource(Messagebus client) {
    method destroy (line 76) | public void destroy() {
    method init (line 106) | protected void init(String zkConnectionStr) {
    method registerComponentEventProcessor (line 168) | private void registerComponentEventProcessor() {
    class RemoteNoticeListener (line 173) | private class RemoteNoticeListener implements Runnable {
      method RemoteNoticeListener (line 177) | public RemoteNoticeListener() {
      method run (line 183) | @Override
      method start (line 221) | public void start() {
      method shutdown (line 225) | public void shutdown() {

FILE: client/src/main/java/com/messagebus/client/MessagebusSinglePool.java
  class MessagebusSinglePool (line 8) | public class MessagebusSinglePool extends MessagebusPool {
    method MessagebusSinglePool (line 10) | public MessagebusSinglePool(String zkConnectionStr) {
    class DefaultMessagebusPoolConfig (line 17) | private static class DefaultMessagebusPoolConfig extends GenericObject...
      method DefaultMessagebusPoolConfig (line 19) | public DefaultMessagebusPoolConfig() {

FILE: client/src/main/java/com/messagebus/client/MessagebusUnOpenException.java
  class MessagebusUnOpenException (line 6) | public class MessagebusUnOpenException extends RuntimeException {
    method MessagebusUnOpenException (line 8) | public MessagebusUnOpenException() {
    method MessagebusUnOpenException (line 12) | public MessagebusUnOpenException(String message) {
    method MessagebusUnOpenException (line 16) | public MessagebusUnOpenException(String message, Throwable cause) {
    method MessagebusUnOpenException (line 20) | public MessagebusUnOpenException(Throwable cause) {

FILE: client/src/main/java/com/messagebus/client/WrappedRpcServer.java
  class WrappedRpcServer (line 13) | public class WrappedRpcServer {
    method WrappedRpcServer (line 19) | private WrappedRpcServer(RpcServer rpcServer) {
    method mainLoop (line 23) | public void mainLoop() {
    method terminateMainloop (line 32) | public void terminateMainloop() {
    method close (line 36) | public void close() {

FILE: client/src/main/java/com/messagebus/client/carry/AbstractMessageCarryer.java
  class AbstractMessageCarryer (line 10) | abstract class AbstractMessageCarryer {
    method initMessageContext (line 14) | protected MessageContext initMessageContext() {
    method getContext (line 24) | public GenericContext getContext() {
    method setContext (line 28) | public void setContext(GenericContext context) {

FILE: client/src/main/java/com/messagebus/client/carry/CarryFactory.java
  class CarryFactory (line 8) | public class CarryFactory {
    method createBroadcaster (line 10) | public static IBroadcaster createBroadcaster(GenericContext context) {
    method createConsumer (line 17) | public static IConsumer createConsumer(GenericContext context) {
    method createProducer (line 24) | public static IProducer createProducer(GenericContext context) {
    method createPublisher (line 31) | public static IPublisher createPublisher(GenericContext context) {
    method createRequester (line 38) | public static IRequester createRequester(GenericContext context) {
    method createResponser (line 45) | public static IResponser createResponser(GenericContext context) {
    method createRpcRequester (line 52) | public static IRpcRequester createRpcRequester(GenericContext context) {
    method createRpcResponser (line 59) | public static IRpcResponser createRpcResponser(GenericContext context) {
    method createSubscriber (line 66) | public static ISubscriber createSubscriber(GenericContext context) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericBroadcaster.java
  class GenericBroadcaster (line 12) | class GenericBroadcaster extends AbstractMessageCarryer implements IBroa...
    method GenericBroadcaster (line 16) | public GenericBroadcaster() {
    method broadcast (line 19) | @Override
    method innerBroadcast (line 30) | private void innerBroadcast(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericConsumer.java
  class GenericConsumer (line 19) | class GenericConsumer extends AbstractMessageCarryer implements IConsumer {
    method consume (line 23) | @Override
    method consume (line 38) | @Override
    method innerConsume (line 52) | private void innerConsume(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericProducer.java
  class GenericProducer (line 15) | class GenericProducer extends AbstractMessageCarryer implements IProducer {
    method produce (line 27) | @Override
    method batchProduce (line 42) | @Override
    method initMsgContext (line 49) | private MessageContext initMsgContext(String secret, String to, String...
    method innerProduce (line 62) | private void innerProduce(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericPublisher.java
  class GenericPublisher (line 12) | class GenericPublisher extends AbstractMessageCarryer implements IPublis...
    method GenericPublisher (line 16) | public GenericPublisher() {
    method publish (line 19) | @Override
    method innerPublish (line 30) | private void innerPublish(MessageContext context) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericRequester.java
  class GenericRequester (line 20) | class GenericRequester extends AbstractMessageCarryer implements IReques...
    method GenericRequester (line 24) | public GenericRequester() {
    method request (line 37) | @Override
    method primitiveRequest (line 59) | @Override
    method innerRequest (line 91) | private void innerRequest(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericResponser.java
  class GenericResponser (line 14) | class GenericResponser extends AbstractMessageCarryer implements IRespon...
    method response (line 18) | @Override
    method innerResponse (line 31) | private void innerResponse(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericRpcRequester.java
  class GenericRpcRequester (line 15) | public class GenericRpcRequester extends AbstractMessageCarryer implemen...
    method GenericRpcRequester (line 19) | public GenericRpcRequester() {
    method call (line 22) | @Override
    method innerRpcRequest (line 41) | private void innerRpcRequest(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericRpcResponser.java
  class GenericRpcResponser (line 25) | public class GenericRpcResponser extends AbstractMessageCarryer implemen...
    method GenericRpcResponser (line 29) | public GenericRpcResponser() {
    method callback (line 32) | @Override
    method buildRpcServer (line 47) | @Override
    method innerRpcResponse (line 87) | private void innerRpcResponse(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/GenericSubscriber.java
  class GenericSubscriber (line 14) | class GenericSubscriber extends AbstractMessageCarryer implements ISubsc...
    method GenericSubscriber (line 18) | public GenericSubscriber() {
    method subscribe (line 21) | @Override
    method innerSubscribe (line 41) | private void innerSubscribe(MessageContext ctx) {

FILE: client/src/main/java/com/messagebus/client/carry/IBroadcaster.java
  type IBroadcaster (line 5) | public interface IBroadcaster {
    method broadcast (line 7) | public void broadcast(String secret, Message[] msgs);

FILE: client/src/main/java/com/messagebus/client/carry/IConsumer.java
  type IConsumer (line 12) | public interface IConsumer {
    method consume (line 14) | public void consume(String secret, long timeout, TimeUnit unit, IMessa...
    method consume (line 16) | public List<Message> consume(String secret, int expectedNum);

FILE: client/src/main/java/com/messagebus/client/carry/IProducer.java
  type IProducer (line 8) | public interface IProducer {
    method produce (line 10) | public void produce(String secret, String to, Message msg, String token);
    method batchProduce (line 12) | public void batchProduce(String secret, String to, Message[] msgs, Str...

FILE: client/src/main/java/com/messagebus/client/carry/IPublisher.java
  type IPublisher (line 5) | public interface IPublisher {
    method publish (line 7) | public void publish(String secret, Message[] msgs);

FILE: client/src/main/java/com/messagebus/client/carry/IRequester.java
  type IRequester (line 6) | public interface IRequester {
    method request (line 8) | public Message request(String secret, String to, Message msg, String t...
    method primitiveRequest (line 11) | public byte[] primitiveRequest(String secret, String target, byte[] re...

FILE: client/src/main/java/com/messagebus/client/carry/IResponser.java
  type IResponser (line 8) | public interface IResponser {
    method response (line 21) | public void response(String secret, IRequestListener onRequest, long t...

FILE: client/src/main/java/com/messagebus/client/carry/IRpcRequester.java
  type IRpcRequester (line 6) | public interface IRpcRequester {
    method call (line 8) | public Object call(String secret, String target, String methodName, Ob...

FILE: client/src/main/java/com/messagebus/client/carry/IRpcResponser.java
  type IRpcResponser (line 11) | public interface IRpcResponser {
    method callback (line 13) | public void callback(String secret, Class<?> clazzOfInterface, Object ...
    method buildRpcServer (line 15) | public WrappedRpcServer buildRpcServer(String secret, IRpcMessageProce...

FILE: client/src/main/java/com/messagebus/client/carry/ISubscriber.java
  type ISubscriber (line 10) | public interface ISubscriber {
    method subscribe (line 12) | public void subscribe(String secret,

FILE: client/src/main/java/com/messagebus/client/event/carry/BroadcastEventProcessor.java
  class BroadcastEventProcessor (line 24) | public class BroadcastEventProcessor extends CommonEventProcessor {
    method onValidate (line 30) | @Subscribe
    method onPermissionCheck (line 45) | @Subscribe
    method onBroadcast (line 61) | @Subscribe
    method process (line 88) | @Override
    method validateMessageProperties (line 93) | private void validateMessageProperties(MessageContext context) {
    class ValidateEvent (line 106) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 109) | public static class PermissionCheckEvent extends CarryEvent {
    class BroadcastEvent (line 112) | public static class BroadcastEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/CarryEvent.java
  class CarryEvent (line 9) | public class CarryEvent extends Event {
    method getMessageContext (line 13) | public MessageContext getMessageContext() {
    method setMessageContext (line 17) | public void setMessageContext(MessageContext messageContext) {

FILE: client/src/main/java/com/messagebus/client/event/carry/CommonEventProcessor.java
  class CommonEventProcessor (line 27) | public abstract class CommonEventProcessor {
    method onValidate (line 33) | protected void onValidate(CarryEvent event) {
    method exceptionCheck (line 37) | protected void exceptionCheck(CarryEvent event) {
    method onMsgIdGenerate (line 42) | @Subscribe
    method onMsgBodySizeCheck (line 56) | @Subscribe
    method onTagGenerate (line 83) | @Subscribe
    method onMsgBodyCompress (line 92) | @Subscribe
    method onPreConsume (line 115) | @Subscribe
    method onAsyncMessageLoop (line 140) | @Subscribe
    method process (line 175) | public abstract void process(MessageContext msgContext);
    class MsgIdGenerateEvent (line 177) | public static class MsgIdGenerateEvent extends CarryEvent {
    class TagGenerateEvent (line 180) | public static class TagGenerateEvent extends CarryEvent {
    class PreConsumeEvent (line 183) | public static class PreConsumeEvent extends CarryEvent {
    class MsgBodyCompressEvent (line 186) | public static class MsgBodyCompressEvent extends CarryEvent {
    class MsgBodySizeCheckEvent (line 189) | public static class MsgBodySizeCheckEvent extends CarryEvent {
    class AsyncMessageLoopEvent (line 192) | public static class AsyncMessageLoopEvent extends CarryEvent {
    class MessageLoopTask (line 199) | private class MessageLoopTask implements Runnable {
      method MessageLoopTask (line 203) | public MessageLoopTask(MessageContext msgContext) {
      method run (line 207) | @Override
    method validateMessagesProperties (line 247) | protected void validateMessagesProperties(MessageContext context) {
    method doUncompress (line 260) | protected void doUncompress(MessageContext context, Message receivedMs...

FILE: client/src/main/java/com/messagebus/client/event/carry/ConsumeEventProcessor.java
  class ConsumeEventProcessor (line 23) | public class ConsumeEventProcessor extends CommonEventProcessor {
    method onValidate (line 27) | @Subscribe
    method onPermissionCheck (line 34) | @Subscribe
    method onSyncConsume (line 55) | @Subscribe
    method process (line 89) | @Override
    class ValidateEvent (line 95) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 98) | public static class PermissionCheckEvent extends CarryEvent {
    class SyncConsumeEvent (line 101) | public static class SyncConsumeEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/ProduceEventProcessor.java
  class ProduceEventProcessor (line 20) | public class ProduceEventProcessor extends CommonEventProcessor {
    method ProduceEventProcessor (line 24) | public ProduceEventProcessor() {
    method onValidate (line 27) | @Subscribe
    method onPermissionCheckEvent (line 68) | @Subscribe
    method onProduce (line 91) | @Subscribe
    method process (line 126) | @Override
    class ValidateEvent (line 132) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 136) | public static class PermissionCheckEvent extends CarryEvent {
    class ProduceEvent (line 139) | public static class ProduceEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/PublishEventProcessor.java
  class PublishEventProcessor (line 20) | public class PublishEventProcessor extends CommonEventProcessor {
    method PublishEventProcessor (line 24) | public PublishEventProcessor() {
    method onValidate (line 27) | @Subscribe
    method onPermissionCheck (line 42) | @Subscribe
    method onPublish (line 60) | @Subscribe
    method process (line 84) | @Override
    class ValidateEvent (line 90) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 93) | public static class PermissionCheckEvent extends CarryEvent {
    class PublishEvent (line 96) | public static class PublishEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/RequestEventProcessor.java
  class RequestEventProcessor (line 25) | public class RequestEventProcessor extends CommonEventProcessor {
    method RequestEventProcessor (line 29) | public RequestEventProcessor() {
    method onValidate (line 32) | @Subscribe
    method onPermissionCheck (line 71) | @Subscribe
    method onTempQueueInitialize (line 96) | @Subscribe
    method onRequest (line 115) | @Subscribe
    method onBlockAndTimeout (line 137) | @Subscribe
    method process (line 185) | @Override
    class ValidateEvent (line 191) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 194) | public static class PermissionCheckEvent extends CarryEvent {
    class TempQueueInitializeEvent (line 197) | public static class TempQueueInitializeEvent extends CarryEvent {
    class RequestEvent (line 200) | public static class RequestEvent extends CarryEvent {
    class BlockAndTimeoutResponseEvent (line 203) | public static class BlockAndTimeoutResponseEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/ResponseEventProcessor.java
  class ResponseEventProcessor (line 20) | public class ResponseEventProcessor extends CommonEventProcessor {
    method ResponseEventProcessor (line 24) | public ResponseEventProcessor() {
    method onValidate (line 27) | @Subscribe
    method onPermissionCheck (line 40) | @Subscribe
    method process (line 58) | @Override
    class ValidateEvent (line 82) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 85) | public static class PermissionCheckEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/RpcRequestEventProcessor.java
  class RpcRequestEventProcessor (line 18) | public class RpcRequestEventProcessor extends CommonEventProcessor {
    method RpcRequestEventProcessor (line 22) | public RpcRequestEventProcessor() {
    method onPermissionCheck (line 25) | @Subscribe
    method onRpcRequest (line 46) | @Subscribe
    method process (line 80) | @Override
    class PermissionCheckEvent (line 85) | public static class PermissionCheckEvent extends CarryEvent {
    class RpcRequestEvent (line 88) | public static class RpcRequestEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/carry/RpcResponseEventProcessor.java
  class RpcResponseEventProcessor (line 16) | public class RpcResponseEventProcessor extends CommonEventProcessor {
    method RpcResponseEventProcessor (line 20) | public RpcResponseEventProcessor() {
    method onRpcResponse (line 23) | @Subscribe
    method process (line 45) | @Override
    class RpcResponseEvent (line 50) | public static class RpcResponseEvent extends CarryEvent {
    class RpcServerLoopTask (line 56) | private class RpcServerLoopTask implements Runnable {
      method RpcServerLoopTask (line 60) | public RpcServerLoopTask(MessageContext msgContext) {
      method run (line 64) | @Override

FILE: client/src/main/java/com/messagebus/client/event/carry/SubscribeEventProcessor.java
  class SubscribeEventProcessor (line 15) | public class SubscribeEventProcessor extends CommonEventProcessor {
    method onValidate (line 19) | @Subscribe
    method onPermissionCheck (line 26) | @Subscribe
    method process (line 47) | @Override
    class ValidateEvent (line 54) | public static class ValidateEvent extends CarryEvent {
    class PermissionCheckEvent (line 57) | public static class PermissionCheckEvent extends CarryEvent {

FILE: client/src/main/java/com/messagebus/client/event/component/ClientDestroyEvent.java
  class ClientDestroyEvent (line 8) | public class ClientDestroyEvent extends Event {

FILE: client/src/main/java/com/messagebus/client/event/component/ClientDestroyEventProcessor.java
  class ClientDestroyEventProcessor (line 10) | public class ClientDestroyEventProcessor {
    method onClientDestroy (line 14) | @Subscribe

FILE: client/src/main/java/com/messagebus/client/event/component/ClientInitedEvent.java
  class ClientInitedEvent (line 8) | public class ClientInitedEvent extends Event {

FILE: client/src/main/java/com/messagebus/client/event/component/ClientInitedEventProcessor.java
  class ClientInitedEventProcessor (line 10) | public class ClientInitedEventProcessor {
    method onClientInited (line 14) | @Subscribe

FILE: client/src/main/java/com/messagebus/client/event/component/InnerEvent.java
  class InnerEvent (line 9) | public class InnerEvent extends Event {
    method InnerEvent (line 13) | public InnerEvent() {
    method getMsg (line 16) | public Message getMsg() {
    method setMsg (line 20) | public void setMsg(Message msg) {

FILE: client/src/main/java/com/messagebus/client/event/component/NoticeEvent.java
  class NoticeEvent (line 9) | public class NoticeEvent extends Event {
    method NoticeEvent (line 13) | public NoticeEvent() {
    method getMsg (line 16) | public Message getMsg() {
    method setMsg (line 20) | public void setMsg(Message notification) {

FILE: client/src/main/java/com/messagebus/client/extension/thrift/TAMQPClientTransport.java
  class TAMQPClientTransport (line 18) | public class TAMQPClientTransport extends TTransport {
    method TAMQPClientTransport (line 31) | public TAMQPClientTransport(Messagebus client,
    method isOpen (line 43) | @Override
    method open (line 48) | @Override
    method close (line 53) | @Override
    method read (line 58) | @Override
    method write (line 76) | @Override
    method flush (line 81) | public void flush() throws TTransportException {

FILE: client/src/main/java/com/messagebus/client/extension/thrift/ThriftMessageHandler.java
  class ThriftMessageHandler (line 22) | public class ThriftMessageHandler implements IRpcMessageProcessor {
    method ThriftMessageHandler (line 30) | public ThriftMessageHandler(TProcessor processor,
    method onRpcMessage (line 38) | @Override

FILE: client/src/main/java/com/messagebus/client/message/model/Message.java
  class Message (line 7) | public class Message implements Cloneable, Serializable {
    method Message (line 28) | public Message() {
    method getMessageId (line 31) | public long getMessageId() {
    method setMessageId (line 35) | public void setMessageId(long messageId) {
    method getType (line 39) | public String getType() {
    method setType (line 43) | public void setType(String type) {
    method getTimestamp (line 47) | public long getTimestamp() {
    method setTimestamp (line 51) | public void setTimestamp(long timestamp) {
    method getPriority (line 55) | public short getPriority() {
    method setPriority (line 59) | public void setPriority(short priority) {
    method getExpiration (line 63) | public String getExpiration() {
    method getDeliveryMode (line 67) | public short getDeliveryMode() {
    method getHeaders (line 71) | public Map<String, Object> getHeaders() {
    method setHeaders (line 75) | public void setHeaders(Map<String, Object> headers) {
    method getContentEncoding (line 79) | public String getContentEncoding() {
    method setContentEncoding (line 83) | public void setContentEncoding(String contentEncoding) {
    method getContentType (line 87) | public String getContentType() {
    method setContentType (line 91) | public void setContentType(String contentType) {
    method getReplyTo (line 95) | public String getReplyTo() {
    method setReplyTo (line 99) | public void setReplyTo(String replyTo) {
    method getAppId (line 103) | public String getAppId() {
    method setAppId (line 107) | public void setAppId(String appId) {
    method getUserId (line 111) | public String getUserId() {
    method setUserId (line 115) | protected void setUserId(String userId) {
    method getClusterId (line 119) | public String getClusterId() {
    method setClusterId (line 123) | protected void setClusterId(String clusterId) {
    method getCorrelationId (line 127) | public String getCorrelationId() {
    method setCorrelationId (line 131) | public void setCorrelationId(String correlationId) {
    method getContent (line 135) | public byte[] getContent() {
    method setContent (line 139) | public void setContent(byte[] content) {
    method clone (line 143) | @Override

FILE: client/src/main/java/com/messagebus/client/message/model/MessageFactory.java
  class MessageFactory (line 11) | public class MessageFactory {
    method createMessage (line 15) | public static Message createMessage() {
    method createMessage (line 23) | public static Message createMessage(QueueingConsumer.Delivery delivery) {
    method createMessage (line 33) | public static Message createMessage(GetResponse response) {
    method initMessage (line 43) | private static void initMessage(Message msg,

FILE: client/src/main/java/com/messagebus/client/message/model/MessageJSONSerializer.java
  class MessageJSONSerializer (line 9) | public class MessageJSONSerializer {
    method serialize (line 14) | public static String serialize(Message msg) {
    method deSerialize (line 18) | public static Message deSerialize(String msgStr) {
    method deSerialize (line 27) | public static Message deSerialize(JsonElement msgElement) {
    method serializeMessages (line 34) | public static String serializeMessages(Collection<Message> msgs) {
    method deSerializeMessages (line 38) | public static Message[] deSerializeMessages(String msgArrStr) {

FILE: client/src/main/java/com/messagebus/client/message/transfer/MessageHeaderTransfer.java
  class MessageHeaderTransfer (line 10) | public class MessageHeaderTransfer {
    method box (line 14) | public static AMQP.BasicProperties box(Message msg) {
    method unbox (line 34) | public static Message unbox(AMQP.BasicProperties properties,

FILE: client/src/main/java/com/messagebus/client/model/BaseModel.java
  class BaseModel (line 8) | public class BaseModel implements Serializable {
    method toString (line 10) | @Override

FILE: client/src/main/java/com/messagebus/client/model/Config.java
  class Config (line 5) | public class Config implements Serializable {
    method Config (line 10) | public Config() {
    method getKey (line 13) | public String getKey() {
    method setKey (line 17) | public void setKey(String key) {
    method getValue (line 21) | public String getValue() {
    method setValue (line 25) | public void setValue(String value) {
    method toString (line 29) | @Override

FILE: client/src/main/java/com/messagebus/client/model/HandlerModel.java
  class HandlerModel (line 8) | public class HandlerModel extends BaseModel implements Serializable {
    method HandlerModel (line 13) | public HandlerModel() {
    method getHandlerName (line 16) | public String getHandlerName() {
    method setHandlerName (line 20) | public void setHandlerName(String handlerName) {
    method getHandlerPath (line 24) | public String getHandlerPath() {
    method setHandlerPath (line 28) | public void setHandlerPath(String handlerPath) {
    method toString (line 32) | @Override

FILE: client/src/main/java/com/messagebus/client/model/MessageCarryType.java
  type MessageCarryType (line 10) | public enum MessageCarryType {
    method lookup (line 38) | public static MessageCarryType lookup(String strType) {
    method stringOf (line 49) | public String stringOf() {

FILE: client/src/test/java/com/messagebus/client/api/Broadcast.java
  class Broadcast (line 17) | public class Broadcast extends BaseTestCase {
    method setUp (line 21) | @Override
    method tearDown (line 26) | @Override
    method testBroadcast (line 31) | public void testBroadcast() throws Exception {
    class NotificationEventProcessor (line 50) | public static class NotificationEventProcessor {
      method onNotification (line 52) | @Subscribe

FILE: client/src/test/java/com/messagebus/client/api/ComponentEventListener.java
  class ComponentEventListener (line 17) | public class ComponentEventListener extends BaseTestCase {
    method setUp (line 21) | @Override
    method tearDown (line 26) | @Override
    method testComponentEvent (line 31) | @Test
    class EventListener (line 43) | public class EventListener {
      method onClientInited (line 45) | @Subscribe
      method onClientDestroy (line 50) | @Subscribe

FILE: client/src/test/java/com/messagebus/client/api/ProduceConsume.java
  class ProduceConsume (line 17) | public class ProduceConsume extends BaseTestCase {
    method setUp (line 23) | @Override
    method tearDown (line 28) | @Override
    method commonProduce (line 33) | private void commonProduce() {
    method testSimpleProduceConsume (line 45) | public void testSimpleProduceConsume() throws Exception {
    method testProduceAndConsumeWithPushStyle (line 61) | public void testProduceAndConsumeWithPushStyle() {

FILE: client/src/test/java/com/messagebus/client/api/PublishSubscribe.java
  class PublishSubscribe (line 16) | public class PublishSubscribe extends BaseTestCase {
    method setUp (line 20) | @Override
    method tearDown (line 25) | @Override
    method testPublishAndSubscribe (line 30) | public void testPublishAndSubscribe() throws Exception {

FILE: client/src/test/java/com/messagebus/client/api/RequestResponse.java
  class RequestResponse (line 20) | public class RequestResponse extends BaseTestCase {
    method setUp (line 24) | @Override
    method tearDown (line 29) | @Override
    method testRequestAndResponse (line 34) | public void testRequestAndResponse() throws Exception {

FILE: client/src/test/java/com/messagebus/client/api/RpcRequestResponse.java
  class RpcRequestResponse (line 14) | public class RpcRequestResponse extends BaseTestCase {
    method setUp (line 18) | @Override
    method tearDown (line 23) | @Override
    method testSimpleRpc (line 28) | public void testSimpleRpc() throws Exception {
    method testReturnValueRpc (line 60) | public void testReturnValueRpc() throws Exception {
    method testParamNoReturnValueRpc (line 93) | public void testParamNoReturnValueRpc() throws Exception {
    method testReturnParamValueRpc (line 123) | public void testReturnParamValueRpc() throws Exception {
    type TestInterface (line 156) | public static interface TestInterface {
      method sayHello (line 158) | public void sayHello();
      method returnValueMethod (line 160) | public String returnValueMethod();
      method printParam (line 162) | public void printParam(String arg1);
      method returnParam (line 164) | public String returnParam(String arg1);
    class HelloServiceProvider (line 168) | public static class HelloServiceProvider implements TestInterface {
      method sayHello (line 170) | @Override
      method returnValueMethod (line 175) | @Override
      method printParam (line 180) | @Override
      method returnParam (line 185) | @Override

FILE: client/src/test/java/com/messagebus/client/core/BaseTestCase.java
  class BaseTestCase (line 11) | public class BaseTestCase extends TestCase {
    method setUp (line 18) | @Override
    method tearDown (line 24) | @Override

FILE: client/src/test/java/com/messagebus/client/core/MessageUtil.java
  class MessageUtil (line 9) | public class MessageUtil {
    method create (line 11) | public static Message create(int sizeOfByte) {
    method generate (line 21) | private static byte[] generate(int sizeOfByte) {

FILE: client/src/test/java/com/messagebus/client/feature/CalcService.java
  class CalcService (line 25) | @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
    type Iface (line 29) | public interface Iface {
      method calcSum (line 31) | public int calcSum() throws TException;
    type AsyncIface (line 35) | public interface AsyncIface {
      method calcSum (line 37) | public void calcSum(AsyncMethodCallback resultHandler) throws TExcep...
    class Client (line 41) | public static class Client extends org.apache.thrift.TServiceClient im...
      class Factory (line 42) | public static class Factory implements org.apache.thrift.TServiceCli...
        method Factory (line 43) | public Factory() {
        method getClient (line 46) | public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
        method getClient (line 50) | public Client getClient(org.apache.thrift.protocol.TProtocol iprot...
      method Client (line 55) | public Client(org.apache.thrift.protocol.TProtocol prot) {
      method Client (line 59) | public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache...
      method calcSum (line 63) | public int calcSum() throws TException {
      method send_calcSum (line 68) | public void send_calcSum() throws TException {
      method recv_calcSum (line 73) | public int recv_calcSum() throws TException {
    class AsyncClient (line 84) | public static class AsyncClient extends org.apache.thrift.async.TAsync...
      class Factory (line 85) | public static class Factory implements org.apache.thrift.async.TAsyn...
        method Factory (line 89) | public Factory(org.apache.thrift.async.TAsyncClientManager clientM...
        method getAsyncClient (line 94) | public AsyncClient getAsyncClient(org.apache.thrift.transport.TNon...
      method AsyncClient (line 99) | public AsyncClient(org.apache.thrift.protocol.TProtocolFactory proto...
      method calcSum (line 103) | public void calcSum(AsyncMethodCallback resultHandler) throws TExcep...
      class calcSum_call (line 110) | public static class calcSum_call extends org.apache.thrift.async.TAs...
        method calcSum_call (line 111) | public calcSum_call(AsyncMethodCallback resultHandler, org.apache....
        method write_args (line 115) | public void write_args(org.apache.thrift.protocol.TProtocol prot) ...
        method getResult (line 122) | public int getResult() throws TException {
    class Processor (line 134) | public static class Processor<I extends Iface> extends org.apache.thri...
      method Processor (line 137) | public Processor(I iface) {
      method Processor (line 141) | protected Processor(I iface, Map<String, org.apache.thrift.ProcessFu...
      method getProcessMap (line 145) | private static <I extends Iface> Map<String, org.apache.thrift.Proce...
      class calcSum (line 150) | public static class calcSum<I extends Iface> extends org.apache.thri...
        method calcSum (line 151) | public calcSum() {
        method getEmptyArgsInstance (line 155) | public calcSum_args getEmptyArgsInstance() {
        method isOneway (line 159) | protected boolean isOneway() {
        method getResult (line 163) | public calcSum_result getResult(I iface, calcSum_args args) throws...
    class AsyncProcessor (line 173) | public static class AsyncProcessor<I extends AsyncIface> extends org.a...
      method AsyncProcessor (line 176) | public AsyncProcessor(I iface) {
      method AsyncProcessor (line 180) | protected AsyncProcessor(I iface, Map<String, org.apache.thrift.Asyn...
      method getProcessMap (line 184) | private static <I extends AsyncIface> Map<String, org.apache.thrift....
      class calcSum (line 189) | public static class calcSum<I extends AsyncIface> extends org.apache...
        method calcSum (line 190) | public calcSum() {
        method getEmptyArgsInstance (line 194) | public calcSum_args getEmptyArgsInstance() {
        method getResultHandler (line 198) | public AsyncMethodCallback<Integer> getResultHandler(final AsyncFr...
        method isOneway (line 233) | protected boolean isOneway() {
        method start (line 237) | public void start(I iface, calcSum_args args, AsyncMethodCallback<...
    class calcSum_args (line 244) | public static class calcSum_args implements org.apache.thrift.TBase<ca...
      type _Fields (line 259) | public enum _Fields implements org.apache.thrift.TFieldIdEnum {
        method findByThriftId (line 273) | public static _Fields findByThriftId(int fieldId) {
        method findByThriftIdOrThrow (line 284) | public static _Fields findByThriftIdOrThrow(int fieldId) {
        method findByName (line 293) | public static _Fields findByName(String name) {
        method _Fields (line 300) | _Fields(short thriftId, String fieldName) {
        method getThriftFieldId (line 305) | public short getThriftFieldId() {
        method getFieldName (line 309) | public String getFieldName() {
      method calcSum_args (line 322) | public calcSum_args() {
      method calcSum_args (line 328) | public calcSum_args(calcSum_args other) {
      method deepCopy (line 331) | public calcSum_args deepCopy() {
      method clear (line 335) | @Override
      method setFieldValue (line 339) | public void setFieldValue(_Fields field, Object value) {
      method getFieldValue (line 344) | public Object getFieldValue(_Fields field) {
      method isSet (line 353) | public boolean isSet(_Fields field) {
      method equals (line 363) | @Override
      method equals (line 372) | public boolean equals(calcSum_args that) {
      method hashCode (line 379) | @Override
      method compareTo (line 386) | @Override
      method fieldForId (line 397) | public _Fields fieldForId(int fieldId) {
      method read (line 401) | public void read(org.apache.thrift.protocol.TProtocol iprot) throws ...
      method write (line 405) | public void write(org.apache.thrift.protocol.TProtocol oprot) throws...
      method toString (line 409) | @Override
      method validate (line 418) | public void validate() throws TException {
      method writeObject (line 423) | private void writeObject(java.io.ObjectOutputStream out) throws java...
      method readObject (line 431) | private void readObject(java.io.ObjectInputStream in) throws java.io...
      class calcSum_argsStandardSchemeFactory (line 439) | private static class calcSum_argsStandardSchemeFactory implements Sc...
        method getScheme (line 440) | public calcSum_argsStandardScheme getScheme() {
      class calcSum_argsStandardScheme (line 445) | private static class calcSum_argsStandardScheme extends StandardSche...
        method read (line 447) | public void read(org.apache.thrift.protocol.TProtocol iprot, calcS...
        method write (line 467) | public void write(org.apache.thrift.protocol.TProtocol oprot, calc...
      class calcSum_argsTupleSchemeFactory (line 477) | private static class calcSum_argsTupleSchemeFactory implements Schem...
        method getScheme (line 478) | public calcSum_argsTupleScheme getScheme() {
      class calcSum_argsTupleScheme (line 483) | private static class calcSum_argsTupleScheme extends TupleScheme<cal...
        method write (line 485) | @Override
        method read (line 490) | @Override
    class calcSum_result (line 498) | public static class calcSum_result implements org.apache.thrift.TBase<...
      type _Fields (line 515) | public enum _Fields implements org.apache.thrift.TFieldIdEnum {
        method findByThriftId (line 529) | public static _Fields findByThriftId(int fieldId) {
        method findByThriftIdOrThrow (line 542) | public static _Fields findByThriftIdOrThrow(int fieldId) {
        method findByName (line 551) | public static _Fields findByName(String name) {
        method _Fields (line 558) | _Fields(short thriftId, String fieldName) {
        method getThriftFieldId (line 563) | public short getThriftFieldId() {
        method getFieldName (line 567) | public String getFieldName() {
      method calcSum_result (line 585) | public calcSum_result() {
      method calcSum_result (line 588) | public calcSum_result(
      method calcSum_result (line 598) | public calcSum_result(calcSum_result other) {
      method deepCopy (line 603) | public calcSum_result deepCopy() {
      method clear (line 607) | @Override
      method getSuccess (line 613) | public int getSuccess() {
      method setSuccess (line 617) | public calcSum_result setSuccess(int success) {
      method unsetSuccess (line 623) | public void unsetSuccess() {
      method isSetSuccess (line 630) | public boolean isSetSuccess() {
      method setSuccessIsSet (line 634) | public void setSuccessIsSet(boolean value) {
      method setFieldValue (line 638) | public void setFieldValue(_Fields field, Object value) {
      method getFieldValue (line 651) | public Object getFieldValue(_Fields field) {
      method isSet (line 663) | public boolean isSet(_Fields field) {
      method equals (line 675) | @Override
      method equals (line 684) | public boolean equals(calcSum_result that) {
      method hashCode (line 700) | @Override
      method compareTo (line 712) | @Override
      method fieldForId (line 733) | public _Fields fieldForId(int fieldId) {
      method read (line 737) | public void read(org.apache.thrift.protocol.TProtocol iprot) throws ...
      method write (line 741) | public void write(org.apache.thrift.protocol.TProtocol oprot) throws...
      method toString (line 745) | @Override
      method validate (line 757) | public void validate() throws TException {
      method writeObject (line 762) | private void writeObject(java.io.ObjectOutputStream out) throws java...
      method readObject (line 770) | private void readObject(java.io.ObjectInputStream in) throws java.io...
      class calcSum_resultStandardSchemeFactory (line 780) | private static class calcSum_resultStandardSchemeFactory implements ...
        method getScheme (line 781) | public calcSum_resultStandardScheme getScheme() {
      class calcSum_resultStandardScheme (line 786) | private static class calcSum_resultStandardScheme extends StandardSc...
        method read (line 788) | public void read(org.apache.thrift.protocol.TProtocol iprot, calcS...
        method write (line 816) | public void write(org.apache.thrift.protocol.TProtocol oprot, calc...
      class calcSum_resultTupleSchemeFactory (line 831) | private static class calcSum_resultTupleSchemeFactory implements Sch...
        method getScheme (line 832) | public calcSum_resultTupleScheme getScheme() {
      class calcSum_resultTupleScheme (line 837) | private static class calcSum_resultTupleScheme extends TupleScheme<c...
        method write (line 839) | @Override
        method read (line 852) | @Override

FILE: client/src/test/java/com/messagebus/client/feature/CalcServiceImpl.java
  class CalcServiceImpl (line 8) | public class CalcServiceImpl implements CalcService.Iface {
    method calcSum (line 10) | @Override

FILE: client/src/test/java/com/messagebus/client/feature/MessageBodySize.java
  class MessageBodySize (line 10) | public class MessageBodySize extends BaseTestCase {
    method setUp (line 12) | @Override
    method tearDown (line 17) | @Override
    method testMsgBodySizeOverhead (line 22) | public void testMsgBodySizeOverhead() throws Exception {

FILE: client/src/test/java/com/messagebus/client/feature/MessageNumLimit.java
  class MessageNumLimit (line 10) | public class MessageNumLimit extends BaseTestCase {
    method setUp (line 12) | @Override
    method tearDown (line 17) | @Override
    method testMessageNumLimit (line 22) | public void testMessageNumLimit() throws Exception {

FILE: client/src/test/java/com/messagebus/client/feature/ThriftWithAMQPRpc.java
  class ThriftWithAMQPRpc (line 21) | public class ThriftWithAMQPRpc extends BaseTestCase {
    method setUp (line 25) | @Override
    method tearDown (line 30) | @Override
    method testThriftRpc (line 36) | public void testThriftRpc() throws Exception {
    method main (line 50) | public static void main(String[] args) {

FILE: common-component/src/main/java/com/messagebus/common/AuthInfo.java
  class AuthInfo (line 5) | public class AuthInfo implements Serializable {
    method AuthInfo (line 10) | public AuthInfo() {
    method AuthInfo (line 13) | public AuthInfo(String userName, String password) {
    method getUserName (line 18) | public String getUserName() {
    method setUserName (line 22) | public void setUserName(String userName) {
    method getPassword (line 26) | public String getPassword() {
    method setPassword (line 30) | public void setPassword(String password) {
    method toString (line 34) | @Override

FILE: common-component/src/main/java/com/messagebus/common/Constants.java
  class Constants (line 11) | public class Constants {

FILE: common-component/src/main/java/com/messagebus/common/Event.java
  class Event (line 8) | public class Event implements Serializable {
    method Event (line 12) | public Event() {
    method getDescription (line 15) | public String getDescription() {
    method setDescription (line 19) | public void setDescription(String description) {
    method toString (line 23) | @Override

FILE: common-component/src/main/java/com/messagebus/common/ExceptionHelper.java
  class ExceptionHelper (line 8) | public class ExceptionHelper {
    method extractStackTrace (line 10) | public static String extractStackTrace(Throwable t) {
    method logException (line 26) | public static void logException(final Log logger, Throwable t, String ...

FILE: common-component/src/main/java/com/messagebus/common/GsonUtil.java
  class GsonUtil (line 14) | public class GsonUtil {
    method jsonStrToMap (line 22) | public static Map jsonStrToMap(String jsonObjStr) {
    method jsonStrToList (line 30) | public static List jsonStrToList(String jsonObjStr) {
    class NaturalDeserializer (line 42) | private static class NaturalDeserializer implements JsonDeserializer<O...
      method deserialize (line 44) | @Override
      method handlePrimitive (line 52) | private Object handlePrimitive(JsonPrimitive json) {
      method handleArray (line 74) | private Object handleArray(JsonArray json, JsonDeserializationContex...
      method handleObject (line 81) | private Object handleObject(JsonObject json, JsonDeserializationCont...

FILE: common-component/src/main/java/com/messagebus/common/HttpHelper.java
  class HttpHelper (line 21) | public class HttpHelper {
    method syncHTTPGet (line 26) | public static String syncHTTPGet(Map<String, Object> requestParamDic, ...
    method asyncHTTPGet (line 65) | public static void asyncHTTPGet(String urlStr, AuthInfo authInfo, IAsy...
    method syncHTTPPut (line 69) | public static void syncHTTPPut(String urlStr, AuthInfo authInfo) {
    method asyncHTTPPut (line 73) | public static void asyncHTTPPut(String urlStr, AuthInfo authInfo, IAsy...
    method syncHTTPPost (line 77) | public static void syncHTTPPost(String urlStr, AuthInfo authInfo) {
    method asyncHTTPPost (line 81) | public static void asyncHTTPPost(String urlStr, AuthInfo authInfo, IAs...
    method syncHTTPDelete (line 85) | public static void syncHTTPDelete(String urlStr, AuthInfo authInfo) {
    method asyncHTTPDelete (line 89) | public static void asyncHTTPDelete(String urlStr, AuthInfo authInfo, I...

FILE: common-component/src/main/java/com/messagebus/common/IAsyncCallback.java
  type IAsyncCallback (line 3) | public interface IAsyncCallback {
    method onResponse (line 5) | public void onResponse(String data);

FILE: common-component/src/main/java/com/messagebus/common/InnerNoticeEntity.java
  class InnerNoticeEntity (line 8) | public class InnerNoticeEntity implements Serializable {
    method InnerNoticeEntity (line 14) | public InnerNoticeEntity() {
    method getIdentifier (line 17) | public String getIdentifier() {
    method setIdentifier (line 21) | public void setIdentifier(String identifier) {
    method getValue (line 25) | public String getValue() {
    method setValue (line 29) | public void setValue(String value) {
    method getType (line 33) | public String getType() {
    method setType (line 37) | public void setType(String type) {

FILE: common-component/src/main/java/com/messagebus/common/NumberHelper.java
  class NumberHelper (line 5) | public class NumberHelper {
    method fractionDigits (line 7) | public static double fractionDigits(double original, int digitNum) {

FILE: common-component/src/main/java/com/messagebus/common/RandomHelper.java
  class RandomHelper (line 5) | public class RandomHelper {
    method randomNumberAndCharacter (line 14) | public static String randomNumberAndCharacter(int length) {

FILE: common-component/src/main/java/com/messagebus/common/RouterType.java
  type RouterType (line 14) | public enum RouterType {
    method fromEnum (line 31) | public static String fromEnum(RouterType item) {
    method lookup (line 40) | public static RouterType lookup(String produceModeStr) {
    method toString (line 50) | @Override

FILE: common-component/src/main/java/com/messagebus/common/ShellHelper.java
  class ShellHelper (line 10) | public class ShellHelper {
    method exec (line 14) | public static ExecResult exec(String cmdStr) throws IOException, Inter...
    method translateFromStream (line 32) | private static String translateFromStream(InputStream stream) throws I...
    class ExecResult (line 45) | public static class ExecResult {
      method ExecResult (line 50) | public ExecResult() {
      method getInfo (line 53) | public String getInfo() {
      method setInfo (line 57) | public void setInfo(String info) {
      method getError (line 61) | public String getError() {
      method setError (line 65) | public void setError(String error) {
      method toString (line 69) | @Override

FILE: common-component/src/main/java/com/messagebus/common/TestVariableInfo.java
  class TestVariableInfo (line 6) | public class TestVariableInfo {

FILE: common-component/src/main/java/com/messagebus/common/UUIDGenerator.java
  class UUIDGenerator (line 6) | public class UUIDGenerator {
    method UUIDGenerator (line 27) | public UUIDGenerator(long workerId, long datacenterId) {
    method nextId (line 39) | public synchronized long nextId() {
    method tilNextMillis (line 60) | protected long tilNextMillis(long lastTimestamp) {
    method timeGen (line 68) | protected long timeGen() {

FILE: common-component/src/main/java/com/messagebus/common/compress/CompressEnum.java
  type CompressEnum (line 9) | public enum CompressEnum {
    method CompressEnum (line 23) | private CompressEnum() {
    method lookup (line 26) | public static CompressEnum lookup(String strVal) {
    method stringVal (line 34) | public static String stringVal(CompressEnum compressEnum) {

FILE: common-component/src/main/java/com/messagebus/common/compress/CompressorFactory.java
  class CompressorFactory (line 6) | public final class CompressorFactory {
    method createCompressor (line 8) | public static ICompressor createCompressor(String algorName) {

FILE: common-component/src/main/java/com/messagebus/common/compress/ICompressor.java
  type ICompressor (line 8) | public interface ICompressor {
    method compress (line 10) | public byte[] compress(byte[] source);
    method uncompress (line 12) | public byte[] uncompress(byte[] target);
    method compressString (line 14) | public byte[] compressString(String source);
    method compressString (line 16) | public byte[] compressString(String source, Charset charset);
    method uncompressString (line 18) | public String uncompressString(byte[] target);
    method uncompressString (line 20) | public String uncompressString(byte[] target, Charset charset);
    method compressStream (line 22) | public byte[] compressStream(byte[] source);
    method uncompressStream (line 24) | public byte[] uncompressStream(byte[] target);

FILE: common-component/src/main/java/com/messagebus/common/compress/LZFCompressor.java
  class LZFCompressor (line 12) | class LZFCompressor implements ICompressor {
    method compress (line 14) | public byte[] compress(byte[] source) {
    method uncompress (line 18) | public byte[] uncompress(byte[] target) {
    method compressString (line 26) | public byte[] compressString(String source) {
    method compressString (line 31) | public byte[] compressString(String source, Charset charset) {
    method uncompressString (line 36) | public String uncompressString(byte[] target) {
    method uncompressString (line 45) | public String uncompressString(byte[] target, Charset charset) {
    method compressStream (line 54) | public byte[] compressStream(byte[] source) {
    method uncompressStream (line 77) | public byte[] uncompressStream(byte[] target) {

FILE: common-component/src/main/java/com/messagebus/common/compress/SnappyCompressor.java
  class SnappyCompressor (line 16) | class SnappyCompressor implements ICompressor {
    method compress (line 20) | public byte[] compress(byte[] source) {
    method uncompress (line 29) | public byte[] uncompress(byte[] target) {
    method compressString (line 38) | public byte[] compressString(String source) {
    method compressString (line 47) | public byte[] compressString(String source, Charset charset) {
    method uncompressString (line 56) | public String uncompressString(byte[] target) {
    method uncompressString (line 65) | public String uncompressString(byte[] target, Charset charset) {
    method compressStream (line 74) | public byte[] compressStream(byte[] source) {
    method uncompressStream (line 97) | public byte[] uncompressStream(byte[] target) {

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/controller/ExceptionHandler.java
  class ExceptionHandler (line 17) | public class ExceptionHandler extends HttpServlet {
    method service (line 21) | @Override

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/controller/HttpBridge.java
  class HttpBridge (line 28) | public class HttpBridge extends HttpServlet {
    method service (line 35) | @Override
    method produce (line 89) | private void produce(HttpServletRequest request, HttpServletResponse r...
    method produceWithGet (line 99) | private void produceWithGet(HttpServletRequest request, HttpServletRes...
    method produceWithPost (line 192) | private void produceWithPost(HttpServletRequest request, HttpServletRe...
    method consume (line 241) | private void consume(HttpServletRequest request, HttpServletResponse r...
    method publish (line 266) | private void publish(HttpServletRequest request, HttpServletResponse r...
    method subscribe (line 302) | private void subscribe(final HttpServletRequest request, final HttpSer...
    method request (line 377) | private void request(HttpServletRequest request, HttpServletResponse r...
    method response (line 441) | @Deprecated
    method consumeWithPull (line 447) | private void consumeWithPull(HttpServletRequest request, HttpServletRe...
    method consumeWithPush (line 493) | private void consumeWithPush(HttpServletRequest request, final HttpSer...

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/filter/URLDispatcher.java
  class URLDispatcher (line 18) | public class URLDispatcher implements Filter {
    method init (line 28) | @Override
    method doFilter (line 33) | @Override
    method destroy (line 63) | @Override

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/listener/AppContextListener.java
  class AppContextListener (line 13) | public class AppContextListener implements ServletContextListener {
    method contextInitialized (line 17) | @Override
    method contextDestroyed (line 29) | @Override

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/model/TextMessage.java
  class TextMessage (line 10) | public class TextMessage {
    method TextMessage (line 31) | public TextMessage() {}
    method getMessageId (line 33) | public long getMessageId() {
    method setMessageId (line 37) | public void setMessageId(long messageId) {
    method getType (line 41) | public String getType() {
    method setType (line 45) | public void setType(String type) {
    method getTimestamp (line 49) | public Date getTimestamp() {
    method setTimestamp (line 53) | public void setTimestamp(Date timestamp) {
    method getPriority (line 57) | public short getPriority() {
    method setPriority (line 61) | public void setPriority(short priority) {
    method getExpiration (line 65) | public String getExpiration() {
    method getDeliveryMode (line 69) | public short getDeliveryMode() {
    method getHeaders (line 73) | public Map<String, Object> getHeaders() {
    method setHeaders (line 77) | public void setHeaders(Map<String, Object> headers) {
    method getContentEncoding (line 81) | public String getContentEncoding() {
    method setContentEncoding (line 85) | public void setContentEncoding(String contentEncoding) {
    method getContentType (line 89) | public String getContentType() {
    method setContentType (line 93) | public void setContentType(String contentType) {
    method getReplyTo (line 97) | public String getReplyTo() {
    method setReplyTo (line 101) | public void setReplyTo(String replyTo) {
    method getAppId (line 105) | public String getAppId() {
    method setAppId (line 109) | public void setAppId(String appId) {
    method getUserId (line 113) | public String getUserId() {
    method setUserId (line 117) | protected void setUserId(String userId) {
    method getClusterId (line 121) | public String getClusterId() {
    method setClusterId (line 125) | protected void setClusterId(String clusterId) {
    method getCorrelationId (line 129) | public String getCorrelationId() {
    method setCorrelationId (line 133) | public void setCorrelationId(String correlationId) {
    method getContent (line 137) | public String getContent() {
    method setContent (line 141) | public void setContent(String content) {

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/util/CommonUtil.java
  class CommonUtil (line 8) | public class CommonUtil {
    method validMessageType (line 10) | public static boolean validMessageType(String msgTypeStr) {

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/util/Constants.java
  class Constants (line 3) | public class Constants {

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/util/ResponseUtil.java
  class ResponseUtil (line 8) | public class ResponseUtil {
    method response (line 10) | public static void response(HttpServletResponse response,
    method responseForJsonp (line 29) | public static void responseForJsonp(HttpServletResponse response,

FILE: httpbridge/src/main/java/com/messagebus/httpbridge/util/TextMessageJSONSerializer.java
  class TextMessageJSONSerializer (line 16) | public class TextMessageJSONSerializer {
    method serialize (line 25) | public static String serialize(Message msg) {
    method deSerialize (line 29) | public static Message deSerialize(String msgStr) {
    method deSerialize (line 38) | public static Message deSerialize(JsonElement msgElement) {
    method serializeMessages (line 45) | public static String serializeMessages(Collection<Message> msgs) {
    method deSerializeMessages (line 49) | public static Message[] deSerializeMessages(String msgArrStr) {
    class ByteArrAdapter (line 72) | private static class ByteArrAdapter extends TypeAdapter<byte[]> {
      method write (line 74) | @Override
      method read (line 83) | @Override

FILE: httpbridge/src/test/java/com/messagebus/httpbridge/util/PropertiesHelper.java
  class PropertiesHelper (line 9) | public class PropertiesHelper {
    method getPropertyValue (line 22) | public static String getPropertyValue(String key) {

FILE: interactor-component/src/main/java/com/messagebus/interactor/proxy/ProxyConsumer.java
  class ProxyConsumer (line 11) | public class ProxyConsumer {
    method consume (line 15) | public static QueueingConsumer consume(Channel channel,
    method consumeSingleMessage (line 25) | public static GetResponse consumeSingleMessage(Channel channel,

FILE: interactor-component/src/main/java/com/messagebus/interactor/proxy/ProxyProducer.java
  class ProxyProducer (line 9) | public class ProxyProducer {
    method produce (line 11) | public static void produce(String exchangeName,
    method produceWithTX (line 20) | public static void produceWithTX(String exchangeName,
    method batchProduce (line 37) | public static void batchProduce(String exchangeName,
    method batchProduceWithTX (line 47) | public static void batchProduceWithTX(String exchangeName,

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/AbstractInitializer.java
  class AbstractInitializer (line 14) | public abstract class AbstractInitializer {
    method AbstractInitializer (line 22) | protected AbstractInitializer(String mqConnectionStr) {
    method init (line 26) | protected void init() {
    method close (line 65) | protected void close() {

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/Exchange.java
  class Exchange (line 8) | public class Exchange implements Serializable {
    method Exchange (line 18) | public Exchange() {
    method getId (line 21) | public int getId() {
    method setId (line 25) | public void setId(int id) {
    method getName (line 29) | public String getName() {
    method setName (line 33) | public void setName(String name) {
    method getExchangeName (line 37) | public String getExchangeName() {
    method setExchangeName (line 41) | public void setExchangeName(String exchangeName) {
    method getParentId (line 45) | public int getParentId() {
    method setParentId (line 49) | public void setParentId(int parentId) {
    method getRouterType (line 53) | public String getRouterType() {
    method setRouterType (line 57) | public void setRouterType(String routerType) {
    method getRoutingKey (line 61) | public String getRoutingKey() {
    method setRoutingKey (line 65) | public void setRoutingKey(String routingKey) {
    method getDescription (line 69) | public String getDescription() {
    method setDescription (line 73) | public void setDescription(String description) {

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/ExchangeManager.java
  class ExchangeManager (line 9) | public class ExchangeManager extends AbstractInitializer {
    method ExchangeManager (line 15) | private ExchangeManager(String host) {
    method defaultManager (line 19) | public static ExchangeManager defaultManager(String host) {
    method create (line 31) | public void create(String exchangeName, String routerType) throws IOEx...
    method create (line 37) | public void create(String exchangeName,
    method bind (line 51) | public void bind(String exchangeName, String bindTo, String routingKey...
    method unbind (line 62) | public void unbind(String exchangeName, String unbindTo, String routin...
    method delete (line 73) | public void delete(String exchangeName) throws IOException {
    method exchangeExists (line 84) | public boolean exchangeExists(String exchangeName) throws IOException {
    method innerExists (line 97) | private boolean innerExists(String exchangeName, Channel outerChannel) {

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/MQDataInitializer.java
  class MQDataInitializer (line 12) | public class MQDataInitializer extends AbstractInitializer {
    method MQDataInitializer (line 17) | private MQDataInitializer(String mqConnectionStr) {
    method getInstance (line 21) | public static MQDataInitializer getInstance(String mqConnectionStr) {
    method deleteQueueNoWait (line 33) | public void deleteQueueNoWait(String queueName) {
    method initExchange (line 48) | public void initExchange(List<Exchange> sortedExchanges, Map<Integer, ...
    method initQueue (line 74) | public void initQueue(List<Queue> queues) {
    method destroyTopologyComponent (line 119) | private void destroyTopologyComponent() throws IOException {
    method exchangeExists (line 123) | private boolean exchangeExists(String exchangeName) throws IOException {
    method queueExists (line 137) | private boolean queueExists(String queueName) throws IOException {

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/Queue.java
  class Queue (line 8) | public class Queue implements Serializable {
    method Queue (line 19) | public Queue() {
    method getQueueName (line 22) | public String getQueueName() {
    method setQueueName (line 26) | public void setQueueName(String queueName) {
    method getBindExchange (line 30) | public String getBindExchange() {
    method setBindExchange (line 34) | public void setBindExchange(String bindExchange) {
    method getRoutingKey (line 38) | public String getRoutingKey() {
    method setRoutingKey (line 42) | public void setRoutingKey(String routingKey) {
    method getTypeId (line 46) | public String getTypeId() {
    method setTypeId (line 50) | public void setTypeId(String typeId) {
    method getThreshold (line 54) | public int getThreshold() {
    method setThreshold (line 58) | public void setThreshold(int threshold) {
    method getMsgBodySize (line 62) | public int getMsgBodySize() {
    method setMsgBodySize (line 66) | public void setMsgBodySize(int msgBodySize) {
    method getTtl (line 70) | public int getTtl() {
    method setTtl (line 74) | public void setTtl(int ttl) {
    method getTtlPerMsg (line 78) | public int getTtlPerMsg() {
    method setTtlPerMsg (line 82) | public void setTtlPerMsg(int ttlPerMsg) {

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/QueueManager.java
  class QueueManager (line 9) | public class QueueManager extends AbstractInitializer {
    method QueueManager (line 15) | private QueueManager(String host) {
    method defaultQueueManager (line 19) | public static QueueManager defaultQueueManager(String host) {
    method create (line 30) | public void create(String queueName) throws IOException {
    method create (line 40) | public void create(String queueName, String bindTo, String routingKey)...
    method bind (line 53) | public void bind(String queueName, String bindTo, String routingKey) t...
    method unbind (line 69) | public void unbind(String queueName, String unbindTo, String routingKe...
    method delete (line 93) | public void delete(String queueName) throws IOException {
    method exists (line 108) | public boolean exists(String queueName) throws IOException {
    method innerExists (line 128) | private boolean innerExists(String queueName, Channel outerChannel) {

FILE: interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/RabbitmqServerManager.java
  class RabbitmqServerManager (line 12) | public class RabbitmqServerManager {
    method start (line 16) | public static void start(String mqHost) {
    method stop (line 34) | public static void stop(String mqHost) {
    method isAlive (line 52) | public static boolean isAlive(String mqHost) {
    method comeFromSameHost (line 69) | private static boolean comeFromSameHost(String host) {

FILE: interactor-component/src/main/java/com/messagebus/interactor/util/ShellHelper.java
  class ShellHelper (line 10) | public class ShellHelper {
    method exec (line 14) | public static ExecResult exec(String cmdStr) throws IOException, Inter...
    method translateFromStream (line 32) | private static String translateFromStream(InputStream stream) throws I...
    class ExecResult (line 45) | public static class ExecResult {
      method ExecResult (line 50) | public ExecResult() {
      method getInfo (line 53) | public String getInfo() {
      method setInfo (line 57) | public void setInfo(String info) {
      method getError (line 61) | public String getError() {
      method setError (line 65) | public void setError(String error) {
      method toString (line 69) | @Override

FILE: managesystem/banyan_DB.sql
  type `APP` (line 27) | CREATE TABLE `APP` (
  type `AUDIT_TYPE` (line 61) | CREATE TABLE `AUDIT_TYPE` (
  type `CONFIG` (line 91) | CREATE TABLE `CONFIG` (
  type `NODE` (line 123) | CREATE TABLE `NODE` (
  type `NODE_AUDIT_HISTORY` (line 179) | CREATE TABLE `NODE_AUDIT_HISTORY` (
  type `QUEUE_RATE_WARNING` (line 217) | CREATE TABLE `QUEUE_RATE_WARNING` (
  type `SINK` (line 252) | CREATE TABLE `SINK` (
  type `SINK_AUDIT_HISTORY` (line 296) | CREATE TABLE `SINK_AUDIT_HISTORY` (

FILE: scenario/src/main/java/com/messagebus/scenario/client/BroadcastSubscribe.java
  class BroadcastSubscribe (line 14) | public class BroadcastSubscribe {
    method main (line 21) | public static void main(String[] args) {
    method broadcast (line 29) | private static void broadcast() {
    method subscribe1 (line 49) | private static void subscribe1() {
    method subscribe2 (line 75) | private static void subscribe2() {

FILE: scenario/src/main/java/com/messagebus/scenario/client/ClientUnderMultiThread.java
  class ClientUnderMultiThread (line 19) | public class ClientUnderMultiThread {
    method main (line 26) | public static void main(String[] args) {
    class ProduceClient (line 42) | private static class ProduceClient {
      method simulate (line 46) | public void simulate() {
    class ConsumeClient (line 71) | private static class ConsumeClient {
      method simulate (line 75) | public void simulate() {
    class ProduceThread (line 100) | private static class ProduceThread implements Runnable {
      method ProduceThread (line 105) | public ProduceThread(MessagebusSinglePool pool, CountDownLatch count...
      method run (line 110) | @Override
    class ConsumeThread (line 129) | private static class ConsumeThread implements Runnable {
      method ConsumeThread (line 134) | public ConsumeThread(MessagebusSinglePool pool, CountDownLatch count...
      method run (line 139) | @Override

FILE: scenario/src/main/java/com/messagebus/scenario/client/ProduceConsume.java
  class ProduceConsume (line 19) | public class ProduceConsume {
    method main (line 23) | public static void main(String[] args) {
    method produce (line 35) | private static void produce() {
    method consumeWithPullStyle (line 54) | private static void consumeWithPullStyle() {
    method consumeWithPushStyle (line 71) | private static void consumeWithPushStyle() {
    method asyncConsume (line 89) | private static void asyncConsume() {
    class AsyncConsumeThread (line 102) | private static class AsyncConsumeThread implements Runnable {
      method AsyncConsumeThread (line 108) | public AsyncConsumeThread() {
      method run (line 114) | @Override
      method startup (line 139) | public void startup() {
      method shutdown (line 143) | public void shutdown() {

FILE: scenario/src/main/java/com/messagebus/scenario/client/PublishSubscribe.java
  class PublishSubscribe (line 17) | public class PublishSubscribe {
    method main (line 24) | public static void main(String[] args) {
    method publish (line 32) | private static void publish() {
    method subscribe1 (line 49) | private static void subscribe1() {
    method subscribe2 (line 66) | private static void subscribe2() {

FILE: scenario/src/main/java/com/messagebus/scenario/client/RequestResponse.java
  class RequestResponse (line 19) | public class RequestResponse {
    method main (line 26) | public static void main(String[] args) {
    method request (line 32) | private static void request() {
    method response (line 60) | private static void response() {

FILE: scenario/src/main/java/com/messagebus/scenario/client/XSLTTestCase.java
  class XSLTTestCase (line 13) | public class XSLTTestCase {
    method main (line 15) | public static void main(String[] args) {

FILE: scenario/src/main/java/com/messagebus/scenario/httpBridge/ProduceConsume.java
  class ProduceConsume (line 25) | public class ProduceConsume {
    method main (line 29) | public static void main(String[] args) {
    method testProduceWithPost (line 37) | private static void testProduceWithPost() {
    method testProduceWithGet (line 79) | private static void testProduceWithGet() {
    method testConsume (line 108) | private static void testConsume(String mode) {

FILE: scenario/src/main/java/com/messagebus/scenario/httpBridge/PublishSubscribe.java
  class PublishSubscribe (line 28) | public class PublishSubscribe {
    method main (line 37) | public static void main(String[] args) {
    method testPublish (line 43) | private static void testPublish() {
    method testSubscribe (line 76) | private static void testSubscribe() {

FILE: scenario/src/main/java/com/messagebus/scenario/httpBridge/RequestTemplate.java
  class RequestTemplate (line 11) | public class RequestTemplate {
    method main (line 22) | public static void main(String[] args) {

FILE: scenario/src/main/java/com/messagebus/scenario/httpBridge/ResponseTemplate.java
  class ResponseTemplate (line 6) | public class ResponseTemplate {
    method main (line 27) | public static void main(String[] args) {

FILE: scenario/src/main/java/com/messagebus/scenario/util/PropertiesHelper.java
  class PropertiesHelper (line 9) | public class PropertiesHelper {
    method getPropertyValue (line 22) | public static String getPropertyValue(String key) {
Condensed preview — 177 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (540K chars).
[
  {
    "path": ".gitignore",
    "chars": 64,
    "preview": ".idea/*\n.DS_Store\n*/target/*\n*.iml\nMETA-INF/*\n*.rdb\n*.MF\n*.class"
  },
  {
    "path": ".travis.yml",
    "chars": 14,
    "preview": "language: java"
  },
  {
    "path": "README.md",
    "chars": 8230,
    "preview": "#overview\n\n[![Build Status](https://travis-ci.org/yanghua/banyan.svg?branch=messagebus-ng)](https://travis-ci.org/yanghu"
  },
  {
    "path": "benchmark/README-CN.md",
    "chars": 2423,
    "preview": "#overview\n\n本项目用于对消息总线的 `client` 进行测试,以展示不同场景下 `client` 的性能表现。\n\n##测试说明\n\n配置说明:\n\nclient : \n\n```\nOS : Mac os x Yosemite (ver"
  },
  {
    "path": "benchmark/pom.xml",
    "chars": 1081,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/Benchmark.java",
    "chars": 1164,
    "preview": "package com.messagebus.benchmark.client;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFa"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/IFetcher.java",
    "chars": 92,
    "preview": "package com.messagebus.benchmark.client;\n\npublic interface IFetcher {\n\n    long fetch();\n\n}\n"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/ILifeCycle.java",
    "chars": 117,
    "preview": "package com.messagebus.benchmark.client;\n\npublic interface ILifeCycle {\n\n    void start();\n\n    void terminate();\n\n}\n"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/TestConfigConstant.java",
    "chars": 915,
    "preview": "package com.messagebus.benchmark.client;\n\npublic class TestConfigConstant {\n\n    public static final String ORIGINAL_PRO"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/TestMessageFactory.java",
    "chars": 982,
    "preview": "package com.messagebus.benchmark.client;\n\nimport com.messagebus.client.message.model.Message;\nimport com.messagebus.clie"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/TestUtility.java",
    "chars": 3938,
    "preview": "package com.messagebus.benchmark.client;\n\nimport com.messagebus.client.Messagebus;\nimport com.messagebus.client.Messageb"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/CalcService.java",
    "chars": 33007,
    "preview": "/**\n * Autogenerated by Thrift Compiler (0.9.2)\n *\n * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING\n "
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ConsumeTestCase.java",
    "chars": 2781,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.*;\nimport com.messagebus.clien"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/MessagebusJSONRpcTestCase.java",
    "chars": 5645,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.Benchmark;\nimport com.messageb"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalConsumeTestCase.java",
    "chars": 4917,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.Benchmark;\nimport com.messageb"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalProduceTestCase.java",
    "chars": 3170,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.*;\nimport com.messagebus.clien"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/OriginalProduceWithoutTopologyTestCase.java",
    "chars": 3202,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.*;\nimport com.messagebus.clien"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceRemainLogTestCase.java",
    "chars": 2788,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.*;\nimport com.messagebus.clien"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceTestCase.java",
    "chars": 2716,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.*;\nimport com.messagebus.clien"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ProduceWithoutLogTestCase.java",
    "chars": 2791,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.*;\nimport com.messagebus.clien"
  },
  {
    "path": "benchmark/src/main/java/com/messagebus/benchmark/client/testCase/ThriftJSONRpcTestCase.java",
    "chars": 4073,
    "preview": "package com.messagebus.benchmark.client.testCase;\n\nimport com.messagebus.benchmark.client.Benchmark;\nimport com.messageb"
  },
  {
    "path": "benchmark/src/main/resources/clearEnv.sh",
    "chars": 160,
    "preview": "#! /bin/sh\n\nsudo service messagebus-server stop\nsudo rabbitmqctl stop_app\nsudo rabbitmqctl reset\nsudo rabbitmqctl start_"
  },
  {
    "path": "benchmark/src/main/resources/log4j.properties",
    "chars": 313,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=INFO, stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog"
  },
  {
    "path": "benchmark/src/main/resources/plotscript_consume.sh",
    "chars": 974,
    "preview": "#! /usr/bin/env gnuplot\nreset\nset terminal png\n\n#write you image dir path\nset output \"/Users/yanghua/Documents/GitHub/me"
  },
  {
    "path": "benchmark/src/main/resources/plotscript_messagebus_client_produce.sh",
    "chars": 856,
    "preview": "#! /usr/bin/env gnuplot\nreset\nset terminal png size 800,600\n\n#write you image dir path\nset output \"/Users/yanghua/Docume"
  },
  {
    "path": "benchmark/src/main/resources/plotscript_messagebus_client_remain_log_produce.sh",
    "chars": 909,
    "preview": "#! /usr/bin/env gnuplot\nreset\nset terminal png size 800,600\n\n#write you image dir path\nset output \"/Users/yanghua/Docume"
  },
  {
    "path": "benchmark/src/main/resources/plotscript_messagebus_client_without_realtime_log_produce.sh",
    "chars": 927,
    "preview": "#! /usr/bin/env gnuplot\nreset\nset terminal png size 800,600\n\n#write you image dir path\nset output \"/Users/yanghua/Docume"
  },
  {
    "path": "benchmark/src/main/resources/plotscript_official_client_produce.sh",
    "chars": 889,
    "preview": "#! /usr/bin/env gnuplot\nreset\nset terminal png size 800,600\n\n#write you image dir path\nset output \"/Users/yanghua/Docume"
  },
  {
    "path": "benchmark/src/main/resources/plotscript_official_client_without_topology_produce.sh",
    "chars": 989,
    "preview": "#! /usr/bin/env gnuplot\nreset\nset terminal png size 800,600\n\n#write you image dir path\nset output \"/Users/yanghua/Docume"
  },
  {
    "path": "client/pom.xml",
    "chars": 4743,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/AbstractPool.java",
    "chars": 2077,
    "preview": "package com.messagebus.client;\n\nimport com.messagebus.common.ExceptionHelper;\nimport org.apache.commons.logging.Log;\nimp"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/Address.java",
    "chars": 490,
    "preview": "package com.messagebus.client;\n\nimport java.io.Serializable;\n\n/**\n * Created by yanghua on 2/12/2015.\n */\npublic class A"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/ConfigManager.java",
    "chars": 15621,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.base.Strings;\nimport com.google.common.eventbus.EventBus;\nimpor"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/GenericContext.java",
    "chars": 1655,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.eventbus.EventBus;\nimport com.rabbitmq.client.Channel;\nimport c"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/IMessageReceiveListener.java",
    "chars": 222,
    "preview": "package com.messagebus.client;\n\nimport com.messagebus.client.message.model.Message;\n\n/**\n * message receive listener int"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/IRequestListener.java",
    "chars": 217,
    "preview": "package com.messagebus.client;\n\nimport com.messagebus.client.message.model.Message;\n\n/**\n * Created by yanghua on 3/16/1"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/IRpcMessageProcessor.java",
    "chars": 161,
    "preview": "package com.messagebus.client;\n\n/**\n * Created by yanghua on 4/17/15.\n */\npublic interface IRpcMessageProcessor {\n\n    p"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/InnerClient.java",
    "chars": 2893,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.event.component"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/InnerPool.java",
    "chars": 1021,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.eventbus.EventBus;\nimport com.rabbitmq.client.Connection;\nimpor"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessageContext.java",
    "chars": 5907,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.message.model.M"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessageResponseTimeoutException.java",
    "chars": 477,
    "preview": "package com.messagebus.client;\n\npublic class MessageResponseTimeoutException extends RuntimeException {\n\n    public Mess"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/Messagebus.java",
    "chars": 9971,
    "preview": "package com.messagebus.client;\n\nimport com.messagebus.client.carry.*;\nimport com.messagebus.client.message.model.Message"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessagebusConnectedFailedException.java",
    "chars": 551,
    "preview": "package com.messagebus.client;\n\n/**\n * the exception about messagebus connect failed exception\n */\npublic class Messageb"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessagebusFactory.java",
    "chars": 3968,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.common.ExceptionHelper"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessagebusPool.java",
    "chars": 9044,
    "preview": "package com.messagebus.client;\n\nimport com.google.common.base.Strings;\nimport com.google.common.eventbus.AsyncEventBus;\n"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessagebusSinglePool.java",
    "chars": 765,
    "preview": "package com.messagebus.client;\n\nimport org.apache.commons.pool2.impl.GenericObjectPoolConfig;\n\n/**\n * Created by yanghua"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/MessagebusUnOpenException.java",
    "chars": 518,
    "preview": "package com.messagebus.client;\n\n/**\n * the exception about messagebus unopened, mostly for semantic\n */\npublic class Mes"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/WrappedRpcServer.java",
    "chars": 1090,
    "preview": "package com.messagebus.client;\n\nimport com.messagebus.common.ExceptionHelper;\nimport com.rabbitmq.client.RpcServer;\nimpo"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/AbstractMessageCarryer.java",
    "chars": 886,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.GenericContext;\nimport com.messagebus.client.MessageC"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/CarryFactory.java",
    "chars": 2050,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.GenericContext;\n\n/**\n * Created by yanghua on 4/2/15."
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericBroadcaster.java",
    "chars": 2217,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.MessageCo"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericConsumer.java",
    "chars": 3573,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.IMessageR"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericProducer.java",
    "chars": 3904,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.ConfigMan"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericPublisher.java",
    "chars": 2312,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.MessageCo"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericRequester.java",
    "chars": 6196,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.ConfigMan"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericResponser.java",
    "chars": 2645,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.IRequestL"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericRpcRequester.java",
    "chars": 2298,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.MessageCo"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericRpcResponser.java",
    "chars": 3913,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.ConfigMan"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/GenericSubscriber.java",
    "chars": 3000,
    "preview": "package com.messagebus.client.carry;\n\nimport com.google.common.eventbus.EventBus;\nimport com.messagebus.client.IMessageR"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IBroadcaster.java",
    "chars": 185,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.message.model.Message;\n\npublic interface IBroadcaster"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IConsumer.java",
    "chars": 452,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.IMessageReceiveListener;\nimport com.messagebus.client"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IProducer.java",
    "chars": 326,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.message.model.Message;\n\n/**\n * the interface of produ"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IPublisher.java",
    "chars": 181,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.message.model.Message;\n\npublic interface IPublisher {"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IRequester.java",
    "chars": 461,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.MessageResponseTimeoutException;\nimport com.messagebu"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IResponser.java",
    "chars": 555,
    "preview": "package com.messagebus.client.carry;\n\n\nimport com.messagebus.client.IRequestListener;\n\nimport java.util.concurrent.TimeU"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IRpcRequester.java",
    "chars": 247,
    "preview": "package com.messagebus.client.carry;\n\n/**\n * Created by yanghua on 4/8/15.\n */\npublic interface IRpcRequester {\n\n    pub"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/IRpcResponser.java",
    "chars": 476,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.IRpcMessageProcessor;\nimport com.messagebus.client.Wr"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/carry/ISubscriber.java",
    "chars": 393,
    "preview": "package com.messagebus.client.carry;\n\nimport com.messagebus.client.IMessageReceiveListener;\n\nimport java.util.concurrent"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/BroadcastEventProcessor.java",
    "chars": 4231,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.base.Strings;\nimport com.google.common.eventbus.Sub"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/CarryEvent.java",
    "chars": 461,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.messagebus.client.MessageContext;\nimport com.messagebus.common.Ev"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/CommonEventProcessor.java",
    "chars": 10773,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.base.Strings;\nimport com.google.common.eventbus.Sub"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/ConsumeEventProcessor.java",
    "chars": 3836,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.base.Strings;\nimport com.google.common.eventbus.Sub"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/ProduceEventProcessor.java",
    "chars": 5722,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Co"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/PublishEventProcessor.java",
    "chars": 3649,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Co"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/RequestEventProcessor.java",
    "chars": 7855,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Co"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/ResponseEventProcessor.java",
    "chars": 3392,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Co"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/RpcRequestEventProcessor.java",
    "chars": 3513,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Co"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/RpcResponseEventProcessor.java",
    "chars": 3024,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Me"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/carry/SubscribeEventProcessor.java",
    "chars": 2390,
    "preview": "package com.messagebus.client.event.carry;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Co"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/component/ClientDestroyEvent.java",
    "chars": 179,
    "preview": "package com.messagebus.client.event.component;\n\nimport com.messagebus.common.Event;\n\n/**\n * Created by yanghua on 6/25/1"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/component/ClientDestroyEventProcessor.java",
    "chars": 496,
    "preview": "package com.messagebus.client.event.component;\n\nimport com.google.common.eventbus.Subscribe;\nimport org.apache.commons.l"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/component/ClientInitedEvent.java",
    "chars": 178,
    "preview": "package com.messagebus.client.event.component;\n\nimport com.messagebus.common.Event;\n\n/**\n * Created by yanghua on 6/25/1"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/component/ClientInitedEventProcessor.java",
    "chars": 491,
    "preview": "package com.messagebus.client.event.component;\n\nimport com.google.common.eventbus.Subscribe;\nimport org.apache.commons.l"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/component/InnerEvent.java",
    "chars": 407,
    "preview": "package com.messagebus.client.event.component;\n\nimport com.messagebus.client.message.model.Message;\nimport com.messagebu"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/event/component/NoticeEvent.java",
    "chars": 426,
    "preview": "package com.messagebus.client.event.component;\n\nimport com.messagebus.client.message.model.Message;\nimport com.messagebu"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/extension/thrift/TAMQPClientTransport.java",
    "chars": 2816,
    "preview": "package com.messagebus.client.extension.thrift;\n\nimport com.messagebus.client.Messagebus;\nimport com.messagebus.common.E"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/extension/thrift/ThriftMessageHandler.java",
    "chars": 2080,
    "preview": "package com.messagebus.client.extension.thrift;\n\nimport com.messagebus.client.IRpcMessageProcessor;\nimport com.messagebu"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/message/model/Message.java",
    "chars": 3637,
    "preview": "package com.messagebus.client.message.model;\n\nimport java.io.Serializable;\nimport java.util.HashMap;\nimport java.util.Ma"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/message/model/MessageFactory.java",
    "chars": 1484,
    "preview": "package com.messagebus.client.message.model;\n\n\nimport com.messagebus.client.message.transfer.MessageHeaderTransfer;\nimpo"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/message/model/MessageJSONSerializer.java",
    "chars": 1819,
    "preview": "package com.messagebus.client.message.model;\n\nimport com.google.gson.*;\nimport org.apache.commons.logging.Log;\nimport or"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/message/transfer/MessageHeaderTransfer.java",
    "chars": 2054,
    "preview": "package com.messagebus.client.message.transfer;\n\nimport com.messagebus.client.message.model.Message;\nimport com.rabbitmq"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/model/BaseModel.java",
    "chars": 240,
    "preview": "package com.messagebus.client.model;\n\nimport java.io.Serializable;\n\n/**\n * the root class of all models\n */\npublic class"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/model/Config.java",
    "chars": 640,
    "preview": "package com.messagebus.client.model;\n\nimport java.io.Serializable;\n\npublic class Config implements Serializable {\n\n    p"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/model/HandlerModel.java",
    "chars": 844,
    "preview": "package com.messagebus.client.model;\n\nimport java.io.Serializable;\n\n/**\n * the model of handler.xml's element\n */\npublic"
  },
  {
    "path": "client/src/main/java/com/messagebus/client/model/MessageCarryType.java",
    "chars": 1454,
    "preview": "package com.messagebus.client.model;\n\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;\nimport java.u"
  },
  {
    "path": "client/src/main/resources/log4j.properties",
    "chars": 548,
    "preview": "#log4j.rootLogger=INFO, dailyLog\n#log4j.appender.dailyLog=org.apache.log4j.ConsoleAppender\n##log4j.appender.dailyLog=org"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/Broadcast.java",
    "chars": 1789,
    "preview": "package com.messagebus.client.api;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.core.BaseT"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/ComponentEventListener.java",
    "chars": 1515,
    "preview": "package com.messagebus.client.api;\n\nimport com.google.common.eventbus.Subscribe;\nimport com.messagebus.client.Messagebus"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/ProduceConsume.java",
    "chars": 2178,
    "preview": "package com.messagebus.client.api;\n\nimport com.messagebus.client.IMessageReceiveListener;\nimport com.messagebus.client.c"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/ProduceConsumeLoopback.java",
    "chars": 1708,
    "preview": "//package com.messagebus.client.api;\n//\n//import com.messagebus.client.IMessageReceiveListener;\n//import com.messagebus."
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/PublishSubscribe.java",
    "chars": 1699,
    "preview": "package com.messagebus.client.api;\n\nimport com.messagebus.client.IMessageReceiveListener;\nimport com.messagebus.client.c"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/RequestResponse.java",
    "chars": 3410,
    "preview": "package com.messagebus.client.api;\n\nimport com.google.common.base.Strings;\nimport com.messagebus.client.IRequestListener"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/api/RpcRequestResponse.java",
    "chars": 6451,
    "preview": "package com.messagebus.client.api;\n\nimport com.messagebus.client.Messagebus;\nimport com.messagebus.client.MessagebusSing"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/core/BaseTestCase.java",
    "chars": 781,
    "preview": "package com.messagebus.client.core;\n\nimport com.messagebus.client.Messagebus;\nimport com.messagebus.client.MessagebusSin"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/core/MessageUtil.java",
    "chars": 656,
    "preview": "package com.messagebus.client.core;\n\nimport com.messagebus.client.message.model.Message;\nimport com.messagebus.client.me"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/feature/CalcService.java",
    "chars": 33035,
    "preview": "/**\n * Autogenerated by Thrift Compiler (0.9.2)\n * <p/>\n * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DO"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/feature/CalcServiceImpl.java",
    "chars": 362,
    "preview": "package com.messagebus.client.feature;\n\nimport org.apache.thrift.TException;\n\n/**\n * Created by yanghua on 4/17/15.\n */\n"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/feature/MessageBodySize.java",
    "chars": 763,
    "preview": "package com.messagebus.client.feature;\n\nimport com.messagebus.client.core.BaseTestCase;\nimport com.messagebus.client.cor"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/feature/MessageNumLimit.java",
    "chars": 818,
    "preview": "package com.messagebus.client.feature;\n\nimport com.messagebus.client.core.BaseTestCase;\nimport com.messagebus.client.cor"
  },
  {
    "path": "client/src/test/java/com/messagebus/client/feature/ThriftWithAMQPRpc.java",
    "chars": 2613,
    "preview": "package com.messagebus.client.feature;\n\nimport com.messagebus.client.Messagebus;\nimport com.messagebus.client.Messagebus"
  },
  {
    "path": "common-component/pom.xml",
    "chars": 1171,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/AuthInfo.java",
    "chars": 831,
    "preview": "package com.messagebus.common;\n\nimport java.io.Serializable;\n\npublic class AuthInfo implements Serializable {\n\n    priva"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/Constants.java",
    "chars": 857,
    "preview": "package com.messagebus.common;\n\nimport java.nio.charset.Charset;\n\n/**\n * User: yanghua\n * Date: 6/29/14\n * Time: 9:11 PM"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/Event.java",
    "chars": 530,
    "preview": "package com.messagebus.common;\n\nimport java.io.Serializable;\n\n/**\n * Created by yanghua on 6/24/15.\n */\npublic class Eve"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/ExceptionHelper.java",
    "chars": 842,
    "preview": "package com.messagebus.common;\n\nimport org.apache.commons.logging.Log;\n\nimport java.io.PrintWriter;\nimport java.io.Strin"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/GsonUtil.java",
    "chars": 3218,
    "preview": "package com.messagebus.common;\n\nimport com.google.gson.*;\n\nimport java.lang.reflect.Type;\nimport java.math.BigDecimal;\ni"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/HttpHelper.java",
    "chars": 2947,
    "preview": "package com.messagebus.common;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFactory;\nimp"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/IAsyncCallback.java",
    "chars": 111,
    "preview": "package com.messagebus.common;\n\npublic interface IAsyncCallback {\n\n    public void onResponse(String data);\n\n}\n"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/InnerNoticeEntity.java",
    "chars": 720,
    "preview": "package com.messagebus.common;\n\nimport java.io.Serializable;\n\n/**\n * Created by yanghua on 10/28/15.\n */\npublic class In"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/NumberHelper.java",
    "chars": 408,
    "preview": "package com.messagebus.common;\n\nimport java.text.NumberFormat;\n\npublic class NumberHelper {\n\n    public static double fr"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/RandomHelper.java",
    "chars": 1173,
    "preview": "package com.messagebus.common;\n\nimport java.util.Random;\n\npublic class RandomHelper {\n\n    /**\n     * generate random ch"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/RouterType.java",
    "chars": 1696,
    "preview": "package com.messagebus.common;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * Desc: the definition of exchange"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/ShellHelper.java",
    "chars": 2144,
    "preview": "package com.messagebus.common;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFactory;\n\nim"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/TestVariableInfo.java",
    "chars": 175,
    "preview": "package com.messagebus.common;\n\n/**\n * Created by yanghua on 4/7/15.\n */\npublic class TestVariableInfo {\n\n    public sta"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/UUIDGenerator.java",
    "chars": 2411,
    "preview": "package com.messagebus.common;\n\n/**\n * base on twitter's Snowflake\n */\npublic class UUIDGenerator {\n\n    private long wo"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/compress/CompressEnum.java",
    "chars": 1138,
    "preview": "package com.messagebus.common.compress;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * Created by yanghua on 5"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/compress/CompressorFactory.java",
    "chars": 584,
    "preview": "package com.messagebus.common.compress;\n\n/**\n * Created by yanghua on 6/18/15.\n */\npublic final class CompressorFactory "
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/compress/ICompressor.java",
    "chars": 581,
    "preview": "package com.messagebus.common.compress;\n\nimport java.nio.charset.Charset;\n\n/**\n * Created by yanghua on 6/18/15.\n */\npub"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/compress/LZFCompressor.java",
    "chars": 3083,
    "preview": "package com.messagebus.common.compress;\n\nimport com.ning.compress.lzf.*;\n\nimport java.io.*;\nimport java.nio.charset.Char"
  },
  {
    "path": "common-component/src/main/java/com/messagebus/common/compress/SnappyCompressor.java",
    "chars": 3534,
    "preview": "package com.messagebus.common.compress;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFac"
  },
  {
    "path": "common-component/src/main/resources/log4j.properties",
    "chars": 278,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=INFO, stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog"
  },
  {
    "path": "httpbridge/README.md",
    "chars": 2596,
    "preview": "#Restful API\n##produce:\n\n```\n/messagebus/queues/{qname}/messages?appkey={appkey}&type={produce}\n```\n\nhttp method : `POST"
  },
  {
    "path": "httpbridge/pom.xml",
    "chars": 2042,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/controller/ExceptionHandler.java",
    "chars": 1106,
    "preview": "package com.messagebus.httpbridge.controller;\n\nimport com.messagebus.httpbridge.util.Constants;\nimport com.messagebus.ht"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/controller/HttpBridge.java",
    "chars": 24026,
    "preview": "package com.messagebus.httpbridge.controller;\n\nimport com.google.common.base.Strings;\nimport com.messagebus.client.*;\nim"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/filter/URLDispatcher.java",
    "chars": 2841,
    "preview": "package com.messagebus.httpbridge.filter;\n\nimport com.google.common.base.Strings;\nimport com.google.gson.Gson;\nimport co"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/listener/AppContextListener.java",
    "chars": 1641,
    "preview": "package com.messagebus.httpbridge.listener;\n\nimport com.messagebus.client.MessagebusPool;\nimport com.messagebus.httpbrid"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/model/TextMessage.java",
    "chars": 3015,
    "preview": "package com.messagebus.httpbridge.model;\n\n\nimport java.util.Date;\nimport java.util.Map;\n\n/**\n * Created by yanghua on 3/"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/util/CommonUtil.java",
    "chars": 378,
    "preview": "package com.messagebus.httpbridge.util;\n\nimport com.google.common.base.Strings;\n\n/**\n * Created by yanghua on 3/30/15.\n "
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/util/Constants.java",
    "chars": 1080,
    "preview": "package com.messagebus.httpbridge.util;\n\npublic class Constants {\n\n    //region response status code\n    private static "
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/util/ResponseUtil.java",
    "chars": 1902,
    "preview": "package com.messagebus.httpbridge.util;\n\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimpo"
  },
  {
    "path": "httpbridge/src/main/java/com/messagebus/httpbridge/util/TextMessageJSONSerializer.java",
    "chars": 2886,
    "preview": "package com.messagebus.httpbridge.util;\n\nimport com.google.gson.*;\nimport com.google.gson.stream.JsonReader;\nimport com."
  },
  {
    "path": "httpbridge/src/main/resources/log4j.properties",
    "chars": 278,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=INFO, stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog"
  },
  {
    "path": "httpbridge/src/main/webapp/WEB-INF/jetty-web.xml",
    "chars": 252,
    "preview": "<?xml version=\"1.0\"  encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Configure PUBLIC \"-//Jetty//Configure//EN\" \"http://www.eclipse.or"
  },
  {
    "path": "httpbridge/src/main/webapp/WEB-INF/web.xml",
    "chars": 2137,
    "preview": "<!DOCTYPE web-app PUBLIC\n        \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"\n        \"http://java.sun.com/d"
  },
  {
    "path": "httpbridge/src/test/java/com/messagebus/httpbridge/util/PropertiesHelper.java",
    "chars": 622,
    "preview": "package com.messagebus.httpbridge.util;\n\nimport java.io.IOException;\nimport java.util.Properties;\n\n/**\n * Created by yan"
  },
  {
    "path": "httpbridge/src/test/resource/common.properties",
    "chars": 143,
    "preview": "messagebus.pubsuber.host=172.16.206.250\nmessagebus.pubsuber.port=6379\n\nmessagebus.httpbridge.host=172.16.206.29\nmessageb"
  },
  {
    "path": "interactor-component/pom.xml",
    "chars": 1249,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/proxy/ProxyConsumer.java",
    "chars": 1042,
    "preview": "package com.messagebus.interactor.proxy;\n\nimport com.rabbitmq.client.Channel;\nimport com.rabbitmq.client.GetResponse;\nim"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/proxy/ProxyProducer.java",
    "chars": 2104,
    "preview": "package com.messagebus.interactor.proxy;\n\nimport com.rabbitmq.client.AMQP;\nimport com.rabbitmq.client.Channel;\n\nimport j"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/AbstractInitializer.java",
    "chars": 3012,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport com.google.common.base.Strings;\nimport com.rabbitmq.client.Address;\n"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/Exchange.java",
    "chars": 1477,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport java.io.Serializable;\n\n/**\n * Created by yanghua on 11/20/15.\n */\npu"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/ExchangeManager.java",
    "chars": 3530,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport com.rabbitmq.client.Channel;\nimport org.apache.commons.logging.Log;\n"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/MQDataInitializer.java",
    "chars": 4678,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport com.rabbitmq.client.AMQP;\nimport org.apache.commons.logging.Log;\nimp"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/Queue.java",
    "chars": 1669,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport java.io.Serializable;\n\n/**\n * Created by yanghua on 11/20/15.\n */\npu"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/QueueManager.java",
    "chars": 4412,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport com.rabbitmq.client.Channel;\nimport org.apache.commons.logging.Log;\n"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/rabbitmq/RabbitmqServerManager.java",
    "chars": 2801,
    "preview": "package com.messagebus.interactor.rabbitmq;\n\nimport com.messagebus.common.ExceptionHelper;\nimport com.messagebus.interac"
  },
  {
    "path": "interactor-component/src/main/java/com/messagebus/interactor/util/ShellHelper.java",
    "chars": 2199,
    "preview": "package com.messagebus.interactor.util;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFac"
  },
  {
    "path": "managesystem/banyan_DB.sql",
    "chars": 34291,
    "preview": "CREATE DATABASE  IF NOT EXISTS `banyan_DB` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;\nUSE `banyan_DB`;\n-- "
  },
  {
    "path": "pom.xml",
    "chars": 3263,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "scenario/pom.xml",
    "chars": 879,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/client/BroadcastSubscribe.java",
    "chars": 3173,
    "preview": "package com.messagebus.scenario.client;\n\nimport com.messagebus.client.IMessageReceiveListener;\nimport com.messagebus.cli"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/client/ClientUnderMultiThread.java",
    "chars": 4789,
    "preview": "package com.messagebus.scenario.client;\n\nimport com.messagebus.client.Messagebus;\nimport com.messagebus.client.Messagebu"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/client/ProduceConsume.java",
    "chars": 4748,
    "preview": "package com.messagebus.scenario.client;\n\nimport com.messagebus.client.IMessageReceiveListener;\nimport com.messagebus.cli"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/client/PublishSubscribe.java",
    "chars": 2626,
    "preview": "package com.messagebus.scenario.client;\n\nimport com.messagebus.client.IMessageReceiveListener;\nimport com.messagebus.cli"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/client/RequestResponse.java",
    "chars": 3174,
    "preview": "package com.messagebus.scenario.client;\n\nimport com.google.common.base.Strings;\nimport com.messagebus.client.IRequestLis"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/client/XSLTTestCase.java",
    "chars": 1018,
    "preview": "package com.messagebus.scenario.client;\n\nimport javax.xml.transform.Source;\nimport javax.xml.transform.Transformer;\nimpo"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/httpBridge/ProduceConsume.java",
    "chars": 5342,
    "preview": "package com.messagebus.scenario.httpBridge;\n\nimport com.messagebus.client.message.model.Message;\nimport com.messagebus.c"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/httpBridge/PublishSubscribe.java",
    "chars": 3447,
    "preview": "package com.messagebus.scenario.httpBridge;\n\nimport com.google.gson.Gson;\nimport com.messagebus.client.message.model.Mes"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/httpBridge/RequestTemplate.java",
    "chars": 2712,
    "preview": "package com.messagebus.scenario.httpBridge;\n\nimport com.messagebus.client.message.model.Message;\nimport com.messagebus.c"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/httpBridge/ResponseTemplate.java",
    "chars": 6610,
    "preview": "package com.messagebus.scenario.httpBridge;\n\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.Lo"
  },
  {
    "path": "scenario/src/main/java/com/messagebus/scenario/util/PropertiesHelper.java",
    "chars": 615,
    "preview": "package com.messagebus.scenario.util;\n\nimport java.io.IOException;\nimport java.util.Properties;\n\n/**\n * Created by yangh"
  },
  {
    "path": "scenario/src/main/resources/common.properties",
    "chars": 143,
    "preview": "messagebus.pubsuber.host=172.16.206.250\nmessagebus.pubsuber.port=6379\n\nmessagebus.httpbridge.host=172.16.206.28\nmessageb"
  },
  {
    "path": "scenario/src/main/resources/consumerSchema.xml",
    "chars": 2129,
    "preview": "<?xml version=\"1.0\" ?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n    <xs:element name=\"XS\">\n        <xs:co"
  },
  {
    "path": "scenario/src/main/resources/pToc.xsl",
    "chars": 1020,
    "preview": "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n    <xsl:output method=\"xml\" indent=\"yes"
  },
  {
    "path": "scenario/src/main/resources/producerSchema.xml",
    "chars": 1773,
    "preview": "<?xml version=\"1.0\" ?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n    <xs:element name=\"student\">\n        <"
  },
  {
    "path": "scenario/src/main/resources/producerXml.xml",
    "chars": 712,
    "preview": "<?xml version=\"1.0\" ?>\n<student xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLoca"
  }
]

About this extraction

This page contains the full source code of the yanghua/banyan GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 177 files (488.5 KB), approximately 114.3k tokens, and a symbol index with 1214 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!