天天看點

叢集通信元件tribes之應用程式處理入口

        Tribes為了更清晰更好地劃分職責,它被設計成用IO層和應用層,IO層專心負責網絡傳輸方面的邏輯處理,把接收到的資料往應用層傳送,當然應用層發送的資料也是通過此IO層發送,資料傳往應用層後必須要留一些處理入口供應用層進行邏輯處理,而考慮系統解耦,這個入口最好的方式是使用監聽器模式,在底層發生各種事件時觸發所有安裝好的監聽器,使之執行監聽器裡面的處理邏輯。這些事件主要包含了叢集成員的加入和退出、消息封包接收完畢等資訊,是以整個消息流轉過程被分成兩類監聽器,一類是跟叢集成員的變化相關的監聽器MembershipListener,另外一類是跟叢集消息接收發送相關的監聽器ChannelListener。應用層隻要關注這兩個接口就行了,寫好各種處理邏輯的監聽器添加到通道中即可。

        下面是這兩個監聽器的接口,從接口定義的方法可以很清晰地看到各個方法被調用的時機,MembershipListener類型中memberadd是有成員加入時調用的方法,memberDisappeared是成員退出時調用的方法,ChannelListener類型中accept用于判斷是否接受消息,messageReceived用于對消息處理的方法,應用層把邏輯分别寫到這幾個方法就可以在對應時刻執行相應的邏輯。

public interface MembershipListener {

    public void memberAdded(Member member);

    public void memberDisappeared(Member member);

}

public interface ChannelListener {

    public void messageReceived(Serializable msg, Member sender);

    public boolean accept(Serializable msg, Member sender);

叢集通信元件tribes之應用程式處理入口

        我們可以在應用層自定義若幹監聽器并且添加到GroupChannel中的兩個監聽器清單中,GroupChannel其實可以看成是一個封裝了IO層的抽象容器,它會在各個适當的時期周遊監聽器清單中的所有監聽器并調用監聽器對應的方法,即執行應用層定義的業務邏輯,至此完成了資料從IO層流向應用層并完成處理。兩種類型的監聽器給應用層提供了處理入口,應用層隻需關注邏輯處理,而其他的IO操作則交由IO層,這兩層通過監聽器模式串聯起來,優雅地将子產品解耦。

<a target="_blank" href="https://item.jd.com/12185360.html">點選訂購作者《Tomcat核心設計剖析》</a>

繼續閱讀