diff --git a/.github/native-tests.json b/.github/native-tests.json index e0d3987c3c3ad..fc10330ec902d 100644 --- a/.github/native-tests.json +++ b/.github/native-tests.json @@ -63,7 +63,7 @@ { "category": "Messaging2", "timeout": 70, - "test-modules": "reactive-messaging-amqp, reactive-messaging-http, reactive-messaging-rabbitmq", + "test-modules": "reactive-messaging-amqp, reactive-messaging-http, reactive-messaging-rabbitmq, reactive-messaging-rabbitmq-dyn", "os-name": "ubuntu-latest" }, { diff --git a/docs/src/main/asciidoc/credentials-provider.adoc b/docs/src/main/asciidoc/credentials-provider.adoc index 5866ce8e3453c..c9119a5d15296 100644 --- a/docs/src/main/asciidoc/credentials-provider.adoc +++ b/docs/src/main/asciidoc/credentials-provider.adoc @@ -35,6 +35,7 @@ by the following credentials consumer extensions: * `reactive-pg-client` * `oidc` * `oidc-client` +* `smallrye-reactive-messaging-rabbitmq` All extensions that rely on username/password authentication also allow setting configuration properties in the `application.properties` as an alternative. But the `Credentials Provider` is the only option diff --git a/docs/src/main/asciidoc/rabbitmq-reference.adoc b/docs/src/main/asciidoc/rabbitmq-reference.adoc index ae5a175158827..e071c8320a292 100644 --- a/docs/src/main/asciidoc/rabbitmq-reference.adoc +++ b/docs/src/main/asciidoc/rabbitmq-reference.adoc @@ -393,6 +393,67 @@ Note that a message processing failures nacks the message, which is then handled It's the responsibility of the `failure-strategy` to report the failure and influence the outcome of the checks. The `fail` failure strategy reports the failure, and so the check will report the fault. +[[dynamic-credentials]] +== Dynamic Credentials + +Quarkus and the RabbitMQ connector support https://www.vaultproject.io/docs/secrets/rabbitmq[Vault's RabbitMQ secrets engine] +for generating short-lived dynamic credentials. This allows Vault to create and retire RabbitMQ credentials on a regular basis. + +First we need to enable Vault's `rabbitmq` secret engine, configure it with RabbitMQ's connection and authentication +information, and create a Vault role `my-role` (replace `10.0.0.3` by the actual host that is running the +RabbitMQ container): +[source,bash, subs=attributes+] +---- +vault secrets enable rabbitmq + +vault write rabbitmq/config/connection \ + connection_uri=http://10.0.0.3:15672 \ + username=guest \ + password=guest + +vault write rabbitmq/roles/my-role \ + vhosts='{"/":{"write": ".*", "read": ".*"}}' +---- + +[NOTE] +==== +For this use case, user `guest` configured above needs to be a RabbitMQ admin user with the capability to create +credentials. +==== + +Then we need to give a read capability to the Quarkus application on path `rabbitmq/creds/my-role`. +[source,bash] +---- +cat < credentialsProvider = Optional.empty(); + + /** + * The credentials provider bean name. + *

+ * It is the {@code @Named} value of the credentials provider bean. It is used to discriminate if multiple + * CredentialsProvider beans are available. + *

+ * For Vault it is: vault-credentials-provider. Not necessary if there is only one credentials provider available. + */ + @ConfigItem + public Optional credentialsProviderName = Optional.empty(); } diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/SmallRyeReactiveMessagingRabbitMQProcessor.java b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/SmallRyeReactiveMessagingRabbitMQProcessor.java index 81d023aa4bf77..f728ca500e097 100644 --- a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/SmallRyeReactiveMessagingRabbitMQProcessor.java +++ b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/SmallRyeReactiveMessagingRabbitMQProcessor.java @@ -1,8 +1,23 @@ package io.quarkus.smallrye.reactivemessaging.rabbitmq.deployment; +import javax.enterprise.context.ApplicationScoped; + +import com.rabbitmq.client.impl.CredentialsProvider; + +import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.arc.deployment.SyntheticBeanBuildItem; +import io.quarkus.arc.deployment.SyntheticBeanBuildItem.ExtendedBeanConfigurator; import io.quarkus.deployment.Feature; +import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.annotations.ExecutionTime; +import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.RunTimeConfigurationDefaultBuildItem; +import io.quarkus.runtime.RuntimeValue; +import io.quarkus.smallrye.reactivemessaging.rabbitmq.runtime.CredentialsProviderLink; +import io.quarkus.smallrye.reactivemessaging.rabbitmq.runtime.RabbitMQRecorder; +import io.smallrye.common.annotation.Identifier; public class SmallRyeReactiveMessagingRabbitMQProcessor { @@ -11,4 +26,38 @@ FeatureBuildItem feature() { return new FeatureBuildItem(Feature.SMALLRYE_REACTIVE_MESSAGING_RABBITMQ); } + @BuildStep + @Record(ExecutionTime.RUNTIME_INIT) + public void dynamicCredentials(RabbitMQRecorder recorder, + RabbitMQBuildTimeConfig rabbitMQBuildTimeConfig, + BuildProducer syntheticBeans, + BuildProducer additionalBeans, + BuildProducer configDefaults) { + + additionalBeans.produce(AdditionalBeanBuildItem.builder().addBeanClass(Identifier.class).build()); + + if (rabbitMQBuildTimeConfig.credentialsProvider.isPresent()) { + String credentialsProvider = rabbitMQBuildTimeConfig.credentialsProvider.get(); + + RuntimeValue credentialsProviderLink = recorder.configureOptions( + credentialsProvider, + rabbitMQBuildTimeConfig.credentialsProviderName); + + String identifier = "credentials-provider-link-" + credentialsProvider; + + ExtendedBeanConfigurator rabbitMQOptionsConfigurator = SyntheticBeanBuildItem + .configure(CredentialsProviderLink.class) + .defaultBean() + .addType(CredentialsProvider.class) + .addQualifier().annotation(Identifier.class).addValue("value", identifier).done() + .scope(ApplicationScoped.class) + .runtimeValue(credentialsProviderLink) + .unremovable() + .setRuntimeInit(); + + configDefaults.produce(new RunTimeConfigurationDefaultBuildItem("rabbitmq-credentials-provider-name", identifier)); + syntheticBeans.produce(rabbitMQOptionsConfigurator.done()); + } + } + } diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/runtime/pom.xml b/extensions/smallrye-reactive-messaging-rabbitmq/runtime/pom.xml index f6f396287c130..b37bde2ae871b 100644 --- a/extensions/smallrye-reactive-messaging-rabbitmq/runtime/pom.xml +++ b/extensions/smallrye-reactive-messaging-rabbitmq/runtime/pom.xml @@ -30,6 +30,10 @@ io.quarkus quarkus-vertx + + io.quarkus + quarkus-credentials + io.quarkus quarkus-jackson diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/runtime/CredentialsProviderLink.java b/extensions/smallrye-reactive-messaging-rabbitmq/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/runtime/CredentialsProviderLink.java new file mode 100644 index 0000000000000..320d1113f25b8 --- /dev/null +++ b/extensions/smallrye-reactive-messaging-rabbitmq/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/runtime/CredentialsProviderLink.java @@ -0,0 +1,62 @@ +package io.quarkus.smallrye.reactivemessaging.rabbitmq.runtime; + +import static io.quarkus.credentials.CredentialsProvider.EXPIRATION_TIMESTAMP_PROPERTY_NAME; +import static io.quarkus.credentials.CredentialsProvider.PASSWORD_PROPERTY_NAME; +import static io.quarkus.credentials.CredentialsProvider.USER_PROPERTY_NAME; + +import java.time.Duration; +import java.time.Instant; +import java.util.Map; + +import io.quarkus.credentials.CredentialsProvider; + +public class CredentialsProviderLink implements com.rabbitmq.client.impl.CredentialsProvider { + + private final CredentialsProvider credentialsProvider; + private final String credentialsProviderName; + private String username; + private String password; + private Instant expiresAt; + + public CredentialsProviderLink(CredentialsProvider credentialsProvider, String credentialsProviderName) { + this.credentialsProvider = credentialsProvider; + this.credentialsProviderName = credentialsProviderName; + this.expiresAt = Instant.MIN; + } + + private void refreshIfExpired() { + if (expiresAt.isAfter(Instant.now())) { + return; + } + refresh(); + } + + @Override + public String getUsername() { + refreshIfExpired(); + return username; + } + + @Override + public String getPassword() { + refreshIfExpired(); + return password; + } + + @Override + public Duration getTimeBeforeExpiration() { + return Duration.between(Instant.now(), expiresAt); + } + + @Override + public void refresh() { + Map credentials = credentialsProvider.getCredentials(credentialsProviderName); + username = credentials.get(USER_PROPERTY_NAME); + password = credentials.get(PASSWORD_PROPERTY_NAME); + expiresAt = Instant.parse(credentials.getOrDefault(EXPIRATION_TIMESTAMP_PROPERTY_NAME, getDefaultExpiresAt())); + } + + private String getDefaultExpiresAt() { + return Instant.now().plusSeconds(10).toString(); + } +} diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/runtime/RabbitMQRecorder.java b/extensions/smallrye-reactive-messaging-rabbitmq/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/runtime/RabbitMQRecorder.java new file mode 100644 index 0000000000000..21e1f5af7f161 --- /dev/null +++ b/extensions/smallrye-reactive-messaging-rabbitmq/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/runtime/RabbitMQRecorder.java @@ -0,0 +1,20 @@ +package io.quarkus.smallrye.reactivemessaging.rabbitmq.runtime; + +import java.util.Optional; + +import io.quarkus.credentials.CredentialsProvider; +import io.quarkus.credentials.runtime.CredentialsProviderFinder; +import io.quarkus.runtime.RuntimeValue; +import io.quarkus.runtime.annotations.Recorder; + +@Recorder +public class RabbitMQRecorder { + + public RuntimeValue configureOptions(String credentialsProviderName, + Optional credentialsProviderBeanName) { + + CredentialsProvider credentialsProvider = CredentialsProviderFinder.find(credentialsProviderBeanName.orElse(null)); + + return new RuntimeValue<>(new CredentialsProviderLink(credentialsProvider, credentialsProviderName)); + } +} diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 1496740222976..ab6cdf56158e9 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -263,6 +263,7 @@ reactive-messaging-kafka reactive-messaging-http reactive-messaging-rabbitmq + reactive-messaging-rabbitmq-dyn rest-client resteasy-reactive-kotlin rest-client-reactive diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/pom.xml b/integration-tests/reactive-messaging-rabbitmq-dyn/pom.xml new file mode 100644 index 0000000000000..2b8e2f682cf57 --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/pom.xml @@ -0,0 +1,221 @@ + + + + quarkus-integration-tests-parent + io.quarkus + 999-SNAPSHOT + + 4.0.0 + + quarkus-integration-test-reactive-messaging-rabbitmq-dyn + Quarkus - Integration Tests - Reactive Messaging - RabbitMQ (Dynamic Credentials) + The RabbitMQ Reactive Messaging integration tests module + + + true + + + + + io.quarkus + quarkus-integration-test-class-transformer + + + io.quarkus + quarkus-integration-test-shared-library + + + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jsonb + + + + + io.quarkus + quarkus-smallrye-health + + + + io.quarkus + quarkus-smallrye-reactive-messaging-rabbitmq + + + + + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + jakarta.xml.bind + jakarta.xml.bind-api + + + + + org.testcontainers + testcontainers + test + + + org.testcontainers + vault + test + + + org.testcontainers + rabbitmq + test + + + + + io.quarkus + quarkus-integration-test-class-transformer-deployment + ${project.version} + pom + test + + + * + * + + + + + io.quarkus + quarkus-resteasy-deployment + ${project.version} + pom + test + + + * + * + + + + + io.quarkus + quarkus-resteasy-jsonb-deployment + ${project.version} + pom + test + + + * + * + + + + + io.quarkus + quarkus-smallrye-health-deployment + ${project.version} + pom + test + + + * + * + + + + + io.quarkus + quarkus-smallrye-reactive-messaging-rabbitmq-deployment + ${project.version} + pom + test + + + * + * + + + + + io.smallrye.reactive + smallrye-reactive-messaging-api + + + org.awaitility + awaitility + test + + + + + + + io.quarkus + quarkus-maven-plugin + + + + build + + + + + + + maven-failsafe-plugin + + true + + + + + maven-surefire-plugin + + true + + + + + + + + test-rabbitmq + + + test-containers + + + + + + maven-surefire-plugin + + false + + + + maven-failsafe-plugin + + false + + + + + + + + + diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/PeopleManager.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/PeopleManager.java new file mode 100644 index 0000000000000..d01dd90bd33e7 --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/PeopleManager.java @@ -0,0 +1,25 @@ +package io.quarkus.it.rabbitmq; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import javax.enterprise.context.ApplicationScoped; + +import org.eclipse.microprofile.reactive.messaging.Incoming; + +import io.vertx.core.json.JsonObject; + +@ApplicationScoped +public class PeopleManager { + + private final List list = new CopyOnWriteArrayList<>(); + + @Incoming("people-in") + public void consume(JsonObject message) { + list.add(message.mapTo(Person.class)); + } + + public List getPeople() { + return list; + } +} diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/PeopleProducer.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/PeopleProducer.java new file mode 100644 index 0000000000000..c8c29898fdcf4 --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/PeopleProducer.java @@ -0,0 +1,26 @@ +package io.quarkus.it.rabbitmq; + +import java.time.Duration; + +import javax.enterprise.context.ApplicationScoped; + +import org.eclipse.microprofile.reactive.messaging.Outgoing; + +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; + +@ApplicationScoped +public class PeopleProducer { + @Outgoing("people-out") + public Multi generatePeople() { + return Uni.createFrom().nullItem() + .onItem().delayIt().by(Duration.ofSeconds(3)) + .onItem().transformToMulti(n -> Multi.createFrom() + .items(new Person("bob"), + new Person("alice"), + new Person("tom"), + new Person("jerry"), + new Person("anna"), + new Person("ken"))); + } +} diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/Person.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/Person.java new file mode 100644 index 0000000000000..674ce2bcad8dc --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/Person.java @@ -0,0 +1,16 @@ +package io.quarkus.it.rabbitmq; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +public class Person { + public String name; + + public Person() { + // default no-arg constructor. + } + + public Person(String name) { + this.name = name; + } +} diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/RabbitMQEndpoint.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/RabbitMQEndpoint.java new file mode 100644 index 0000000000000..217c715f09b78 --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/RabbitMQEndpoint.java @@ -0,0 +1,22 @@ +package io.quarkus.it.rabbitmq; + +import java.util.List; + +import javax.inject.Inject; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("/rabbitmq") +public class RabbitMQEndpoint { + @Inject + PeopleManager people; + + @GET + @Path("/people") + @Produces(MediaType.APPLICATION_JSON) + public List getPeople() { + return people.getPeople(); + } +} diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/TestCredentialsProvider.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/TestCredentialsProvider.java new file mode 100644 index 0000000000000..6ee393de8b0c3 --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/java/io/quarkus/it/rabbitmq/TestCredentialsProvider.java @@ -0,0 +1,30 @@ +package io.quarkus.it.rabbitmq; + +import java.time.Instant; +import java.util.Map; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Named; + +import org.eclipse.microprofile.config.inject.ConfigProperty; + +import io.quarkus.credentials.CredentialsProvider; + +@ApplicationScoped +@Named("test-creds-provider") +public class TestCredentialsProvider implements CredentialsProvider { + + @ConfigProperty(name = "test-creds-provider.username") + String username; + + @ConfigProperty(name = "test-creds-provider.password") + String password; + + @Override + public Map getCredentials(String credentialsProviderName) { + return Map.of( + CredentialsProvider.USER_PROPERTY_NAME, username, + CredentialsProvider.PASSWORD_PROPERTY_NAME, password, + CredentialsProvider.EXPIRATION_TIMESTAMP_PROPERTY_NAME, Instant.now().plusSeconds(90).toString()); + } +} diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/resources/application.properties b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/resources/application.properties new file mode 100644 index 0000000000000..fc2c41eb950cc --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/main/resources/application.properties @@ -0,0 +1,10 @@ + +mp.messaging.outgoing.people-out.connector=smallrye-rabbitmq +mp.messaging.outgoing.people-out.exchange.name=people + +mp.messaging.incoming.people-in.connector=smallrye-rabbitmq +mp.messaging.incoming.people-in.queue.name=people +mp.messaging.incoming.people-in.exchange.name=people + +quarkus.rabbitmq.devservices.enabled=false +quarkus.rabbitmq.credentials-provider=rabbitmq diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/test/java/io/quarkus/it/rabbitmq/RabbitMQConnectorDynCredsIT.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/test/java/io/quarkus/it/rabbitmq/RabbitMQConnectorDynCredsIT.java new file mode 100644 index 0000000000000..79419f5b56069 --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/test/java/io/quarkus/it/rabbitmq/RabbitMQConnectorDynCredsIT.java @@ -0,0 +1,8 @@ +package io.quarkus.it.rabbitmq; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class RabbitMQConnectorDynCredsIT extends RabbitMQConnectorDynCredsTest { + +} diff --git a/integration-tests/reactive-messaging-rabbitmq-dyn/src/test/java/io/quarkus/it/rabbitmq/RabbitMQConnectorDynCredsTest.java b/integration-tests/reactive-messaging-rabbitmq-dyn/src/test/java/io/quarkus/it/rabbitmq/RabbitMQConnectorDynCredsTest.java new file mode 100644 index 0000000000000..dc3746a31717a --- /dev/null +++ b/integration-tests/reactive-messaging-rabbitmq-dyn/src/test/java/io/quarkus/it/rabbitmq/RabbitMQConnectorDynCredsTest.java @@ -0,0 +1,67 @@ +package io.quarkus.it.rabbitmq; + +import static io.restassured.RestAssured.get; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; + +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.RabbitMQContainer; +import org.testcontainers.shaded.org.apache.commons.lang.RandomStringUtils; +import org.testcontainers.utility.DockerImageName; + +import io.quarkus.it.rabbitmq.RabbitMQConnectorDynCredsTest.VaultResource; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.common.mapper.TypeRef; + +@QuarkusTest +@QuarkusTestResource(VaultResource.class) +public class RabbitMQConnectorDynCredsTest { + + public static class VaultResource implements QuarkusTestResourceLifecycleManager { + + RabbitMQContainer rabbit; + + @Override + public Map start() { + String username = "tester"; + String password = RandomStringUtils.random(10); + + rabbit = new RabbitMQContainer(DockerImageName.parse("rabbitmq:3.9-management")) + .withNetwork(Network.SHARED) + .withNetworkAliases("rabbitmq") + .withUser(username, password) + .withPermission("/", username, ".*", ".*", ".*"); + rabbit.start(); + + return Map.of( + "rabbitmq-host", rabbit.getHost(), + "rabbitmq-port", rabbit.getAmqpPort().toString(), + "rabbitmq-username", "invalid", + "rabbitmq-password", "invalid", + "test-creds-provider.username", username, + "test-creds-provider.password", password); + } + + @Override + public void stop() { + rabbit.stop(); + } + } + + protected static final TypeRef> TYPE_REF = new TypeRef>() { + }; + + @Test + public void test() { + await().atMost(30, SECONDS) + .untilAsserted(() -> Assertions.assertEquals(6, get("/rabbitmq/people").as(TYPE_REF).size())); + } + +} diff --git a/integration-tests/reactive-messaging-rabbitmq/src/main/resources/application.properties b/integration-tests/reactive-messaging-rabbitmq/src/main/resources/application.properties index a3a9833221c22..fe4687906f478 100644 --- a/integration-tests/reactive-messaging-rabbitmq/src/main/resources/application.properties +++ b/integration-tests/reactive-messaging-rabbitmq/src/main/resources/application.properties @@ -1,7 +1,5 @@ -mp.messaging.outgoing.people-out.connector=smallrye-rabbitmq mp.messaging.outgoing.people-out.exchange.name=people -mp.messaging.incoming.people-in.connector=smallrye-rabbitmq mp.messaging.incoming.people-in.queue.name=people mp.messaging.incoming.people-in.exchange.name=people