kafka+觀察者模式,實現高效能事件匯流排
一個事件匯流排的實現,主要包含三個角色:1、訊息釋出 2、訊息佇列 3、訊息派送
訊息佇列可以有多種選擇,redis,kafka,rocketMQ等,甚至是jdk blockQueue。
但作為一個工業級的設計,我們需要考慮幾點:
1、高效能 2、高可用 3、平滑擴容 4、架構對開發者透明
1、2、3取決於你用什麼訊息佇列,4 取決於你採用哪種設計模式進行解耦
經過對比,這裡採用了kafka作為我們的事件匯流排的關鍵核心部件,下面著重談下設計模式進行解耦:
這裡說的解耦,指的是普通程式設計師使用事件匯流排的時候,他們是不需要關心事件匯流排採用的是什麼訊息伺服器,他們只面向介面程式設計,並不關心細節。同理,這也為事件匯流排日後升級提供了便利,也就是說,日後從kafka更換成更好的訊息伺服器,業務系統是不需要做任何的修改,透明切換。
具體到程式碼層設計,採用觀察者模式作為訊息派發的基礎,最為合適不過。熟悉spring的朋友應該知道,spring其實內建了一套觀察者模式的支援,我們就無需自己重新寫了,但需要定義一些自己的抽象介面去整合一下, 具體介面設計如下:
訊息事件:EventObject <--- AppMsg
事件監聽器:EventListener <--- AppMsgEventListener
事件釋出器:AppEventPublisher
抽象消費者:Consumer
以上就是一個事件匯流排最基礎的雛形,事件匯流排在網際網路系統中舉足輕重,各系統之間的解耦,非同步訊息推送,傳送郵件,簡訊,日誌大規模採集,分散式最終一致性事務等都需要用到。
相關推薦
kafka+觀察者模式,實現高效能事件匯流排
一個事件匯流排的實現,主要包含三個角色:1、訊息釋出 2、訊息佇列 3、訊息派送 訊息佇列可以有多種選擇,redis,kafka,rocketMQ等,甚至是jdk blockQueue。 但作為一個工業級的設計,我們需要考慮幾點: 1、高效能 2、高可用 3、平滑
python實現英雄聯盟的觀察者模式,這種操作可謂是聞所未聞!
觀察者模式(有時又被稱為模型-檢視(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。 這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理
Unity之C#——委託與事件,觀察者模式,貓和老鼠事例
委託與事件,觀察者模式,貓和老鼠事例 在Unity遊戲開發中,我們經常需要在一個類中,呼叫另一個類中的方法,比如,當玩家進入到某個地方,敵人就開始攻擊玩家。這時就需要利用委託與事件,設計觀察者模式。 此處我們利用貓和老鼠來簡單描述: 程式碼如下: Ca
js學習心得之js的自定義事件-基於觀察者模式的實現
GOF對觀察者模式的定義:Observer的意圖是定義物件之間的一種一(被觀察者)對多(觀察者)的關係,當一個物件的狀態發生改變時,所有依賴它的物件得到通知,並且會自動更新自己。 從這段經典的定義中,可以推測下,觀察者模式中的倆個物件各自應該擁有的特徵 1,被觀察者應該可以
Android異步框架RxJava 1.x系列(一) - 觀察者模式及實現
from 預覽 目錄 ole 普通 清零 handler 使用 tps Android異步框架RxJava 1.x系列(一) - 觀察者模式及實現 前言 RxJava 是一款基於 Java VM 實現的響應式編程擴展庫 - 基於觀察者模式的異步和事件處理框架。RxJava
RxJava中觀察者模式的實現
一、RxJava簡介 RxJava官方的解釋如下: 要想了解RxJava首先需要了解Rx,Rx的全稱是reactive extension,翻譯一下就是響應式擴充套件,Rx是基於觀察者模式的一種程式設計模型,目標是提供一致的程式設計介面,幫助開發者更方便地處理非同步資料流,Rx滲透到了各種語
cocos中的觀察者模式 以及"點選事件"的註冊和分發(個人理解)
一、控制元件的點選事件註冊與完成 在學習cocos引擎時,感覺觸控事件用的比較頻繁。 於是對各種觸控事件做一些小小的總結: cocos中的控制元件(按鈕,精靈,各種容器等)。在實際開發中發現他們都是可以新增點選事件的,可以通過設定setTouchEnabled()來開啟點
php 運用設計模式:觀察者模式,設計電商平臺支付成功程式|Github倉庫
前(fei)言(hua) 在支付程式中,大型專案的維護,如果沒有運用到設計模式,面向過程的程式設計,order程式會日益增加,程式看上去雜亂無章,今天寫了一個小demo ,之前沒有運用過觀察者模式的小夥伴們,可以瞭解一下。 學到什麼 學會了這種設計模式,會讓你的程式碼清晰明瞭
Java 使用動態代理和觀察者模式+threadlocal實現資料庫連線池
當我們使用資料庫連線池時,如果多執行緒連線資料庫時,當超過5個執行緒連線資料庫時,那麼在第6個執行緒包括之後就連線不到資料庫了,該怎麼處理。 這裡用了java動態代理來這裡用了java的動態代理來代理資料庫的連線,攔截連線的close方法。並且給代理的連線加上一
用觀察者模式,傳遞廣播中收的值
前言: 最近專案中有用到廣播,需要接收到廣播傳過來的值,在指定頁面上使用是不是很簡單呢,沒錯,這時候有人說可以寫區域性廣播啊,哪個頁面需要用到哪個頁面寫廣播啊,沒錯這的確是一個方法,但是如果說有五個頁面你能五個都寫麼。這時候又會有人說,那就用全域性啊,對 小白就是用的全域性。那麼我們如
談談JS的觀察者模式(自定義事件)
觀察者模式: 這是一種建立鬆散耦合程式碼的技術。它定義物件間 一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都將得到通知。由主體和觀察者組成,主體負責釋出事件,同時觀察者通過訂閱這些事件來觀察該主體。主體並不知道觀察者的任何事情,觀察者知
設計模式之觀察者模式(Python實現)
下面介紹在學習《深入淺出設計模式》中的第二個設計模式:觀察者模式 先定義一下觀察者模式:觀察者模式定義了物件之間的一對多依賴,這樣當一個物件改變狀態時,它的所有物件都會收到依賴並且自動更新。 具體的示例請看下圖: 觀察者模式在實際應用中被使用的相當廣泛。這種設計模式體現了
Android 設計模式——觀察者模式,單例模式,Build模式,原型模式,命令模式
1、實現Build步驟 1、建立實體類 2、建立實體內部build類 3、實體內部類返回實體類 4、實體類建立內部類建構函式 /** * 作者:created by meixi * 郵箱:[email protected] * 日期:2018/12/14
C# 觀察者模式,兩個應用例項程式碼
C# 觀察者模式,兩個應用例項程式碼# 介紹 觀察者模式的目的:定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。 主要解決:一個物件狀態改變給其他物件通知的問題,而且要考慮到易用和低耦合,保證高度的協作。 何時
vue 設計模式之觀察者模式(自定義事件)
vue 中 觀察者模式,用於子元件向父元件傳遞引數,即子元件 emit自定義一個事件名稱,及其引數,父元件用事件接受即可,事件第一個引數為自定義事件名稱,第二個引數為回撥函式 子元件程式碼為 <template> <div>
觀察者模式,監控變數的變化
Java使用觀察者模式監控想監控的變數的變化 下面是老大類裡面的一個變數變了,小弟能收到通知,並執行對應的內容 package com.lin; import java.util.Observable; import java.util.Obse
行為型設計模式(職責鏈模式,命令模式,中介者模式,觀察者模式,訪問者模式)
職責鏈模式 主要用於使多個物件都有機會處理請求,避免請求的的傳送者和接受者之間的耦合關係。在現實生活中我們多數遇到的是不純的責任鏈模式即每個物件都處理請求的一部分後再交給下家。而純的職責鏈模式則要求對於一個請求,要不處理要不就交給下家。具體理解呢。我們可以想一下“擊鼓傳花”
設計模式--單例模式,觀察者模式,介面卡模式
設計模式的分類: 1.建立型模式: 與物件建立有關.單例模式 2.結構型模式:處理類或物件的組合.裝飾模式,介面卡模式 3.行為型模式:描述類或物件如何互動及如何分配職責.觀察者模式,策略模式 看c++的構造方法,無意中想到,構造方法要定義為public的,這樣才可以在ma
觀察者模式,釋出訂閱和事件驅動程式設計
觀察者模式三要素: 目標-->貓 觀察者--->老鼠、人 事件-- >貓大叫一聲 目標內部有個容器,註冊觀察者 在java.util中observable實現了觀察者模式, 有個vector類屬性
觀察者模式,無需多執行緒完成資料監聽
大家好,我們今天來了解一個新的設計模式——觀察者模式。 觀察者模式的思路很簡單,它被廣泛地用在各種資料監控上。很多時候我們希望監聽某個資料的變化,希望一旦獲悉它的變化之後立即採取一些舉措。按照常規的操作,我們需要開啟額外的執行緒來進行監聽。但是開啟執行緒一則非常麻煩,二則需要帶來額外的開銷,我們今天介紹的觀察