Trong bài viết trước, mình đã hướng dẫn các bạn cách publish message vào Google Pub/Sub topic sử dụng thư viện Pub/Sub client. Sử dụng thư viện Spring Cloud GCP PubSub sẽ giúp chúng ta làm việc này đơn giản hơn rất nhiều. Cụ thể như thế nào? Trong bài viết này, mình sẽ hướng dẫn các bạn cách publish message vào Google Pub/Sub topic sử dụng Spring Cloud GCP PubSub các bạn nhé!
Đầu tiên, mình sẽ tạo mới một Spring Boot project với GCP Messaging dependency:
để làm ví dụ.
Kết quả:
Điều đầu tiên mình cần nói với các bạn là Spring Cloud GCP PubSub cung cấp cho chúng ta một interface tên là PubSubOperations để làm việc với Google Pub/Sub.
Implementation của interface này là class PubSubTemplate và behind the sense thì class PubSubTemplate này cũng sử dụng thư viện Google PubSub client để làm việc với Google Pub/Sub.
Sử dụng Spring Cloud GCP Starter PubSub sẽ giúp chúng ta giảm bớt các bước cấu hình để có thể làm việc với Google Pub/Sub dễ dàng hơn.
Để làm ví dụ, mình sẽ implement interface CommandLineRunner cho class SpringGcpPubsubPublishApplication để chạy ứng dụng Spring Boot với Java console như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.huongdanjava.springgcppubsub.publish; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringGcpPubsubPublishApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(SpringGcpPubsubPublishApplication.class, args); } @Override public void run(String... args) throws Exception { } } |
Giờ thì chúng ta chỉ cần inject đối tượng của class PubSubTemplate và sử dụng phương thức publish() của đối tượng này để publish message.
Có nhiều phương thức overloading cho phương thức publish() này. Mình sẽ sử dụng phương thức publish() có 2 tham số theo thứ tự là topic ID và đối tượng PubSubMessage của thư viện Google PubSub client, cụ thể 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 36 37 38 39 40 |
package com.huongdanjava.springgcppubsub.publish; 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.util.concurrent.ListenableFuture; import com.google.cloud.spring.pubsub.core.PubSubTemplate; import com.google.protobuf.ByteString; import com.google.pubsub.v1.PubsubMessage; @SpringBootApplication public class SpringGcpPubsubPublishApplication implements CommandLineRunner { @Autowired private PubSubTemplate pubSubTemplate; public static void main(String[] args) { SpringApplication.run(SpringGcpPubsubPublishApplication.class, args); } @Override public void run(String... args) throws Exception { String topicId = "huongdanjava"; String message = "Hello"; ByteString data = ByteString.copyFromUtf8(message); // @formatter:off PubsubMessage pubsubMessage = PubsubMessage.newBuilder() .setData(data) .build(); // @formatter:on ListenableFuture<String> listenableFuture = pubSubTemplate.publish(topicId, pubsubMessage); String messageId = listenableFuture.get(); System.out.println("Published message ID: " + messageId); } } |
Như các bạn thấy, Spring Cloud GCP PubSub sử dụng một interface khác để lấy kết quả của việc publish message ListenableFuture. Interface này cũng extends từ interface Future của Java mà thôi các bạn! Và chúng ta cũng ko cần truyền thông tin project ID trong trường hợp này.
Cho phần authentication với GCP Pub/Sub, ngoài sử dụng biến môi trường GOOGLE_APPLICATION_CREDENTIALS, Spring Boot hỗ trợ thêm chúng ta một property khác tên là spring.cloud.gcp.credentials.location.
Các bạn chỉ cần cấu hình property này với giá trị trỏ tới tập tin Service Account key là được!
1 |
spring.cloud.gcp.credentials.location=file:/Users/khanh/Downloads/crested-trainer-341707-3c56ce84473e.json |
Trong trường hợp này, các bạn cần cấu hình thêm thông tin project ID nữa:
1 |
spring.cloud.gcp.project-id=crested-trainer-341707 |
Trong ví dụ của bài viết này, mình sẽ chạy project với cấu hình biến môi trường GOOGLE_APPLICATION_CREDENTIALS:
Kiểm tra Google Pub/Sub topic, các bạn sẽ thấy kết quả như sau: