Cloud Pub/Sub
Google Cloud Pub/Sub allows services to communicate asynchronously, with latency on the order of 100 milliseconds.
Pub/Sub is used for streaming analytics and data integration pipelines to ingest and distribute data. It is equally effective as a messaging- oriented middleware for service integration or as a queue to parallelised tasks.
Pub/Sub enables to create systems of event producers and consumers, called publishers and subscribers. Publishers communicate with subscribers asynchronously by broadcasting events, rather than by synchronous remote procedure calls (RPCs).
Springboot with Cloud Pub/Sub
Spring Cloud GCP provides an abstraction layer to publish and subscribe from Google Cloud Pub/Sub topics and to create, list or delete Google Cloud Pub/Sub topics and subscriptions.
A Spring Boot starter is provided to auto-configure the various required Pub/Sub components.
Maven Configuration:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-pubsub</artifactId>
</dependency>
Gradle Configuration:
dependencies {
implementation("org.springframework.cloud:spring-cloud-gcp-starter-pubsub")
}
Application Configuration
Properties from the properties file always have precedence over the Spring Boot configuration. The following configuration need to connect GCP pub/sub.
spring.cloud.gcp.project-id= <GCP_PROJECT_ID>
spring.cloud.gcp.credentials.location= <LOCAL_CREDENTIALS_PATH>
Set up Google Cloud Pub/Sub
Send and receive messages from Google Cloud Pub/Sub, we can create them in the Google Cloud Console or, pragmatically, with the PubSubAdmin class.
GCP Console
Let’s create a topic called “gcpTopicDemo” under project let’s Demo Cloud Pub-Sub
GCP Subscriber Configuration
PubSubTemplate
is Spring’s abstraction to subscribe to Google Cloud Pub/Sub topics. The Spring Cloud GCP Pub/Sub Boot starter provides an auto-configured PubSubTemplate
instance which can simply inject as a method argument.
@Bean
public PubSubInboundChannelAdapter incommingMessageChannelAdapter(
@Qualifier("GCPInputChannel") MessageChannel inputChannel,
PubSubTemplate pubSubTemplate) {
PubSubInboundChannelAdapter adapter =
new PubSubInboundChannelAdapter(pubSubTemplate, "gcpTopicDemo");
adapter.setOutputChannel(inputChannel);
return adapter;
}
This service to process incoming messages.
@Bean
@ServiceActivator(inputChannel = "GCPInputChannel")
public MessageHandler messageReceiver() {
return message -> {
LOGGER.info("Message received: " + new String((byte[]) message.getPayload()));
BasicAcknowledgeablePubsubMessageoriginalMessage=message.getHeaders().get(GcpPubSubHeaders.ORIGINAL_MESSAGE,BasicAcknowledgeablePubsubMessage.class);
};
}
GCP Publisher Configuration
PubSubTemplate is Spring’s abstraction to publish messages to Google Cloud Pub/Sub topics. The Spring Cloud GCP Pub/Sub Boot starter provides an auto-configured PubSubTemplate instance.
@Bean
@ServiceActivator(inputChannel = "GCPOutputChannel")
public MessageHandler messageSender(PubSubTemplate pubsubTemplate) {
return new PubSubMessageHandler(pubsubTemplate, "gcpTopicDemo");
}
This method publisher the message into the topic
@Autowired
private PubsubOutboundGateway messagingGateway;
public void publishMessage(@RequestParam("message") String message) {
messagingGateway.sendToPubsub(message);
}
Create a jar and executable
We can run the application from the command line with Gradle or Maven or build a executable JAR file that contains all the necessary dependencies, classes, and resources and run that.
>> java -jar spring-gcp-pubsub.jar
In this blog i have covered basic understanding of GCP pub/sub, created topic from GCP console and integration with spring-boot with configuration.