高吞吐量的Java事件匯流排:MBassador

banq發表於2017-06-13
MBassador是一款在多執行緒環境中為高吞吐量而最佳化的功能豐富的java事件匯流排。註解驅動、同步/非同步事件釋出,強/弱引用,動態事件過濾。

MBassador是實現釋出/訂閱模式的輕量,高效能的事件匯流排。它主要為了能易於使用的豐富的和可擴充套件的功能,同時保持資源效率和效能。

MBassador的高效能核心是一種專門的資料結構,可提供無阻塞的讀寫器,並最大限度地減少寫入者的鎖爭用,從而將讀/寫併發訪問效能的損耗降低到最小化。

MBassador的程式碼是生產就緒的:86%的指令覆蓋率,82%的分支覆蓋率,高度隨機和同時執行的測試集,在過去18個月中沒有報告嚴重的錯誤。在不徹底測試程式碼的情況下,不會對核心進行任何修改。

使用很簡單,bus = new MBassador()建立單例,配置訊息處理器使用@[author][author][author]Handler[/author][/author]註解[/author],然後將其註冊到匯流排中bus.subscribe(aListener),這樣就可以開始傳送訊息bus.post(message).now() 或bus.post(message).asynchronously().

// Define your handlers

@ Listener(references = References.Strong)
class SimpleFileListener{

    @ Handler
    public void handle(File file){
      // do something with the file
    }
    
    @ Handler(delivery = Invoke.Asynchronously)
    public void expensiveOperation(File file){
      // do something with the file
    }
    
    @ Handler(condition = "msg.size >= 10000")
    @ Enveloped(messages = {HashMap.class, LinkedList.class})
    public void handleLarge(MessageEnvelope envelope) {
       // handle objects without common super type
    }

}

// somewhere else in your code

MBassador bus = new MBassador();
bus.subscribe (new SimpleFileListener());
bus.post(new File("/tmp/smallfile.csv")).now();
bus.post(new File("/tmp/bigfile.csv")).asynchronously();
<p class="indent">


GitHub - bennidi/mbassador: A feature-rich Java ev

效能測試:https://blog.gotofinal.com/java/diorite/benchmark/2017/06/11/event-bus.html

[該貼被banq於2017-06-13 22:23修改過]

相關文章