All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.cloud.pubsub.PushConfig Maven / Gradle / Ivy

/*
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * 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;

import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * Google Cloud Pub/Sub configuration for a push subscription.
 *
 * 

In a push subscription, the Pub/Sub server sends a request to the subscriber application. A * {@code PushConfig} object can be used to configure the application endpoint. The subscriber's * HTTP response serves as an implicit acknowledgement: a success response indicates that the * message has been succesfully processed and the Pub/Sub system can delete it from the * subscription; a non-success response indicates that the Pub/Sub server should resend it * (implicit "nack"). * * @see Subscriber Guide */ public final class PushConfig implements Serializable { private static final long serialVersionUID = 4408885787064092231L; private final String endpoint; private final ImmutableMap attributes; /** * Builder for {@code PushConfig} objects. */ public static final class Builder { private String endpoint; private Map attributes = new HashMap<>(); private Builder() { } /** * Sets the URL locating the endpoint to which messages should be pushed. For example, an * endpoint might use {@code https://example.com/push}. */ public Builder endpoint(String endpoint) { this.endpoint = checkNotNull(endpoint); return this; } /** * Adds an API-supported attribute that can be used to control different aspects of the message * delivery. * *

The currently supported attribute is {@code x-goog-version}, which can be used to change * the format of the push message. This attribute indicates the version of the data expected by * the endpoint. The endpoint version is based on the version of the Pub/Sub API. Possible * values for this attribute are: *

    *
  • {@code v1beta1}: uses the push format defined in the v1beta1 Pub/Sub API *
  • {@code v1} or {@code v1beta2}: uses the push format defined in the v1 Pub/Sub API *
* *

If the {@code x-goog-version} attribute is not present when a subscription is created (see * {@link PubSub#create(SubscriptionInfo)} and {@link PubSub#createAsync(SubscriptionInfo)}), it * will default to {@code v1}. If it is not present when modifying the push config (see * {@link PubSub#replacePushConfig(String, PushConfig)} and * {@link PubSub#replacePushConfigAsync(String, PushConfig)}), its value will not be changed. * * @see Message Format */ public Builder addAttribute(String name, String value) { attributes.put(name, value); return this; } /** * Sets the API-supported attributes that can be used to control different aspects of the * message delivery. * *

The currently supported attribute is {@code x-goog-version}, which can be used to change * the format of the push message. This attribute indicates the version of the data expected by * the endpoint. The endpoint version is based on the version of the Pub/Sub API. Possible * values for this attribute are: *

    *
  • {@code v1beta1}: uses the push format defined in the v1beta1 Pub/Sub API *
  • {@code v1} or {@code v1beta2}: uses the push format defined in the v1 Pub/Sub API *
* *

If the {@code x-goog-version} attribute is not present when a subscription is created (see * {@link PubSub#create(SubscriptionInfo)} and {@link PubSub#createAsync(SubscriptionInfo)}), it * will default to {@code v1}. If it is not present when modifying the push config (see * {@link PubSub#replacePushConfig(String, PushConfig)} and * {@link PubSub#replacePushConfigAsync(String, PushConfig)}), its value will not be changed. * * @see Message Format */ public Builder attributes(Map attributes) { this.attributes = new HashMap<>(attributes); return this; } /** * Removes an API-supported attribute. */ public Builder removeAttribute(String name) { attributes.remove(name); return this; } /** * Clears all API-supported attributes. */ public Builder clearAttributes() { attributes.clear(); return this; } /** * Creates a {@code PushConfig} object. */ public PushConfig build() { return new PushConfig(this); } } private PushConfig(Builder builder) { endpoint = builder.endpoint; attributes = ImmutableMap.copyOf(builder.attributes); } /** * Returns the URL locating the endpoint to which messages should be pushed. For example, an * endpoint might use {@code https://example.com/push}. */ public String endpoint() { return endpoint; } /** * Returns the API-supported attributes that can be used to control different aspects of the * message delivery. * *

The currently supported attribute is {@code x-goog-version}, which can be used to change * the format of the push message. This attribute indicates the version of the data expected by * the endpoint. The endpoint version is based on the version of the Pub/Sub API. Possible * values for this attribute are: *

    *
  • {@code v1beta1}: uses the push format defined in the v1beta1 Pub/Sub API *
  • {@code v1} or {@code v1beta2}: uses the push format defined in the v1 Pub/Sub API *
* *

If the {@code x-goog-version} attribute is not present when a subscription is created (see * {@link PubSub#create(SubscriptionInfo)} and {@link PubSub#createAsync(SubscriptionInfo)}), it * will default to {@code v1}. If it is not present when modifying the push config (see * {@link PubSub#replacePushConfig(String, PushConfig)} and * {@link PubSub#replacePushConfigAsync(String, PushConfig)}), its value will not be changed. * * @see Message Format */ public Map attributes() { return attributes; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof PushConfig)) { return false; } PushConfig other = (PushConfig) obj; return Objects.equals(endpoint, other.endpoint) && Objects.equals(attributes, other.attributes); } @Override public int hashCode() { return Objects.hash(endpoint, attributes); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("attributes", attributes) .add("endpoint", endpoint) .toString(); } /** * Returns a builder for the {@code PushConfig} object. */ public Builder toBuilder() { return builder(endpoint, attributes); } /** * Creates a {@code PushConfig} object given the push endpoint. * * @param endpoint the URL locating the endpoint to which messages should be pushed. For example, * an endpoint might use {@code https://example.com/push}. */ public static PushConfig of(String endpoint) { return builder(endpoint).build(); } /** * Creates a {@code PushConfig} object given the push endpoint and the API-supported attributes * that can be used to control different aspects of the message delivery. * * @param endpoint the URL locating the endpoint to which messages should be pushed. For example, * an endpoint might use {@code https://example.com/push}. * @param attributes API supported attributes used to control message delivery. See * {@link Builder#attributes(Map)} for more details. */ public static PushConfig of(String endpoint, Map attributes) { return builder(endpoint, attributes).build(); } /** * Creates a builder for {@code PushConfig} objects given the push endpoint. * * @param endpoint the URL locating the endpoint to which messages should be pushed. For example, * an endpoint might use {@code https://example.com/push}. */ public static Builder builder(String endpoint) { return new Builder().endpoint(endpoint); } /** * Creates a builder for {@code PushConfig} objects given the push endpoint and the API-supported * attributes that can be used to control different aspects of the message delivery. * * @param endpoint the URL locating the endpoint to which messages should be pushed. For example, * an endpoint might use {@code https://example.com/push}. * @param attributes API supported attributes used to control message delivery. See * {@link Builder#attributes(Map)} for more details. */ public static Builder builder(String endpoint, Map attributes) { return builder(endpoint).attributes(attributes); } com.google.pubsub.v1.PushConfig toPb() { return com.google.pubsub.v1.PushConfig.newBuilder().setPushEndpoint(endpoint) .putAllAttributes(attributes).build(); } static PushConfig fromPb(com.google.pubsub.v1.PushConfig pushConfigPb) { return builder(pushConfigPb.getPushEndpoint(), pushConfigPb.getAttributes()).build(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy