Merge branch '2.7.x' into 3.0.x

Closes gh-36611
pull/37018/head
Stephane Nicoll 1 year ago
commit 150526a6a0

@ -38,6 +38,8 @@ public final class DockerImageNames {
private static final String POSTGRESQL_VERSION = "14.0"; private static final String POSTGRESQL_VERSION = "14.0";
private static final String RABBIT_VERSION = "3.11-alpine";
private static final String REDIS_VERSION = "4.0.14"; private static final String REDIS_VERSION = "4.0.14";
private static final String REGISTRY_VERSION = "2.7.1"; private static final String REGISTRY_VERSION = "2.7.1";
@ -93,6 +95,14 @@ public final class DockerImageNames {
return DockerImageName.parse("postgres").withTag(POSTGRESQL_VERSION); return DockerImageName.parse("postgres").withTag(POSTGRESQL_VERSION);
} }
/**
* Return a {@link DockerImageName} suitable for running RabbitMQ.
* @return a docker image name for running redis
*/
public static DockerImageName rabbit() {
return DockerImageName.parse("rabbitmq").withTag(RABBIT_VERSION);
}
/** /**
* Return a {@link DockerImageName} suitable for running Redis. * Return a {@link DockerImageName} suitable for running Redis.
* @return a docker image name for running redis * @return a docker image name for running redis

@ -7,4 +7,10 @@ description = "Spring Boot AMQP smoke test"
dependencies { dependencies {
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-amqp")) implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-amqp"))
testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
testImplementation("org.awaitility:awaitility")
testImplementation("org.testcontainers:junit-jupiter")
testImplementation("org.testcontainers:rabbitmq")
} }

@ -1,5 +0,0 @@
rabbitmq:
image: rabbitmq
ports:
- "5672:5672"
- "15672:15672"

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,15 +21,14 @@ import java.util.Date;
import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication @SpringBootApplication
@RabbitListener(queues = "foo") @RabbitListener(queues = "foo")
@EnableScheduling
public class SampleAmqpSimpleApplication { public class SampleAmqpSimpleApplication {
@Bean @Bean
@ -47,6 +46,11 @@ public class SampleAmqpSimpleApplication {
System.out.println(new Date() + ": " + foo); System.out.println(new Date() + ": " + foo);
} }
@Bean
public ApplicationRunner runner(Sender sender) {
return (args) -> sender.send("Hello");
}
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(SampleAmqpSimpleApplication.class, args); SpringApplication.run(SampleAmqpSimpleApplication.class, args);
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -18,16 +18,14 @@ package smoketest.amqp;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
public class Sender { public class Sender {
@Autowired @Autowired
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
@Scheduled(fixedDelay = 1000L) public void send(String message) {
public void send() { this.rabbitTemplate.convertAndSend("foo", message);
this.rabbitTemplate.convertAndSend("foo", "hello");
} }
} }

@ -0,0 +1,63 @@
/*
* Copyright 2012-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package smoketest.amqp;
import java.time.Duration;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testcontainers.containers.RabbitMQContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.boot.testsupport.testcontainers.DockerImageNames;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
@Testcontainers(disabledWithoutDocker = true)
@ExtendWith(OutputCaptureExtension.class)
class SampleAmqpSimpleApplicationTests {
@Container
static final RabbitMQContainer rabbit = new RabbitMQContainer(DockerImageNames.rabbit())
.withStartupTimeout(Duration.ofMinutes(4));
@DynamicPropertySource
static void rabbitProperties(DynamicPropertyRegistry properties) {
properties.add("spring.rabbitmq.addresses", rabbit::getAmqpUrl);
properties.add("spring.rabbitmq.username", rabbit::getAdminUsername);
properties.add("spring.rabbitmq.password", rabbit::getAdminPassword);
}
@Autowired
private Sender sender;
@Test
void sendSimpleMessage(CapturedOutput output) {
this.sender.send("Test message");
Awaitility.waitAtMost(Duration.ofMinutes(1)).untilAsserted(() -> assertThat(output).contains("Test message"));
}
}
Loading…
Cancel
Save