SpringCloud學習之Stream消息驅動【自定義通道】(十一)


如果不清楚本篇內容的,請務必先去看完上一篇再看本篇,否則閱讀起來可能會有部分障礙和困難;

上一篇文章《SpringCloud學習之Stream消息驅動【默認通道】(十)》我們簡單用自定義通道實現了消息發送和接收,但是用的是Stream給我們提供的默認Source,Sink,接下來我們要自己進行自定義,這種方式在工作中還是用的比較多的,因為我們要往不同的消息通道發消息,必然不能全都叫input,output的,那樣的話就亂套了

(一)創建消息生產者【service-sender-stream-8089】

MySource.java

package com.xu.serviceconsumer.interfaces;

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;

public interface MySource {

    String INPUT_CHANNEL = "myInput";
    String OUTPUT_CHANNEL = "myOutput";

    /**
     * 輸入通道
     * @return
     */
    @Input(MySource.INPUT_CHANNEL)
    SubscribableChannel input();

    /**
     * 輸出通道
     * @return
     */
    @Output(MySource.OUTPUT_CHANNEL)
    MessageChannel output();

}

application.yml

server:
  port: 8089
spring:
  application:
    name: spring-cloud-stream-sender
  cloud:
    stream:
      binders:
        defaultRabbit:
          type: rabbit
          environment: #配置rabbimq連接環境
            spring:
              rabbitmq:
                host: localhost
                username: guest
                password: guest
                virtual-host: /
      bindings:
        myOutput:       #自定義輸出通道
          destination: stream-demo       #exchange名稱,交換模式默認是topic
          content-type: text/plain       #消息發送的格式,接收端不用指定格式,但是發送端要

 

發送消息接口不變

接口實現需要重新改造:

 

(二)消息消費者【service-consumer-stream-8090和service-consumer-stream-8091】

這兩個消費客戶端的配置基本一模一樣的,只是application.yml中的端口略有不同

 

因為我們這個測試項目沒有公共依賴模塊,所以暫時把消息生產端中的MySource.java這個自定義通道類文件復制放到兩個客戶端模塊里

 

我們還要重新改造消息消費者里的代碼,接口定義不變:

重新Rebuild三個項目模塊,然后重新啟動三個模塊,打開消息生產者swagger頁面http://localhost:8089/swagger-ui.html重新生產一個消息到消息隊列,我們依舊可以看到兩個客戶端也接收到了發送過來的消息:

至此我們完成了自定義通道消息發送和接收,spring cloud stream還有很多東西(比如分組group和分區partition),后面有空我再深入了解后補充說明,謝謝大家。

===============================================================================

如果您覺得此文有幫助,可以打賞點錢給我支付寶或掃描二維碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM