訊息驅動Stream的基本概念與實操

2021-10-09 12:58:27 字數 2879 閱讀 1175

利用訊息驅動,我們可以不再關注具體哪個mq中介軟體的細節,我們只需要一種適配繫結的方式,自動的給我們在各種mq內進行切換

遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型

標準流程

生產者傳送訊息

pom檔案引入依賴

>

>

org.springframework.cloudgroupid

>

>

spring-cloud-starter-stream-rabbitartifactid

>

dependency

>

yml檔案中stream和rabbitmq進行繫結

spring

:cloud

:stream

:binders

:# 配置要繫結的rabbitmq的服務資訊

defaultrabbit

:# 自定義的名稱,用於與bindings集合

type

: rabbit # 訊息元件的型別

environment

:# 設定rabbitmq的環境

spring

:# rabbitmq配置

rabbitmq

:host

: localhost

port

:5672

username

: guest

password

: guest

bindings

:# 服務的整合處理

output

:# 表示生產者

destination

: studyexchange # 通道的名稱

content-type

binder

: defaultrabbit # 繫結訊息服務的具體設定

service實現訊息的傳送

@enablebinding

(source.

class

)// 定義訊息的推送

public

class

messageserviceimpl

implements

messageservice

}

消費者消費訊息

4. pom檔案引入依賴

>

>

org.springframework.cloudgroupid

>

>

spring-cloud-starter-stream-rabbitartifactid

>

dependency

>

yml檔案中stream和rabbitmq進行繫結

spring

:cloud

:stream

:binders

:# 配置要繫結的rabbitmq的服務資訊

defaultrabbit

:# 自定義的名稱,用於與bindings集合

type

: rabbit # 訊息元件的型別

environment

:# 設定rabbitmq的環境

spring

:# rabbitmq配置

rabbitmq

:host

: localhost

port

:5672

username

: guest

password

: guest

bindings

:# 服務的整合處理

input

:# 表示消費者

destination

: studyexchange # 通道的名稱

content-type

binder

: defaultrabbit # 繫結訊息服務的具體設定

實現訊息的接收

@component

@enablebinding

(sink.

class

)public

class

messagecontroller")

private string serverport;

@streamlistener

(sink.input)

public

void

getmessage

(message

message)

}

問題:多個消費者訂閱同乙個生產者,出現重複消費的情況

解決:在yml檔案中增加group配置(與上yml檔案對齊)

bindings

:# 服務的整合處理

input

:# 表示消費者

destination

: studyexchange # 通道的名稱

content-type

binder

: defaultrabbit # 繫結訊息服務的具體設定

group

: xlj-a # 消費者分組

group屬性同時還能夠解決持久化的問題,是個重要的屬性

訊息佇列(Message Queue)基本概念

之前做日誌收集模組時,用到flume。另外也有的方案,整合kafaka來提公升系統可擴充套件性,其中涉及到訊息佇列當時自己並不清楚為什麼要使用訊息佇列。而在我自己提出的原始日誌採集方案中不適用訊息佇列時,有幾個基本問題 1.日誌檔案上傳過程,有個基本的生產者 消費者問題 2.另外系統崩潰時,資料丟失...

OC之訊息基本概念

要說清楚訊息這個話題,我們必須先來了解三個概念 class,sel,imp,它們在 objc objc.h 中定義 typedef struct objc class class typedef struct objc object id typedef struct objc selector s...

訊息佇列技術之基本概念

最近一直在總結azure messaging servicebus messaging相關的技術 訊息順序 訊息持久化 複雜物件訊息的序列化 訊息事務 訊息回執等機制。感覺有必要補充一篇訊息佇列技術的基本概念,無論rabbitmq activemq還是其他,都有的一些基本概念 術語 機制,分享給大家...