bunny-rest-proxy: 基於RabbitMQ的微服務非同步API
Bunny REST Proxy 是一個構建在 RabbitMQ 之上的 HTTP 訊息代理。它允許服務透過 HTTP 輕鬆地將訊息釋出到 RabbitMQ 佇列,並使用拉 (HTTP GET) 和推送 (HTTP POST 到訂閱者) 交付模式來使用訊息。
雖然 RabbitMQ 通常用作微服務之間的非同步通訊手段,但有時您需要使用更簡單的 REST API 釋出訊息或使用訊息,而不會影響訊息傳遞保證。
特徵
- 透過 REST API 將訊息釋出到 RabbitMQ 佇列中,使用帶有釋出者確認的通道實現可靠的訊息傳遞
- 支援二進位制和 JSON 訊息(帶有伺服器端模式驗證)
- 透過 HTTP 將訊息推送到定義的訂閱者,確保至少一次交付語義,並具有可配置的退避策略和死信策略
- 使用佇列中的訊息 HTTP GET 請求
- 基於單個 YAML 檔案的直接配置
詳細點選標題
作者意圖與專案上下文背景:
使用AMQP連線並不總是方便/可行的,所以我最終在Node.js中建立了一個HTTP訊息代理(推/拉消費;至少一次/最多一次的語義),在RabbitMQ之上,有點類似於AWS SQS;Bunny REST Proxy
事後總結:
在最近的一個專案中,我正致力於將兩個現有的傳統Web應用程式、CRM系統和IoT裝置連線到一個基於微服務的後端,該後端使用RabbitMQ作為非同步通訊的手段。我很快就遇到了一個重要的問題,即從各種指令碼能力有限的地方釋出訊息(其中AMQP客戶端不可用,但HTTP客戶端可用)。雖然 RabbitMQ 的管理外掛暴露了一個允許釋出訊息的 HTTP API,但事實證明,它並沒有實現可靠的訊息傳遞。因此,在一些罕見的故障情況下,它有可能向客戶端傳送確認訊息交付的響應,儘管它並沒有在代理中持久化,這在分散式系統中是一個大忌,因為它的目標是實現至少一次的訊息交付語義。為了緩解這種情況,我決定用我最喜歡的堆疊(Fastify + Typescript)編寫一個簡單的 Node.js 應用程式,它將充當一個代理,暴露 REST API 以將訊息釋出到 RabbitMQ 佇列中。
在實現了一個用於將訊息釋出到 RabbitMQ 的赤裸裸的 REST 代理之後,我遇到了一些用例,在這些用例中,透過 HTTP GET 消費訊息或以類似 webhook 的方式將它們自動推送到 HTTP POST 端點是有益的。這時我決定將現有的Node應用變成一個開源專案。在實現了訂閱者和消費者之後,它基本上變成了一個建立在RabbitMQ之上的HTTP訊息代理。
到目前為止,Bunny REST Proxy具有一些更高階的功能,如6種不同的回退策略(用於延遲訊息交付重試)和3種不同的死信策略(指定如何處理超過最大交付重試次數的訊息)。在釋出者方面,它可以驗證訊息是否符合指定的模式(如果是JSON釋出者)。它還具有ACL風格的授權,可橫向擴充套件,其整個配置可由一個yaml檔案提供。
相關文章
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- 基於Golang的微服務——ConsulGolang微服務
- 基於graphql的微服務基礎框架微服務框架
- 基於Golang的微服務——上手篇Golang微服務
- 基於Spring Cloud的微服務落地SpringCloud微服務
- 探索解析微服務下的RabbitMQ微服務MQ
- 使用TypeScript和nextjs實現基於CQRS的微服務的銀行API原始碼TypeScriptNextJS微服務API原始碼
- Dubbo 入門系列之基於 Dubbo API 開發微服務應用API微服務
- 基於kubernetes平臺微服務的部署微服務
- 基於 swoole 下 非同步佇列 API非同步佇列API
- 基於Jenkins釋出微服務Jenkins微服務
- 微服務基礎——厲害了!API閘道器微服務API
- laravel微服務開發,整合rabbitmqLaravel微服務MQ
- 基於 Spring Cloud 的微服務腳手架SpringCloud微服務
- 基於 prometheus 的微服務指標監控Prometheus微服務指標
- 基於Golang的微服務——Micro實踐(一)Golang微服務
- 基於Golang的微服務——Micro實踐(二)Golang微服務
- 基於SpringCloud的微服務架構設計SpringGCCloud微服務架構
- 基於gRPC、API閘道器和身份驗證的Go微服務原始碼專案RPCAPIGo微服務原始碼
- 教你玩轉微服務--基於DDD的微服務架構落地實踐之路微服務架構
- GRIT:eBay基於微服務的分散式事務協議微服務分散式協議
- 基於Spring Cloud微服務叢集的服務治理思考SpringCloud微服務
- 微服務架構基礎之API閘道器微服務架構API
- 微服務--API版本控制微服務API
- Spring Cloud微服務-基於Eureka的feign呼叫(1)SpringCloud微服務
- 讓ERP的服務更開放! ——用微服務架構搭建的一套基於EBS的API服務系統微服務架構API
- 如何基於gRPC溝通微服務框架RPC微服務框架
- 基於 swoole 的 websocket 服務一:狀態同步Web
- 微服務痛點-基於Dubbo + Seata的分散式事務(AT)模式微服務分散式模式
- 基於 mysql 非同步驅動的非阻塞 Mybatis 瞭解一下MySql非同步MyBatis
- 微服務之間通過RabbitMQ通訊微服務MQ
- 基於surging的木舟平臺如何構建起微服務微服務
- 基於JWT規範實現的認證微服務JWT微服務
- 如何管理基於微服務的分散式應用程式微服務分散式
- 基於 swoole 的 websocket 服務實現狀態同步Web
- SpringCloud微服務:基於Nacos元件,整合Dubbo框架SpringGCCloud微服務元件框架
- SpringCloud微服務(基於Eureka+Feign+Hystrix+Zuul)SpringGCCloud微服務Zuul
- 微服務架構 | 4.2 基於 Feign 與 OpenFeign 的服務介面呼叫微服務架構