From 89fcc8848cc7d421e8dde9b7dca28a6940d8386f Mon Sep 17 00:00:00 2001 From: dpcollins-google <40498610+dpcollins-google@users.noreply.github.com> Date: Fri, 10 Apr 2020 17:13:48 -0400 Subject: [PATCH] feat: add interfaces for cloud pubsub publishers and subscribers (#134) --- .../com/google/cloud/pubsub/v1/Publisher.java | 3 +- .../cloud/pubsub/v1/PublisherInterface.java | 53 +++++++++++++++++++ .../google/cloud/pubsub/v1/Subscriber.java | 2 +- .../cloud/pubsub/v1/SubscriberInterface.java | 26 +++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java create mode 100644 google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java index 659d84bb6..282df369f 100644 --- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java @@ -85,7 +85,7 @@ *

{@link Publisher} will use the credentials set on the channel, which uses application default * credentials through {@link GoogleCredentials#getApplicationDefault} by default. */ -public class Publisher { +public class Publisher implements PublisherInterface { private static final Logger logger = Logger.getLogger(Publisher.class.getName()); private final String topicName; @@ -226,6 +226,7 @@ public String getTopicNameString() { * @param message the message to publish. * @return the message ID wrapped in a future. */ + @Override public ApiFuture publish(PubsubMessage message) { Preconditions.checkState(!shutdown.get(), "Cannot publish on a shut-down publisher."); diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java new file mode 100644 index 000000000..80a465053 --- /dev/null +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java @@ -0,0 +1,53 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.pubsub.v1.PubsubMessage; + +/** + * An interface for a Cloud Pub/Sub publisher. + */ +public interface PublisherInterface { + /** + * Schedules the publishing of a message. The future will be returned with the message ID on + * success or an exception on failure. + * + *

Example of publishing a message. + * + *

{@code
+   * String message = "my_message";
+   * ByteString data = ByteString.copyFromUtf8(message);
+   * PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
+   * ApiFuture messageIdFuture = publisher.publish(pubsubMessage);
+   * ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback() {
+   *   public void onSuccess(String messageId) {
+   *     System.out.println("published with message id: " + messageId);
+   *   }
+   *
+   *   public void onFailure(Throwable t) {
+   *     System.out.println("failed to publish: " + t);
+   *   }
+   * }, MoreExecutors.directExecutor());
+   * }
+ * + * @param message the message to publish. + * @return the message ID wrapped in a future. + */ + ApiFuture publish(PubsubMessage message); +} diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java index 8baaf2472..0054408ee 100644 --- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java @@ -90,7 +90,7 @@ * href="https://github.com/google/guava/wiki/ServiceExplained">Guava documentation for more * details. */ -public class Subscriber extends AbstractApiService { +public class Subscriber extends AbstractApiService implements SubscriberInterface { private static final int THREADS_PER_CHANNEL = 5; private static final int MAX_INBOUND_MESSAGE_SIZE = 20 * 1024 * 1024; // 20MB API maximum message size. diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java new file mode 100644 index 000000000..e97e9141f --- /dev/null +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java @@ -0,0 +1,26 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiService; + +/** + * The core interface for a Cloud Pub/Sub subscriber, consisting only of + * ApiService methods. + */ +public interface SubscriberInterface extends ApiService {}