Search in sources :

Example 1 with MessagingClientProvider

use of org.eclipse.hono.client.util.MessagingClientProvider in project hono by eclipse.

the class ApplicationConfig method eventSenderProvider.

/**
 * Creates a client for publishing events via the configured messaging systems.
 *
 * @return The client.
 */
@Bean
@Scope("prototype")
public MessagingClientProvider<EventSender> eventSenderProvider() {
    final MessagingClientProvider<EventSender> result = new MessagingClientProvider<>();
    if (downstreamSenderConfig().isHostConfigured()) {
        result.setClient(new ProtonBasedDownstreamSender(HonoConnection.newConnection(vertx(), downstreamSenderConfig(), tracer()), SendMessageSampler.Factory.noop(), true, true));
    }
    if (kafkaEventConfig().isConfigured()) {
        final KafkaProducerFactory<String, Buffer> factory = CachingKafkaProducerFactory.sharedFactory(vertx());
        result.setClient(new KafkaBasedEventSender(vertx(), factory, kafkaEventConfig(), true, tracer()));
    }
    healthCheckServer().registerHealthCheckResources(ServiceClientAdapter.forClient(result));
    return result;
}
Also used : Buffer(io.vertx.core.buffer.Buffer) MessagingClientProvider(org.eclipse.hono.client.util.MessagingClientProvider) ProtonBasedDownstreamSender(org.eclipse.hono.client.telemetry.amqp.ProtonBasedDownstreamSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender) EventSender(org.eclipse.hono.client.telemetry.EventSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender) Scope(org.springframework.context.annotation.Scope) ObjectFactoryCreatingFactoryBean(org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean) Bean(org.springframework.context.annotation.Bean)

Example 2 with MessagingClientProvider

use of org.eclipse.hono.client.util.MessagingClientProvider in project hono by eclipse.

the class AbstractProtocolAdapterApplication method setCollaborators.

/**
 * Sets collaborators required by all protocol adapters.
 *
 * @param adapter The adapter to set the collaborators on.
 * @throws NullPointerException if adapter is {@code null}
 * @throws IllegalStateException if no connection to the Command Router service has been configured.
 */
protected void setCollaborators(final AbstractProtocolAdapterBase<?> adapter) {
    Objects.requireNonNull(adapter);
    final DeviceRegistrationClient registrationClient = registrationClient();
    final MessagingClientProvider<TelemetrySender> telemetrySenderProvider = new MessagingClientProvider<>();
    final MessagingClientProvider<EventSender> eventSenderProvider = new MessagingClientProvider<>();
    final MessagingClientProvider<CommandResponseSender> commandResponseSenderProvider = new MessagingClientProvider<>();
    final KafkaClientMetricsSupport kafkaClientMetricsSupport = kafkaClientMetricsSupport(kafkaMetricsOptions);
    final var tenantClient = tenantClient();
    if (kafkaEventConfig.isConfigured()) {
        LOG.info("Kafka client configuration present, adding Kafka messaging clients");
        final KafkaProducerFactory<String, Buffer> factory = CachingKafkaProducerFactory.sharedFactory(vertx);
        factory.setMetricsSupport(kafkaClientMetricsSupport);
        telemetrySenderProvider.setClient(new KafkaBasedTelemetrySender(vertx, factory, kafkaTelemetryConfig, protocolAdapterProperties.isDefaultsEnabled(), tracer));
        eventSenderProvider.setClient(new KafkaBasedEventSender(vertx, factory, kafkaEventConfig, protocolAdapterProperties.isDefaultsEnabled(), tracer));
        commandResponseSenderProvider.setClient(new KafkaBasedCommandResponseSender(vertx, factory, kafkaCommandResponseConfig, tracer));
    }
    if (downstreamSenderConfig.isHostConfigured()) {
        telemetrySenderProvider.setClient(downstreamSender());
        eventSenderProvider.setClient(downstreamSender());
        commandResponseSenderProvider.setClient(new ProtonBasedCommandResponseSender(HonoConnection.newConnection(vertx, commandResponseSenderConfig(), tracer), messageSamplerFactory, protocolAdapterProperties.isJmsVendorPropsEnabled()));
    }
    final MessagingClientProviders messagingClientProviders = new MessagingClientProviders(telemetrySenderProvider, eventSenderProvider, commandResponseSenderProvider);
    if (commandRouterConfig.isHostConfigured()) {
        final CommandRouterClient commandRouterClient = commandRouterClient();
        adapter.setCommandRouterClient(commandRouterClient);
        final CommandRouterCommandConsumerFactory commandConsumerFactory = commandConsumerFactory(commandRouterClient);
        if (commandConsumerConfig.isHostConfigured()) {
            commandConsumerFactory.registerInternalCommandConsumer((id, handlers) -> new ProtonBasedInternalCommandConsumer(commandConsumerConnection(), id, handlers));
        }
        final CommandResponseSender kafkaCommandResponseSender = messagingClientProviders.getCommandResponseSenderProvider().getClient(MessagingType.kafka);
        if (kafkaCommandInternalConfig.isConfigured() && kafkaCommandConfig.isConfigured() && kafkaCommandResponseSender != null) {
            commandConsumerFactory.registerInternalCommandConsumer((id, handlers) -> new KafkaBasedInternalCommandConsumer(vertx, kafkaCommandInternalConfig, kafkaCommandConfig, tenantClient, kafkaCommandResponseSender, id, handlers, tracer).setMetricsSupport(kafkaClientMetricsSupport));
        }
        adapter.setCommandConsumerFactory(commandConsumerFactory);
    } else {
        throw new IllegalStateException("No Command Router connection configured");
    }
    adapter.setMessagingClientProviders(messagingClientProviders);
    Optional.ofNullable(connectionEventProducer()).ifPresent(adapter::setConnectionEventProducer);
    adapter.setCredentialsClient(credentialsClient());
    adapter.setHealthCheckServer(healthCheckServer);
    adapter.setRegistrationClient(registrationClient);
    adapter.setResourceLimitChecks(prometheusResourceLimitChecks(resourceLimitChecksConfig, tenantClient));
    adapter.setTenantClient(tenantClient);
    adapter.setTracer(tracer);
}
Also used : Buffer(io.vertx.core.buffer.Buffer) KafkaBasedTelemetrySender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedTelemetrySender) CommandRouterClient(org.eclipse.hono.client.command.CommandRouterClient) ProtonBasedCommandRouterClient(org.eclipse.hono.client.command.amqp.ProtonBasedCommandRouterClient) KafkaBasedCommandResponseSender(org.eclipse.hono.client.command.kafka.KafkaBasedCommandResponseSender) ProtonBasedDeviceRegistrationClient(org.eclipse.hono.client.registry.amqp.ProtonBasedDeviceRegistrationClient) DeviceRegistrationClient(org.eclipse.hono.client.registry.DeviceRegistrationClient) ProtonBasedCommandResponseSender(org.eclipse.hono.client.command.amqp.ProtonBasedCommandResponseSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender) MicrometerKafkaClientMetricsSupport(org.eclipse.hono.client.kafka.metrics.MicrometerKafkaClientMetricsSupport) KafkaClientMetricsSupport(org.eclipse.hono.client.kafka.metrics.KafkaClientMetricsSupport) NoopKafkaClientMetricsSupport(org.eclipse.hono.client.kafka.metrics.NoopKafkaClientMetricsSupport) CommandRouterCommandConsumerFactory(org.eclipse.hono.client.command.CommandRouterCommandConsumerFactory) MessagingClientProviders(org.eclipse.hono.adapter.MessagingClientProviders) MessagingClientProvider(org.eclipse.hono.client.util.MessagingClientProvider) KafkaBasedInternalCommandConsumer(org.eclipse.hono.client.command.kafka.KafkaBasedInternalCommandConsumer) KafkaBasedCommandResponseSender(org.eclipse.hono.client.command.kafka.KafkaBasedCommandResponseSender) ProtonBasedCommandResponseSender(org.eclipse.hono.client.command.amqp.ProtonBasedCommandResponseSender) CommandResponseSender(org.eclipse.hono.client.command.CommandResponseSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender) EventSender(org.eclipse.hono.client.telemetry.EventSender) ProtonBasedInternalCommandConsumer(org.eclipse.hono.client.command.amqp.ProtonBasedInternalCommandConsumer) TelemetrySender(org.eclipse.hono.client.telemetry.TelemetrySender) KafkaBasedTelemetrySender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedTelemetrySender)

Example 3 with MessagingClientProvider

use of org.eclipse.hono.client.util.MessagingClientProvider in project hono by eclipse.

the class AmqpServerFactory method eventSenderProvider.

/**
 * Creates a client for publishing events via the configured messaging systems.
 *
 * @return The client.
 */
private MessagingClientProvider<EventSender> eventSenderProvider() {
    final MessagingClientProvider<EventSender> result = new MessagingClientProvider<>();
    if (downstreamSenderConfig.isHostConfigured()) {
        result.setClient(new ProtonBasedDownstreamSender(HonoConnection.newConnection(vertx, downstreamSenderConfig, tracer), SendMessageSampler.Factory.noop(), true, true));
    }
    if (eventKafkaProducerConfig.isConfigured()) {
        final KafkaProducerFactory<String, Buffer> factory = CachingKafkaProducerFactory.sharedFactory(vertx);
        result.setClient(new KafkaBasedEventSender(vertx, factory, eventKafkaProducerConfig, true, tracer));
    }
    healthCheckServer.registerHealthCheckResources(ServiceClientAdapter.forClient(result));
    return result;
}
Also used : Buffer(io.vertx.core.buffer.Buffer) MessagingClientProvider(org.eclipse.hono.client.util.MessagingClientProvider) ProtonBasedDownstreamSender(org.eclipse.hono.client.telemetry.amqp.ProtonBasedDownstreamSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender) EventSender(org.eclipse.hono.client.telemetry.EventSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender)

Example 4 with MessagingClientProvider

use of org.eclipse.hono.client.util.MessagingClientProvider in project hono by eclipse.

the class AmqpServerFactory method eventSenderProvider.

/**
 * Creates a client for publishing events via the configured messaging systems.
 *
 * @return The client.
 */
private MessagingClientProvider<EventSender> eventSenderProvider() {
    final MessagingClientProvider<EventSender> result = new MessagingClientProvider<>();
    if (downstreamSenderConfig.isHostConfigured()) {
        result.setClient(new ProtonBasedDownstreamSender(HonoConnection.newConnection(vertx, downstreamSenderConfig, tracer), SendMessageSampler.Factory.noop(), true, true));
    }
    if (eventKafkaProducerConfig.isConfigured()) {
        final KafkaProducerFactory<String, Buffer> factory = CachingKafkaProducerFactory.sharedFactory(vertx);
        result.setClient(new KafkaBasedEventSender(vertx, factory, eventKafkaProducerConfig, true, tracer));
    }
    healthCheckServer.registerHealthCheckResources(ServiceClientAdapter.forClient(result));
    return result;
}
Also used : Buffer(io.vertx.core.buffer.Buffer) MessagingClientProvider(org.eclipse.hono.client.util.MessagingClientProvider) ProtonBasedDownstreamSender(org.eclipse.hono.client.telemetry.amqp.ProtonBasedDownstreamSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender) EventSender(org.eclipse.hono.client.telemetry.EventSender) KafkaBasedEventSender(org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender)

Example 5 with MessagingClientProvider

use of org.eclipse.hono.client.util.MessagingClientProvider in project hono by eclipse.

the class AbstractProtocolAdapterBaseTest method setup.

/**
 * Sets up the fixture.
 */
@BeforeEach
public void setup() {
    tenantClient = mock(TenantClient.class);
    when(tenantClient.start()).thenReturn(Future.succeededFuture());
    registrationClient = mock(DeviceRegistrationClient.class);
    when(registrationClient.start()).thenReturn(Future.succeededFuture());
    credentialsClient = mock(CredentialsClient.class);
    when(credentialsClient.start()).thenReturn(Future.succeededFuture());
    amqpTelemetrySender = mockMessagingClient(TelemetrySender.class, MessagingType.amqp);
    when(amqpTelemetrySender.start()).thenReturn(Future.succeededFuture());
    kafkaTelemetrySender = mockMessagingClient(TelemetrySender.class, MessagingType.kafka);
    when(kafkaTelemetrySender.start()).thenReturn(Future.succeededFuture());
    amqpEventSender = mockMessagingClient(EventSender.class, MessagingType.amqp);
    when(amqpEventSender.start()).thenReturn(Future.succeededFuture());
    kafkaEventSender = mockMessagingClient(EventSender.class, MessagingType.kafka);
    when(kafkaEventSender.start()).thenReturn(Future.succeededFuture());
    commandConsumerFactory = mock(CommandConsumerFactory.class);
    when(commandConsumerFactory.start()).thenReturn(Future.succeededFuture());
    amqpCommandResponseSender = mockMessagingClient(CommandResponseSender.class, MessagingType.amqp);
    when(amqpCommandResponseSender.start()).thenReturn(Future.succeededFuture());
    kafkaCommandResponseSender = mockMessagingClient(CommandResponseSender.class, MessagingType.kafka);
    when(kafkaCommandResponseSender.start()).thenReturn(Future.succeededFuture());
    final var telemetrySenderProvider = new MessagingClientProvider<TelemetrySender>().setClient(amqpTelemetrySender).setClient(kafkaTelemetrySender);
    final var eventSenderProvider = new MessagingClientProvider<EventSender>().setClient(amqpEventSender).setClient(kafkaEventSender);
    final var commandResponseSenderProvider = new MessagingClientProvider<CommandResponseSender>().setClient(amqpCommandResponseSender).setClient(kafkaCommandResponseSender);
    messagingClientProviders = new MessagingClientProviders(telemetrySenderProvider, eventSenderProvider, commandResponseSenderProvider);
    commandRouterClient = mock(CommandRouterClient.class);
    when(commandRouterClient.start()).thenReturn(Future.succeededFuture());
    properties = new ProtocolAdapterProperties();
    adapter = newProtocolAdapter(properties, ADAPTER_NAME);
    setCollaborators(adapter);
    vertx = mock(Vertx.class);
    VertxMockSupport.runTimersImmediately(vertx);
    context = mock(Context.class);
    adapter.init(vertx, context);
}
Also used : Context(io.vertx.core.Context) VertxTestContext(io.vertx.junit5.VertxTestContext) TelemetryExecutionContext(org.eclipse.hono.util.TelemetryExecutionContext) SpanContext(io.opentracing.SpanContext) CommandRouterClient(org.eclipse.hono.client.command.CommandRouterClient) ProtocolAdapterProperties(org.eclipse.hono.config.ProtocolAdapterProperties) CommandConsumerFactory(org.eclipse.hono.client.command.CommandConsumerFactory) DeviceRegistrationClient(org.eclipse.hono.client.registry.DeviceRegistrationClient) Vertx(io.vertx.core.Vertx) CredentialsClient(org.eclipse.hono.client.registry.CredentialsClient) MessagingClientProvider(org.eclipse.hono.client.util.MessagingClientProvider) CommandResponseSender(org.eclipse.hono.client.command.CommandResponseSender) TenantClient(org.eclipse.hono.client.registry.TenantClient) EventSender(org.eclipse.hono.client.telemetry.EventSender) TelemetrySender(org.eclipse.hono.client.telemetry.TelemetrySender) BeforeEach(org.junit.jupiter.api.BeforeEach)

Aggregations

MessagingClientProvider (org.eclipse.hono.client.util.MessagingClientProvider)6 Buffer (io.vertx.core.buffer.Buffer)5 EventSender (org.eclipse.hono.client.telemetry.EventSender)5 KafkaBasedEventSender (org.eclipse.hono.client.telemetry.kafka.KafkaBasedEventSender)4 ProtonBasedDownstreamSender (org.eclipse.hono.client.telemetry.amqp.ProtonBasedDownstreamSender)3 CommandResponseSender (org.eclipse.hono.client.command.CommandResponseSender)2 CommandRouterClient (org.eclipse.hono.client.command.CommandRouterClient)2 DeviceRegistrationClient (org.eclipse.hono.client.registry.DeviceRegistrationClient)2 TelemetrySender (org.eclipse.hono.client.telemetry.TelemetrySender)2 SpanContext (io.opentracing.SpanContext)1 Context (io.vertx.core.Context)1 Vertx (io.vertx.core.Vertx)1 VertxTestContext (io.vertx.junit5.VertxTestContext)1 MessagingClientProviders (org.eclipse.hono.adapter.MessagingClientProviders)1 CommandConsumerFactory (org.eclipse.hono.client.command.CommandConsumerFactory)1 CommandRouterCommandConsumerFactory (org.eclipse.hono.client.command.CommandRouterCommandConsumerFactory)1 ProtonBasedCommandResponseSender (org.eclipse.hono.client.command.amqp.ProtonBasedCommandResponseSender)1 ProtonBasedCommandRouterClient (org.eclipse.hono.client.command.amqp.ProtonBasedCommandRouterClient)1 ProtonBasedInternalCommandConsumer (org.eclipse.hono.client.command.amqp.ProtonBasedInternalCommandConsumer)1 KafkaBasedCommandResponseSender (org.eclipse.hono.client.command.kafka.KafkaBasedCommandResponseSender)1