srping cloud stream rocketmq

前提rocketmq已啓動

第一步
導入spring cloud的依賴 決定使用哪個版本

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Finchley.SR2</version>
    <type>pom</type>
</dependency>

第二步
引入 spring cloud stream的依賴

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream</artifactId>
			<version>2.1.0.RELEASE</version>
		</dependency>

第三步
加入 spring cloud rocketmq 的依賴

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rocketmq</artifactId>
			<version>0.2.1.RELEASE</version>
		</dependency>

至此 基礎操作就完成了

然後修改application爲yml 開始編寫測試用例

rocketmq對spring cloud stream 實現的步驟
在這裏插入圖片描述

使用spring cloud stream 主要是使用binderbinding
在這裏插入圖片描述
看圖可知 ,通過binder綁定消息中間件, 通過inputoutput兩個通道進行消息的接收跟發送

binder表示綁定具體哪一個消息中間件

Binding: 包括 Input Binding 和 Output Binding。 Binding 在消息中間件與應用程序提供的
Provider 和 Consumer 之間提供了一個橋樑,實現了開發者只需使用應用程序的 Provider 或 Consumer
生產或消費數據即可,屏蔽了開發者與底層消息中間件的接觸。

我們會用到@input 跟@output兩個註解
@input表示消費者通道(訂閱)

@output是生產者通道(生產消息)

註解配置rocketmq的地址
因爲 stream可以接入多個消息中間件 可以設置默認 中間件


spring:
  cloud:
    stream:
      rocketmq:
        binder:
          namesrv-addr: 127.0.0.1:9876
   default-binder: rocketmq   

設置input output 這裏的名字可以自己定義 需要跟註解定義的對應起來

	 rocketmq:
        binder:
          namesrv-addr: 127.0.0.1:9876
      bindings:
          input1:
            destination: test-topic
            content-type: application/json
            group: test-group
          output1:
             destination: test-topic
             content-type: application/json

binding跟rocketmq同級

自定義output input 原本又source.class跟sink.class定義了 這裏我們自定義嘗試下

public interface StreamClient {

    @Input("input1")
    SubscribableChannel input1();

    @Output("output1")
    MessageChannel output1();
}

這裏假使你@input 註解跟@output註解 引號內字符串一致,就會報無效的錯誤

編寫接收者

@Component
@EnableBinding(StreamClient.class)
@Slf4j
public class MQReciver {

    @StreamListener("input1")
    public void test(String message){       
        log.info(message);
    }
}

編寫消息發送者 這列我們通過controller 調用

@RestController
@RequestMapping("test")
public class MQRest {

    @Autowired
    StreamClient streamClient;

    @GetMapping("mq")
    public void test(){
        String now = "now" + new Date();
        streamClient.output1().send(MessageBuilder.withPayload(now).build());
    }
}

到此 你啓動 應用後 調用接口 就會 收到發送的消息了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章