Search in sources :

Example 1 with KafkaProducerRecord

use of io.vertx.kafka.client.producer.KafkaProducerRecord in project hono by eclipse.

the class AbstractKafkaBasedMessageSender method sendAndWaitForOutcome.

/**
 * Sends a message to a Kafka broker and waits for the outcome.
 *
 * @param topic The topic to send the message to.
 * @param tenantId The tenant that the device belongs to.
 * @param deviceId The device identifier.
 * @param payload The data to send or {@code null} if the message has no payload.
 * @param headers Additional meta data that should be included in the message.
 * @param currentSpan The <em>OpenTracing</em> span used to use for tracking the sending of the message.
 *             The span will <em>not</em> be finished by this method.
 * @return A future indicating the outcome of the operation.
 *         <p>
 *         The future will be succeeded if the message has been sent.
 *         <p>
 *         The future will be failed with a {@link org.eclipse.hono.client.ServerErrorException} if the data could
 *         not be sent. The error code contained in the exception indicates the cause of the failure.
 * @throws NullPointerException if topic, tenantId, deviceId, headers or span are {@code null}.
 */
protected final Future<Void> sendAndWaitForOutcome(final String topic, final String tenantId, final String deviceId, final Buffer payload, final List<KafkaHeader> headers, final Span currentSpan) {
    Objects.requireNonNull(topic);
    Objects.requireNonNull(tenantId);
    Objects.requireNonNull(deviceId);
    Objects.requireNonNull(headers);
    Objects.requireNonNull(currentSpan);
    if (stopped) {
        return Future.failedFuture(new ServerErrorException(HttpURLConnection.HTTP_UNAVAILABLE, "sender already stopped"));
    }
    final KafkaProducerRecord<String, Buffer> record = KafkaProducerRecord.create(topic, deviceId, payload);
    log.trace("sending message to Kafka [topic: {}, tenantId: {}, deviceId: {}]", topic, tenantId, deviceId);
    record.addHeaders(headers);
    KafkaTracingHelper.injectSpanContext(tracer, record, currentSpan.context());
    logProducerRecord(currentSpan, record);
    return getOrCreateProducer().send(record).onSuccess(recordMetadata -> logRecordMetadata(currentSpan, deviceId, recordMetadata)).otherwise(t -> {
        logError(currentSpan, topic, tenantId, deviceId, t);
        throw new ServerErrorException(tenantId, getErrorCode(t), t);
    }).mapEmpty();
}
Also used : Buffer(io.vertx.core.buffer.Buffer) HttpURLConnection(java.net.HttpURLConnection) Json(io.vertx.core.json.Json) RecordMetadata(io.vertx.kafka.client.producer.RecordMetadata) Lifecycle(org.eclipse.hono.util.Lifecycle) LoggerFactory(org.slf4j.LoggerFactory) KafkaClientFactory(org.eclipse.hono.client.kafka.KafkaClientFactory) Tags(io.opentracing.tag.Tags) KafkaProducer(io.vertx.kafka.client.producer.KafkaProducer) ArrayList(java.util.ArrayList) Status(io.vertx.ext.healthchecks.Status) MessagingType(org.eclipse.hono.util.MessagingType) HealthCheckHandler(io.vertx.ext.healthchecks.HealthCheckHandler) References(io.opentracing.References) Map(java.util.Map) TracingHelper(org.eclipse.hono.tracing.TracingHelper) MessagingClient(org.eclipse.hono.util.MessagingClient) Strings(org.eclipse.hono.util.Strings) KafkaTracingHelper(org.eclipse.hono.client.kafka.tracing.KafkaTracingHelper) Logger(org.slf4j.Logger) Tracer(io.opentracing.Tracer) ServerErrorException(org.eclipse.hono.client.ServerErrorException) UUID(java.util.UUID) KafkaRecordHelper(org.eclipse.hono.client.kafka.KafkaRecordHelper) Instant(java.time.Instant) MessageHelper(org.eclipse.hono.util.MessageHelper) Collectors(java.util.stream.Collectors) Future(io.vertx.core.Future) SpanContext(io.opentracing.SpanContext) Objects(java.util.Objects) List(java.util.List) ServiceClient(org.eclipse.hono.client.util.ServiceClient) Buffer(io.vertx.core.buffer.Buffer) EncodeException(io.vertx.core.json.EncodeException) Span(io.opentracing.Span) KafkaHeader(io.vertx.kafka.client.producer.KafkaHeader) KafkaProducerRecord(io.vertx.kafka.client.producer.KafkaProducerRecord) ServerErrorException(org.eclipse.hono.client.ServerErrorException)

Aggregations

References (io.opentracing.References)1 Span (io.opentracing.Span)1 SpanContext (io.opentracing.SpanContext)1 Tracer (io.opentracing.Tracer)1 Tags (io.opentracing.tag.Tags)1 Future (io.vertx.core.Future)1 Buffer (io.vertx.core.buffer.Buffer)1 EncodeException (io.vertx.core.json.EncodeException)1 Json (io.vertx.core.json.Json)1 HealthCheckHandler (io.vertx.ext.healthchecks.HealthCheckHandler)1 Status (io.vertx.ext.healthchecks.Status)1 KafkaHeader (io.vertx.kafka.client.producer.KafkaHeader)1 KafkaProducer (io.vertx.kafka.client.producer.KafkaProducer)1 KafkaProducerRecord (io.vertx.kafka.client.producer.KafkaProducerRecord)1 RecordMetadata (io.vertx.kafka.client.producer.RecordMetadata)1 HttpURLConnection (java.net.HttpURLConnection)1 Instant (java.time.Instant)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Map (java.util.Map)1