blob: 484d9c82b0e8d320ae7678b8ae5b2946aff6a656 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.pulsar.client.api;
import java.io.Closeable;
import java.util.concurrent.CompletableFuture;
import org.apache.pulsar.client.impl.v1.PulsarClientV1Impl;
/**
* Class that provides a client interface to Pulsar.
* <p>
* Client instances are thread-safe and can be reused for managing multiple {@link Producer}, {@link Consumer} and
* {@link Reader} instances.
*/
public interface PulsarClient extends Closeable {
/**
* Create a new PulsarClient object using default client configuration.
*
* @param serviceUrl
* the url of the Pulsar endpoint to be used
* @return a new pulsar client object
* @throws PulsarClientException.InvalidServiceURL
* if the serviceUrl is invalid
* @deprecated use {@link #builder()} to construct a client instance
*/
@Deprecated
static PulsarClient create(String serviceUrl) throws PulsarClientException {
return create(serviceUrl, new ClientConfiguration());
}
/**
* Create a new PulsarClient object.
*
* @param serviceUrl
* the url of the Pulsar endpoint to be used
* @param conf
* the client configuration
* @return a new pulsar client object
* @throws PulsarClientException.InvalidServiceURL
* if the serviceUrl is invalid
* @deprecated use {@link #builder()} to construct a client instance
*/
@Deprecated
static PulsarClient create(String serviceUrl, ClientConfiguration conf) throws PulsarClientException {
return new PulsarClientV1Impl(serviceUrl, conf);
}
/**
* Create a producer with default {@link ProducerConfiguration} for publishing on a specific topic.
*
* @param topic
* The name of the topic where to produce
* @return The producer object
* @throws PulsarClientException.AlreadyClosedException
* if the client was already closed
* @throws PulsarClientException.InvalidTopicNameException
* if the topic name is not valid
* @throws PulsarClientException.AuthenticationException
* if there was an error with the supplied credentials
* @throws PulsarClientException.AuthorizationException
* if the authorization to publish on topic was denied
* @deprecated use {@link #newProducer()} to build a new producer
*/
@Deprecated
Producer createProducer(String topic) throws PulsarClientException;
/**
* Asynchronously create a producer with default {@link ProducerConfiguration} for publishing on a specific topic.
*
* @param topic
* The name of the topic where to produce
* @return Future of the asynchronously created producer object
* @deprecated use {@link #newProducer()} to build a new producer
*/
@Deprecated
CompletableFuture<Producer> createProducerAsync(String topic);
/**
* Create a producer with given {@code ProducerConfiguration} for publishing on a specific topic.
*
* @param topic
* The name of the topic where to produce
* @param conf
* The {@code ProducerConfiguration} object
* @return The producer object
* @throws PulsarClientException
* if it was not possible to create the producer
* @throws InterruptedException
* @deprecated use {@link #newProducer()} to build a new producer
*/
@Deprecated
Producer createProducer(String topic, ProducerConfiguration conf) throws PulsarClientException;
/**
* Asynchronously create a producer with given {@code ProducerConfiguration} for publishing on a specific topic.
*
* @param topic
* The name of the topic where to produce
* @param conf
* The {@code ProducerConfiguration} object
* @return Future of the asynchronously created producer object
* @deprecated use {@link #newProducer()} to build a new producer
*/
@Deprecated
CompletableFuture<Producer> createProducerAsync(String topic, ProducerConfiguration conf);
/**
* Subscribe to the given topic and subscription combination with default {@code ConsumerConfiguration}.
*
* @param topic
* The name of the topic
* @param subscription
* The name of the subscription
* @return The {@code Consumer} object
* @throws PulsarClientException
* @throws InterruptedException
*
* @deprecated Use {@link #newConsumer()} to build a new consumer
*/
@Deprecated
Consumer subscribe(String topic, String subscription) throws PulsarClientException;
/**
* Asynchronously subscribe to the given topic and subscription combination using default.
* {@code ConsumerConfiguration}
*
* @param topic
* The topic name
* @param subscription
* The subscription name
* @return Future of the {@code Consumer} object
* @deprecated Use {@link #newConsumer()} to build a new consumer
*/
@Deprecated
CompletableFuture<Consumer> subscribeAsync(String topic, String subscription);
/**
* Subscribe to the given topic and subscription combination with given {@code ConsumerConfiguration}.
*
* @param topic
* The name of the topic
* @param subscription
* The name of the subscription
* @param conf
* The {@code ConsumerConfiguration} object
* @return The {@code Consumer} object
* @throws PulsarClientException
* @deprecated Use {@link #newConsumer()} to build a new consumer
*/
@Deprecated
Consumer subscribe(String topic, String subscription, ConsumerConfiguration conf) throws PulsarClientException;
/**
* Asynchronously subscribe to the given topic and subscription combination using given.
* {@code ConsumerConfiguration}
*
* @param topic
* The name of the topic
* @param subscription
* The name of the subscription
* @param conf
* The {@code ConsumerConfiguration} object
* @return Future of the {@code Consumer} object
* @deprecated Use {@link #newConsumer()} to build a new consumer
*/
@Deprecated
CompletableFuture<Consumer> subscribeAsync(String topic, String subscription, ConsumerConfiguration conf);
/**
* Create a topic reader with given {@code ReaderConfiguration} for reading messages from the specified topic.
* <p>
* The Reader provides a low-level abstraction that allows for manual positioning in the topic, without using a
* subscription. Reader can only work on non-partitioned topics.
* <p>
* The initial reader positioning is done by specifying a message id. The options are:
* <ul>
* <li><code>MessageId.earliest</code> : Start reading from the earliest message available in the topic
* <li><code>MessageId.latest</code> : Start reading from the end topic, only getting messages published after the
* reader was created
* <li><code>MessageId</code> : When passing a particular message id, the reader will position itself on that
* specific position. The first message to be read will be the message next to the specified messageId.
* </ul>
*
* @param topic
* The name of the topic where to read
* @param startMessageId
* The message id where the reader will position itself. The first message returned will be the one after
* the specified startMessageId
* @param conf
* The {@code ReaderConfiguration} object
* @return The {@code Reader} object
* @deprecated Use {@link #newReader()} to build a new reader
*/
@Deprecated
Reader createReader(String topic, MessageId startMessageId, ReaderConfiguration conf) throws PulsarClientException;
/**
* Asynchronously create a topic reader with given {@code ReaderConfiguration} for reading messages from the
* specified topic.
* <p>
* The Reader provides a low-level abstraction that allows for manual positioning in the topic, without using a
* subscription. Reader can only work on non-partitioned topics.
* <p>
* The initial reader positioning is done by specifying a message id. The options are:
* <ul>
* <li><code>MessageId.earliest</code> : Start reading from the earliest message available in the topic
* <li><code>MessageId.latest</code> : Start reading from the end topic, only getting messages published after the
* reader was created
* <li><code>MessageId</code> : When passing a particular message id, the reader will position itself on that
* specific position. The first message to be read will be the message next to the specified messageId.
* </ul>
*
* @param topic
* The name of the topic where to read
* @param startMessageId
* The message id where the reader will position itself. The first message returned will be the one after
* the specified startMessageId
* @param conf
* The {@code ReaderConfiguration} object
* @return Future of the asynchronously created producer object
* @deprecated Use {@link #newReader()} to build a new reader
*/
@Deprecated
CompletableFuture<Reader> createReaderAsync(String topic, MessageId startMessageId, ReaderConfiguration conf);
/**
* Close the PulsarClient and release all the resources.
*
* All the producers and consumers will be orderly closed. Waits until all pending write request are persisted.
*
* @throws PulsarClientException
* if the close operation fails
*/
@Override
void close() throws PulsarClientException;
/**
* Asynchronously close the PulsarClient and release all the resources.
*
* All the producers and consumers will be orderly closed. Waits until all pending write request are persisted.
*
* @throws PulsarClientException
* if the close operation fails
*/
CompletableFuture<Void> closeAsync();
/**
* Perform immediate shutdown of PulsarClient.
*
* Release all the resources and close all the producers without waiting for ongoing operations to complete.
*
* @throws PulsarClientException
* if the forceful shutdown fails
*/
void shutdown() throws PulsarClientException;
}