Search in sources :

Example 31 with Uni

use of io.smallrye.mutiny.Uni in project smallrye-mutiny by smallrye.

the class MultiFromResourceFromUniTest method testThatFinalizerIsNotCalledWhenResourceSupplierThrowsAnException.

@Test
public void testThatFinalizerIsNotCalledWhenResourceSupplierThrowsAnException() {
    AssertSubscriber<Integer> subscriber = AssertSubscriber.create(1);
    Supplier<Uni<Integer>> supplier = () -> {
        throw new IllegalArgumentException("boom");
    };
    AtomicInteger cleanup = new AtomicInteger();
    Multi.createFrom().resourceFromUni(supplier, r -> Multi.createFrom().<Integer>emitter(e -> e.emit(1).emit(2).fail(new IOException("boom")))).withFinalizer(cleanup::set).subscribe(subscriber);
    subscriber.assertFailedWith(IllegalArgumentException.class, "boom");
    assertThat(cleanup).hasValue(0);
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) AssertSubscriber(io.smallrye.mutiny.helpers.test.AssertSubscriber) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) BiFunction(java.util.function.BiFunction) Publisher(org.reactivestreams.Publisher) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) UniOnCancellationSpy(io.smallrye.mutiny.helpers.spies.UniOnCancellationSpy) IOException(java.io.IOException) ResourceLock(org.junit.jupiter.api.parallel.ResourceLock) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) Supplier(java.util.function.Supplier) InfrastructureResource(junit5.support.InfrastructureResource) Multi(io.smallrye.mutiny.Multi) ArrayList(java.util.ArrayList) Uni(io.smallrye.mutiny.Uni) Consumer(java.util.function.Consumer) Test(org.junit.jupiter.api.Test) CompositeException(io.smallrye.mutiny.CompositeException) List(java.util.List) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Duration(java.time.Duration) Spy(io.smallrye.mutiny.helpers.spies.Spy) ResourceAccessMode(org.junit.jupiter.api.parallel.ResourceAccessMode) Uni(io.smallrye.mutiny.Uni) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) IOException(java.io.IOException) Test(org.junit.jupiter.api.Test)

Example 32 with Uni

use of io.smallrye.mutiny.Uni in project sandbox by 5733d9e2be6485d52ffa08870cabdee0.

the class AWSVaultServiceImpl method get.

@Override
public Uni<EventBridgeSecret> get(String name) {
    if (CACHE.containsKey(name)) {
        LOGGER.debug("Secret '{}' found in the cache.", name);
        return Uni.createFrom().item(CACHE.get(name));
    }
    return Uni.createFrom().future(asyncClient.getSecretValue(GetSecretValueRequest.builder().secretId(name).build())).onFailure(e -> !(e instanceof ResourceNotFoundException)).retry().withJitter(DEFAULT_JITTER).withBackOff(DEFAULT_BACKOFF).atMost(MAX_RETRIES).onFailure().transform(e -> new VaultException("Secret '%s' not found in AWS Vault", e)).flatMap(x -> {
        LOGGER.debug("Secret '{}' found in AWS Vault", name);
        EventBridgeSecret secret = new EventBridgeSecret().setId(name).setValues(Json.decodeValue(x.secretString(), Map.class));
        CACHE.put(name, secret);
        return Uni.createFrom().item(secret);
    });
}
Also used : ResourceNotFoundException(software.amazon.awssdk.services.secretsmanager.model.ResourceNotFoundException) Json(io.vertx.core.json.Json) Logger(org.slf4j.Logger) LoggerFactory(org.slf4j.LoggerFactory) CreateSecretRequest(software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest) PutSecretValueRequest(software.amazon.awssdk.services.secretsmanager.model.PutSecretValueRequest) ResourceExistsException(software.amazon.awssdk.services.secretsmanager.model.ResourceExistsException) Uni(io.smallrye.mutiny.Uni) DeleteSecretRequest(software.amazon.awssdk.services.secretsmanager.model.DeleteSecretRequest) Inject(javax.inject.Inject) SecretsManagerAsyncClient(software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient) Duration(java.time.Duration) Map(java.util.Map) ApplicationScoped(javax.enterprise.context.ApplicationScoped) EventBridgeSecret(com.redhat.service.bridge.infra.models.EventBridgeSecret) GetSecretValueRequest(software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest) VaultException(com.redhat.service.bridge.infra.exceptions.definitions.platform.VaultException) LRUCache(io.vertx.ext.web.impl.LRUCache) VaultException(com.redhat.service.bridge.infra.exceptions.definitions.platform.VaultException) ResourceNotFoundException(software.amazon.awssdk.services.secretsmanager.model.ResourceNotFoundException) EventBridgeSecret(com.redhat.service.bridge.infra.models.EventBridgeSecret) Map(java.util.Map)

Example 33 with Uni

use of io.smallrye.mutiny.Uni in project sandbox by 5733d9e2be6485d52ffa08870cabdee0.

the class AWSVaultServiceImpl method replaceSecret.

private Uni<Void> replaceSecret(EventBridgeSecret secret) {
    LOGGER.debug("Secret '{}' already exists in AWS Vault. Replacing..", secret.getId());
    PutSecretValueRequest putSecretValueRequest = PutSecretValueRequest.builder().secretId(secret.getId()).secretString(Json.encode(secret.getValues())).build();
    return Uni.createFrom().future(asyncClient.putSecretValue(putSecretValueRequest)).replaceWithVoid().onFailure().retry().withJitter(DEFAULT_JITTER).withBackOff(DEFAULT_BACKOFF).atMost(MAX_RETRIES).onFailure().transform(e -> new VaultException("Could not replace secret '%s' in AWS Vault", e)).invoke(() -> LOGGER.debug("Secret '{}' replaced", secret.getId()));
}
Also used : ResourceNotFoundException(software.amazon.awssdk.services.secretsmanager.model.ResourceNotFoundException) Json(io.vertx.core.json.Json) Logger(org.slf4j.Logger) LoggerFactory(org.slf4j.LoggerFactory) CreateSecretRequest(software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest) PutSecretValueRequest(software.amazon.awssdk.services.secretsmanager.model.PutSecretValueRequest) ResourceExistsException(software.amazon.awssdk.services.secretsmanager.model.ResourceExistsException) Uni(io.smallrye.mutiny.Uni) DeleteSecretRequest(software.amazon.awssdk.services.secretsmanager.model.DeleteSecretRequest) Inject(javax.inject.Inject) SecretsManagerAsyncClient(software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient) Duration(java.time.Duration) Map(java.util.Map) ApplicationScoped(javax.enterprise.context.ApplicationScoped) EventBridgeSecret(com.redhat.service.bridge.infra.models.EventBridgeSecret) GetSecretValueRequest(software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest) VaultException(com.redhat.service.bridge.infra.exceptions.definitions.platform.VaultException) LRUCache(io.vertx.ext.web.impl.LRUCache) PutSecretValueRequest(software.amazon.awssdk.services.secretsmanager.model.PutSecretValueRequest) VaultException(com.redhat.service.bridge.infra.exceptions.definitions.platform.VaultException)

Example 34 with Uni

use of io.smallrye.mutiny.Uni in project reactive-systems-in-java by cescoffier.

the class UserService method createUser.

public Uni<Long> createUser(String name) {
    UserProfile user = new UserProfile();
    user.name = name;
    return Panache.withTransaction(() -> user.persist().onItem().transform(u -> ((UserProfile) u).id));
}
Also used : Product(org.acme.orders.Product) ApplicationScoped(javax.enterprise.context.ApplicationScoped) Random(java.util.Random) Panache(io.quarkus.hibernate.reactive.panache.Panache) Multi(io.smallrye.mutiny.Multi) Uni(io.smallrye.mutiny.Uni) UserProfile(org.acme.users.UserProfile) UserProfile(org.acme.users.UserProfile)

Example 35 with Uni

use of io.smallrye.mutiny.Uni in project smallrye-reactive-messaging by smallrye.

the class RabbitMQConnector method getSubscriberBuilder.

/**
 * Creates a <em>channel</em> for the given configuration. The channel's configuration is associated with a
 * specific {@code connector}, using the {@link Connector} qualifier's parameter indicating a key to
 * which {@link org.eclipse.microprofile.reactive.messaging.Outgoing} to use.
 * <p>
 * Note that the connection to the <em>transport</em> or <em>broker</em> is generally postponed until the
 * subscription.
 *
 * @param config the configuration, never {@code null}, must contain the {@link #CHANNEL_NAME_ATTRIBUTE}
 *        attribute.
 * @return the created {@link SubscriberBuilder}, must not be {@code null}.
 * @throws IllegalArgumentException if the configuration is invalid.
 * @throws NoSuchElementException if the configuration does not contain an expected attribute.
 */
@Override
public SubscriberBuilder<? extends Message<?>, Void> getSubscriberBuilder(final Config config) {
    final RabbitMQConnectorOutgoingConfiguration oc = new RabbitMQConnectorOutgoingConfiguration(config);
    outgoingChannelStatus.put(oc.getChannel(), ChannelStatus.INITIALISING);
    // Create a client
    final RabbitMQClient client = RabbitMQClientHelper.createClient(this, oc, clientOptions, credentialsProviders);
    final ConnectionHolder holder = new ConnectionHolder(client, oc, getVertx());
    final Uni<RabbitMQPublisher> getSender = holder.getOrEstablishConnection().onItem().call(connection -> establishExchange(connection, oc)).onItem().transformToUni(connection -> Uni.createFrom().item(RabbitMQPublisher.create(getVertx(), connection, new RabbitMQPublisherOptions().setReconnectAttempts(oc.getReconnectAttempts()).setReconnectInterval(ofSeconds(oc.getReconnectInterval()).toMillis()).setMaxInternalQueueSize(oc.getMaxOutgoingInternalQueueSize().orElse(Integer.MAX_VALUE))))).onItem().call(RabbitMQPublisher::start).invoke(s -> {
        // Add the channel in the opened state
        outgoingChannelStatus.put(oc.getChannel(), ChannelStatus.CONNECTED);
    }).onFailure().invoke(t -> outgoingChannelStatus.put(oc.getChannel(), ChannelStatus.NOT_CONNECTED)).onFailure().recoverWithNull().memoize().indefinitely().onCancellation().invoke(() -> outgoingChannelStatus.put(oc.getChannel(), ChannelStatus.NOT_CONNECTED));
    // Set up a sender based on the publisher we established above
    final RabbitMQMessageSender processor = new RabbitMQMessageSender(oc, getSender);
    subscriptions.add(processor);
    // Return a SubscriberBuilder
    return ReactiveStreams.<Message<?>>builder().via(processor).onError(t -> {
        log.error(oc.getChannel(), t);
        outgoingChannelStatus.put(oc.getChannel(), ChannelStatus.NOT_CONNECTED);
    }).ignore();
}
Also used : RabbitMQPublisher(io.vertx.mutiny.rabbitmq.RabbitMQPublisher) Arrays(java.util.Arrays) HealthReport(io.smallrye.reactive.messaging.health.HealthReport) RabbitMQConsumer(io.vertx.mutiny.rabbitmq.RabbitMQConsumer) INCOMING(io.smallrye.reactive.messaging.annotations.ConnectorAttribute.Direction.INCOMING) INCOMING_AND_OUTGOING(io.smallrye.reactive.messaging.annotations.ConnectorAttribute.Direction.INCOMING_AND_OUTGOING) Reception(javax.enterprise.event.Reception) Map(java.util.Map) Observes(javax.enterprise.event.Observes) Connector(org.eclipse.microprofile.reactive.messaging.spi.Connector) JsonObject(io.vertx.core.json.JsonObject) Any(javax.enterprise.inject.Any) Instance(javax.enterprise.inject.Instance) ExecutionHolder(io.smallrye.reactive.messaging.providers.connectors.ExecutionHolder) RabbitMQAutoAck(io.smallrye.reactive.messaging.rabbitmq.ack.RabbitMQAutoAck) ConnectorAttribute(io.smallrye.reactive.messaging.annotations.ConnectorAttribute) RabbitMQExceptions.ex(io.smallrye.reactive.messaging.rabbitmq.i18n.RabbitMQExceptions.ex) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) RabbitMQPublisher(io.vertx.mutiny.rabbitmq.RabbitMQPublisher) SubscriberBuilder(org.eclipse.microprofile.reactive.streams.operators.SubscriberBuilder) Config(org.eclipse.microprofile.config.Config) Collectors(java.util.stream.Collectors) Priority(javax.annotation.Priority) List(java.util.List) CredentialsProvider(com.rabbitmq.client.impl.CredentialsProvider) PostConstruct(javax.annotation.PostConstruct) ApplicationScoped(javax.enterprise.context.ApplicationScoped) PublisherBuilder(org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) OutgoingConnectorFactory(org.eclipse.microprofile.reactive.messaging.spi.OutgoingConnectorFactory) RabbitMQReject(io.smallrye.reactive.messaging.rabbitmq.fault.RabbitMQReject) BroadcastProcessor(io.smallrye.mutiny.operators.multi.processors.BroadcastProcessor) RabbitMQLogging.log(io.smallrye.reactive.messaging.rabbitmq.i18n.RabbitMQLogging.log) RabbitMQClient(io.vertx.mutiny.rabbitmq.RabbitMQClient) Duration.ofSeconds(java.time.Duration.ofSeconds) HealthReporter(io.smallrye.reactive.messaging.health.HealthReporter) Multi(io.smallrye.mutiny.Multi) Uni(io.smallrye.mutiny.Uni) Inject(javax.inject.Inject) RabbitMQAck(io.smallrye.reactive.messaging.rabbitmq.ack.RabbitMQAck) BeforeDestroyed(javax.enterprise.context.BeforeDestroyed) TracingUtils(io.smallrye.reactive.messaging.rabbitmq.tracing.TracingUtils) OUTGOING(io.smallrye.reactive.messaging.annotations.ConnectorAttribute.Direction.OUTGOING) RabbitMQAccept(io.smallrye.reactive.messaging.rabbitmq.fault.RabbitMQAccept) QueueOptions(io.vertx.rabbitmq.QueueOptions) RabbitMQPublisherOptions(io.vertx.rabbitmq.RabbitMQPublisherOptions) NoSuchElementException(java.util.NoSuchElementException) IncomingConnectorFactory(org.eclipse.microprofile.reactive.messaging.spi.IncomingConnectorFactory) ReactiveStreams(org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams) RabbitMQOptions(io.vertx.rabbitmq.RabbitMQOptions) RabbitMQAckHandler(io.smallrye.reactive.messaging.rabbitmq.ack.RabbitMQAckHandler) Message(org.eclipse.microprofile.reactive.messaging.Message) RabbitMQFailStop(io.smallrye.reactive.messaging.rabbitmq.fault.RabbitMQFailStop) Subscription(org.reactivestreams.Subscription) Vertx(io.vertx.mutiny.core.Vertx) RabbitMQFailureHandler(io.smallrye.reactive.messaging.rabbitmq.fault.RabbitMQFailureHandler) RabbitMQClient(io.vertx.mutiny.rabbitmq.RabbitMQClient) RabbitMQPublisherOptions(io.vertx.rabbitmq.RabbitMQPublisherOptions)

Aggregations

Uni (io.smallrye.mutiny.Uni)44 Multi (io.smallrye.mutiny.Multi)21 Test (org.junit.jupiter.api.Test)18 List (java.util.List)17 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)17 Duration (java.time.Duration)16 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)14 IOException (java.io.IOException)13 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)13 AtomicReference (java.util.concurrent.atomic.AtomicReference)13 Assertions.assertThrows (org.junit.jupiter.api.Assertions.assertThrows)13 AssertSubscriber (io.smallrye.mutiny.helpers.test.AssertSubscriber)12 Function (java.util.function.Function)12 Supplier (java.util.function.Supplier)12 Map (java.util.Map)11 Consumer (java.util.function.Consumer)10 CompositeException (io.smallrye.mutiny.CompositeException)9 ArrayList (java.util.ArrayList)9 ApplicationScoped (javax.enterprise.context.ApplicationScoped)8 CompletableFuture (java.util.concurrent.CompletableFuture)7