43cd3feb6b99ff8bcf01148a59029529b14dbf73
[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.ves.VesEventOuterClass.VesEvent;
24 import org.reactivestreams.Publisher;
25
26 /**
27  * <p>Main High Volume VES producer interface.</p>
28  *
29  * <p>Client code should use this interface for sending events to the endpoint configured when calling
30  * {@link HvVesProducerFactory#create(ProducerOptions)}.</p>
31  *
32  * <p>Sample usage with <a href="https://projectreactor.io/">Project Reactor</a>:</p>
33  *
34  * <pre>
35  *     ProducerOptions options = {@link ImmutableProducerOptions}.builder(). ... .build()
36  *     HvVesProducer hvVes = {@link HvVesProducerFactory}.create(options);
37  *
38  *     Flux.just(msg1, msg2, msg3)
39  *          .transform(hvVes::send)
40  *          .subscribe();
41  * </pre>
42  *
43  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
44  * @since 1.1.1
45  */
46 @FunctionalInterface
47 public interface HvVesProducer {
48     /**
49      * Send the messages to the collector.
50      *
51      * Returns a Publisher that completes when all the messages are sent. The returned Publisher fails with an error in
52      * case of any problem with sending the messages.
53      *
54      * @param messages source of the messages to be sent
55      * @return empty publisher which completes after messages are sent or error occurs
56      * @since 1.1.1
57      */
58     @NotNull Publisher<Void> send(Publisher<VesEvent> messages);
59 }