Springcloud整合stream,rabbitmq實現消息驅動功能
springcloud整合stream,rabbitmq實現消息驅動功能
1.代碼實現:
創(chuàng)建項目stream
添加依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.cxh</groupId> <artifactId>stream</artifactId> <version>0.0.1-SNAPSHOT</version> <name>stream</name> <description>Demo project for Spring Boot</description> <properties> <java.version>8</java.version> <spring-cloud-alibaba-dependencies.version>2021.1</spring-cloud-alibaba-dependencies.version> <spring-cloud-dependencies.version>2021.0.0</spring-cloud-dependencies.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud-dependencies.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba-dependencies.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> </dependencies>
監(jiān)聽類
@EnableBinding(Sink.class) public class SinkReceiver { private static Logger logger = LoggerFactory.getLogger(SinkReceiver.class); @StreamListener(Sink.INPUT) public void receive(String payload) { logger.info("Received: " + payload); } }
2.實現效果:
啟動rabbitmq, 項目stream
打開瀏覽器http://localhost:15672/,使用賬號密碼guest登錄rabbitmq, 在隊列中發(fā)現消息:
測試send
查看控制臺消息:
com.cxh.stream.SinkReceiver : Received: 測試send
補充
Spring Cloud Stream專門用于事件驅動的微服務系統(tǒng),使用消息中間件來收發(fā)信息。使用Spring Cloud Stream可專注于業(yè)務開發(fā),而不用花太多心思在應用與MQ之間的交互上。而且,在切換MQ后,也無須做太多的代碼改動。
所以Spring Cloud Stream和RabbitMQ還可以整合實現消息的收發(fā)
整合過程
添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency>
不同的MQ使用不同的依賴,非常容易切換。
定義處理收發(fā)的方法
隊列無非就是收和發(fā),所以我們要先定義好,怎么樣發(fā),怎么樣收。
發(fā)送消息:
@Bean public Supplier<String> pkslowSource() { return () -> { String message = "www.pkslow.com"; log.info("Sending value: " + message); return message; }; }
只發(fā)送一個String
,一般業(yè)務通常為Entity類。這里發(fā)送的內容也固定不變,實際業(yè)務可以通過查數據庫,讀文件等方式獲取數據源。
接收消息:
@Bean public Consumer<String> pkslowSink() { return message -> { log.info("Received message " + message); }; }
直接打印消息即可,項目中的邏輯可按具體業(yè)務實現。
配置屬性
配置RabbitMQ:
spring:
rabbitmq:
host: localhost
port: 5672
username: pkslow
password: 123456
配置Spring Cloud Stream
的相關項:
spring:
cloud:
stream:
function:
definition: pkslowSource;pkslowSink
bindings:
pkslowSource-out-0:
destination: pkslow-topic
pkslowSink-in-0:
destination: pkslow-topic
poller:
fixed-delay: 500
spring.cloud.stream.function.definition
會定義處理方法,如本文的收發(fā)消息的方法;
bindings
配置對應的function
;destination指向MQ的主題;
這里配了一個poller
,每隔500ms就會發(fā)送一次消息。
運行
先啟動個RabbitMQ:
docker run \ -e RABBITMQ_DEFAULT_USER=pkslow \ -e RABBITMQ_DEFAULT_PASS=123456 \ -p 5672:5672 -p 15672:15672 \ rabbitmq:3.8-management
運行程序后,會自己創(chuàng)建主題、發(fā)送信息、接收信息:
運行日志如下:
可以看到每一次發(fā)/收大概是間隔了500ms,當然不可能是精確的500ms。
以上就是Springcloud整合stream,rabbitmq實現消息驅動功能的詳細內容,更多關于Springcloud stream rabbitmq消息驅動的資料請關注腳本之家其它相關文章!
相關文章
spring如何集成cxf實現webservice接口功能詳解
這篇文章主要給大家介紹了關于spring如何集成cxf實現webservice接口功能的相關資料,文中通過示例代碼介紹的非常詳細,對大家 的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧2018-07-07繼承JpaRepository后,找不到findOne()方法的解決
這篇文章主要介紹了繼承JpaRepository后,找不到findOne()方法的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08基于Spring Boot不同的環(huán)境使用不同的配置方法
下面小編就為大家分享一篇基于Spring Boot不同的環(huán)境使用不同的配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01