Code review comment: Use () -> new RuntimeException(...).  The reason is that your approach captures the stack trace at assembly time, not really useful.

Code under review:
public Iterable<ConfigSource> getConfigSources(ClassLoader cl) {
        Map<String, ValueType> keys = config.keysAsMap();
        if (keys.isEmpty()) {
            log.debug("No keys were configured for config source lookup");
            return Collections.emptyList();
        }

        List<ConfigSource> result = new ArrayList<>(keys.size());

        List<Uni<?>> allUnis = new ArrayList<>();

        for (Map.Entry<String, ValueType> entry : keys.entrySet()) {
            String fullKey = config.prefix.isPresent() ? config.prefix.get() + "/" + entry.getKey() : entry.getKey();
            allUnis.add(consulConfigGateway.getValue(fullKey).chain(new Function<Response, Uni<?>>() {
                @Override
                public Uni<?> apply(Response response) {
                    if (response != null) {
                        result.add(
                                responseConfigSourceUtil.toConfigSource(response, entry.getValue(),
                                        config.prefix));
                    } else {
                        String message = "Key '" + fullKey + "' not found in Consul.";
                        if (config.failOnMissingKey) {
                            return Uni.createFrom().failure(new RuntimeException(message));
                        } else {
                            log.info(message);
                            return Uni.createFrom().nullItem();
                        }
                    }

                    return Uni.createFrom().nullItem();
                }
            }));
        }

        try {
            Uni.combine().all().unis(allUnis).discardItems().await()
                    .atMost(config.agent.connectionTimeout.plus(config.agent.readTimeout.multipliedBy(2)));
        } catch (CompletionException e) {
            throw new RuntimeException("An error occurred while attempting to fetch configuration from Consul.", e);
        } finally {
            consulConfigGateway.close();
        }

        return result;
    }

Line commented on: return Uni.createFrom().failure(new RuntimeException(message));

Revised code:
public Iterable<ConfigSource> getConfigSources(ClassLoader cl) {
        Map<String, ValueType> keys = config.keysAsMap();
        if (keys.isEmpty()) {
            log.debug("No keys were configured for config source lookup");
            return Collections.emptyList();
        }

        List<ConfigSource> result = new ArrayList<>(keys.size());

        List<Uni<?>> allUnis = new ArrayList<>();

        for (Map.Entry<String, ValueType> entry : keys.entrySet()) {
            String fullKey = config.prefix.isPresent() ? config.prefix.get() + "/" + entry.getKey() : entry.getKey();
            allUnis.add(consulConfigGateway.getValue(fullKey).invoke(new Consumer<Response>() {
                @Override
                public void accept(Response response) {
                    if (response != null) {
                        result.add(
                                responseConfigSourceUtil.toConfigSource(response, entry.getValue(),
                                        config.prefix));
                    } else {
                        String message = "Key '" + fullKey + "' not found in Consul.";
                        if (config.failOnMissingKey) {
                            throw new RuntimeException(message);
                        } else {
                            log.info(message);
                        }
                    }
                }
            }));
        }

        try {
            Uni.combine().all().unis(allUnis).discardItems().await()
                    .atMost(config.agent.connectionTimeout.plus(config.agent.readTimeout.multipliedBy(2)));
        } catch (CompletionException e) {
            throw new RuntimeException("An error occurred while attempting to fetch configuration from Consul.", e);
        } finally {
            consulConfigGateway.close();
        }

        return result;
    }