Trong bài viết trước, mình đã giới thiệu với các bạn về Spring Cloud Stream với cơ chế binding có thể dễ dàng giúp chúng ta gửi và nhận message tới một message broker bất kỳ, một cách tự động. Nếu các bạn muốn gửi message tới message broker manually thì các bạn có thể sử dụng class StreamBridge của Spring Cloud Stream bằng cách ingest bean của class StreamBridge này và sử dụng phương thức send() của nó để gửi message. Ví dụ như sau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package com.huongdanjava.springcloudstream; import java.util.function.Consumer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.function.StreamBridge; import org.springframework.context.annotation.Bean; @SpringBootApplication public class SpringCloudStreamRabbitmqExampleApplication { @Autowired private StreamBridge streamBridge; static void main(String[] args) { SpringApplication.run(SpringCloudStreamRabbitmqExampleApplication.class, args); } @Bean CommandLineRunner runner() { return args -> { streamBridge.send("sendSupplier-out-0", "Hello World"); }; } @Bean public Consumer<String> receiveConsumer() { return message -> { System.out.println("Received: " + message); }; } } |
Có 2 tham số trong phương thức send(), như các bạn thấy ở trên:
- Tham số đầu tiên là logical binding name mà các bạn cấu hình trong tập tin application.yaml, như mình đã chia sẻ với các bạn ở bài viết trước :
|
1 2 3 4 5 6 7 8 9 |
spring: cloud: stream: bindings: sendSupplier-out-0: destination: message.exchange receiveConsumer-in-0: destination: message.exchange group: huongdanjava |
Với cấu hình như trên, Spring sẽ tự động bind “logical binding name” mà mình đã truyền trong phương thức send() với exchange trong RabbitMQ, nhờ đó mà Spring có thể gửi message được đó các bạn!
- Tham số thứ 2 là message mà các bạn muốn gửi.
Kết quả khi mình chạy ví dụ của mình như sau:

Nếu các bạn truyền thông tin binding name sai, ví dụ như:
|
1 |
streamBridge.send("sendSupplier1-out-0", "Hello World"); |
thì một exchange cũng sẽ được khởi tạo trong RabbitMQ:

nhưng bởi vì không có thông tin queue nên nếu các bạn có gửi message thì message này cũng sẽ bị mất nha các bạn!
