前提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 主要是使用binder跟binding
看圖可知 ,通過binder綁定消息中間件, 通過input跟output兩個通道進行消息的接收跟發送
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());
}
}
到此 你啓動 應用後 調用接口 就會 收到發送的消息了