3359e54bb02d299498efcca325f948207f5b0b1f
[dcaegen2/services/sdk.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * DCAEGEN2-SERVICES-SDK
4  * ================================================================================
5  * Copyright (C) 2019 Nokia. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api;
21
22 import org.jetbrains.annotations.NotNull;
23 import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api.options.ProducerOptions;
24 import org.onap.ves.VesEventOuterClass.VesEvent;
25 import org.reactivestreams.Publisher;
26
27 /**
28  * <p>Main High Volume VES producer interface.</p>
29  *
30  * <p>Client code should use this interface for sending events to the endpoint configured when calling
31  * {@link HvVesProducerFactory#create(ProducerOptions)}.</p>
32  *
33  * <p>Sample usage with <a href="https://projectreactor.io/">Project Reactor</a>:</p>
34  *
35  * <pre>
36  *     ProducerOptions options = ImmutableProducerOptions.builder(). ... .build()
37  *     HvVesProducer hvVes = {@link HvVesProducerFactory}.create(options);
38  *
39  *     Flux.just(msg1, msg2, msg3)
40  *          .transform(hvVes::send)
41  *          .subscribe();
42  * </pre>
43  *
44  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
45  * @see org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api.options.ImmutableProducerOptions
46  * @since 1.1.1
47  */
48 @FunctionalInterface
49 public interface HvVesProducer {
50     /**
51      * Send the messages to the collector.
52      *
53      * Returns a Publisher that completes when all the messages are sent. The returned Publisher fails with an error in
54      * case of any problem with sending the messages.
55      *
56      * Each invocation of this method will yield a new TCP connection. It is recommended to call this method only once
57      * feeding it with a stream of consecutive events.
58      *
59      * @param messages source of the messages to be sent
60      * @return empty publisher which completes after messages are sent or error occurs
61      * @since 1.1.1
62      */
63     @NotNull Publisher<Void> send(Publisher<VesEvent> messages);
64 }