SpringCloud 訊息驅動

2021-10-07 10:07:37 字數 3265 閱讀 6978

spring cloud stream由乙個中介軟體中立的核組成。應用通過spring cloud stream插入的input(相當於

消費者consumer,它是從佇列中接收訊息的)和output(相當於生產者producer,它是從佇列中傳送消

息的。)通道與外界交流。通道通過指定中介軟體的binder實現與外部**連線。業務開發者不再關注具

體訊息中介軟體,只需關注binder對應用程式提供的抽象概念來使用訊息中介軟體實現業務即可。

1、新建專案,新增pom依賴

org.springframework.cloud

spring-cloud-starter-stream-rabbit

2、編寫配置檔案

server:

port: 8801

spring:

name: stream-rabbitmq-provider

cloud:

stream:

binders: # 在此處配置要繫結的rabbitmq的服務資訊;

defaultrabbit: # 表示定義的名稱,用於於binding整合

type: rabbit # 訊息元件型別

environment: # 設定rabbitmq的相關的環境配置

spring:

rabbitmq:

host: ***.***.***.***

port: 5672

username: guest

password: guest

bindings: # 服務的整合處理

output: # 這個名字是乙個通道的名稱

destination: studyexchange # 表示要使用的exchange名稱定義

default-binder: defaultrabbit # 設定要繫結的訊息服務的具體設定

3、編寫service

@enablebinding(source.class)

@slf4j

public class messageserviceimpl implements messageservice

}4、編寫controller

@autowired

private messageservice service;

@value("$")

private string port;

public string sendmsg()

5、訪問rabbitmq的15672埠可以看到傳送的資訊波峰

1、新建專案,新增pom依賴

org.springframework.cloud

spring-cloud-starter-stream-rabbit

2、編寫配置檔案

server:

port: 8803

spring:

name: stream-rabbitmq-consumer

cloud:

stream:

binders: # 在此處配置要繫結的rabbitmq的服務資訊;

defaultrabbit: # 表示定義的名稱,用於於binding整合

type: rabbit # 訊息元件型別

bindings: # 服務的整合處理

myinput: # 這個名字是乙個通道的名稱

destination: studyexchange # 表示要使用的exchange名稱定義

default-binder: defaultrabbit # 設定要繫結的訊息服務的具體設定

注意上面的bindings下的myinput可以自己指定名字,提供者使用的output可以通過source.class直接引用,如果使用自定義的名字,需要編寫乙個介面:

3、編寫介面

public inte***ce mystream

4、編寫消費者類

@component

@enablebinding(mystream.class)

@slf4j

public class recevicemessagecontroller ")

private string port;

@streamlistener(mystream.myinput)

public void input(messagemsg)

}注意這裡的@enablebinding(mystream.class)不是用的sink.class,sink.class引用的名字為input,此處使用的是自定義名字。

5、啟動提供者和消費者,提供者傳送資訊,消費者可以接收到。

1、將上述消費者clone乙份,發現傳送訊息會被消費兩次,因為廣播的型別是topic,凡是訂閱的都可以接收

2、在兩個消費者的配置檔案上給其分組,新增相同的group即可

spring:

cloud:

stream:

bindings: # 服務的整合處理

myinput: # 這個名字是乙個通道的名稱

group: groupa

3、相同的分組之間只會被乙個消費者消費,例如出現第三個消費者,分組是groupb,傳送訊息後,第一和第二個消費者只有乙個人可以消費到訊息,第三個消費者可以一直收到資訊,因為他自己一組。

1、沒有被分組的消費者在關閉服務的時候傳送訊息,啟動消費者不會收到已經傳送的訊息

2、被分組的消費者在關閉服務的時候傳送訊息,啟動消費者會收到之前已經傳送的訊息

SpringCloud之訊息匯流排

spring cloud bus通過輕量訊息 連線各個分布的節點。這會用在廣播狀態的變化 例如配置變化 或者其他的訊息指令。spring bus的乙個核心思想是通過分布式的啟動器對spring boot應用進行擴充套件,也可以用來建立乙個多個應用之間的通訊頻道。目前唯一實現的方式是用amqp訊息 作...

Spring Cloud 訊息匯流排 Bus

spring cloud bus 是用輕量的訊息中介軟體將分布式的節點連線起來,可以用於廣播配置檔案的更改或者服務的監控管理。關鍵的思想就是,訊息匯流排可以為微服務做監控,也可以實現應用程式之間相通訊。spring cloud bus 可選的訊息中介軟體包括 rabbitmq 和 kafka rab...

SpringCloud 之Bus訊息匯流排

流程總結 架構優化 之前使用actuator監控中心完成重新整理功能,但是在config client服務端需要傳送post請求來手動重新整理,如果config client有很多的話,那麼需要乙個乙個地傳送post請求,這顯然是不現實的做法。使用訊息佇列中的topic,通過訊息實現通知。目前spr...