Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
cgendreau committed Feb 6, 2024
2 parents c667d13 + a34f28c commit 3844564
Show file tree
Hide file tree
Showing 15 changed files with 168 additions and 12 deletions.
4 changes: 2 additions & 2 deletions dina-base-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>
</parent>

<artifactId>dina-base-api</artifactId>
Expand Down Expand Up @@ -144,7 +144,7 @@
<dependency>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-test-support</artifactId>
<version>0.116</version>
<version>0.117</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
2 changes: 1 addition & 1 deletion dina-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>
</parent>

<artifactId>dina-client</artifactId>
Expand Down
8 changes: 7 additions & 1 deletion dina-messaging/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>
</parent>

<artifactId>dina-messaging</artifactId>
Expand All @@ -35,6 +35,12 @@
<version>${testcontainers.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-test-support</artifactId>
<version>0.117</version>
<scope>test</scope>
</dependency>

</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,25 @@
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

import java.util.Optional;
import javax.inject.Inject;
import lombok.extern.log4j.Log4j2;

/**
* Configuration of RabbitMQ related beans
*/
@Log4j2
@Configuration
@Conditional(MessagingConfigurationCondition.class)
public class RabbitMQConfig {

private final RabbitMQProperties rmqProps;
private final RabbitTemplate.ReturnsCallback returnCallback;

@Inject
public RabbitMQConfig(RabbitMQProperties rmqProps) {
public RabbitMQConfig(RabbitMQProperties rmqProps, Optional<RabbitTemplate.ReturnsCallback> returnCallback) {
this.rmqProps = rmqProps;
this.returnCallback = returnCallback.orElse(null);
}

@Bean
Expand All @@ -31,6 +36,9 @@ protected ConnectionFactory createConnectionFactory() {
cachingConnectionFactory.setUsername(rmqProps.getUsername());
cachingConnectionFactory.setPassword(rmqProps.getPassword());

// allow to get messages that can't be delivered back
cachingConnectionFactory.setPublisherReturns(true);

if(rmqProps.getPort() > 0) {
cachingConnectionFactory.setPort(rmqProps.getPort());
}
Expand All @@ -48,6 +56,16 @@ public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(createMessageConverter());

// tell RabbitMQ that messages need to be delivered
rabbitTemplate.setMandatory(true);

if (returnCallback != null) {
rabbitTemplate.setReturnsCallback(returnCallback);
} else {
rabbitTemplate.setReturnsCallback(
returned -> log.error("Can't deliver message {}", returned.getMessage()));
}

return rabbitTemplate;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;

import ca.gc.aafc.dina.messaging.DinaMessage;

@Builder
@AllArgsConstructor
@Data
@NoArgsConstructor
@Getter
public class ObjectExportNotification implements DinaMessage {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
Expand All @@ -31,7 +29,6 @@
"dina.messaging.isConsumer=true"
}
)
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class ConsumerProducerIT {

public static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:3.8.20-management-alpine");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package ca.gc.aafc.dina.messaging;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.ReturnedMessage;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.RabbitMQContainer;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

@SpringBootTest(
properties = {
"dina.messaging.isProducer=true",
"dina.messaging.isConsumer=false"
}
)
@Import(ErrorHandlingProducerIT.RabbitTemplateTestConfig.class)
public class ErrorHandlingProducerIT {

public static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:3.8.20-management-alpine");

@Inject
private RabbitTemplateTestConfig rabbitTemplateTestConfig;

@Inject
private RabbitTemplate rabbitTemplate;

@BeforeAll
static void beforeAll() {
rabbitMQContainer.start();
}

@AfterAll
static void afterAll() {
rabbitMQContainer.stop();
}

@DynamicPropertySource
static void registerRabbitMQProperties(DynamicPropertyRegistry registry) {
registry.add("rabbitmq.host", rabbitMQContainer::getHost);
registry.add("rabbitmq.port", rabbitMQContainer::getAmqpPort);
registry.add("rabbitmq.username", rabbitMQContainer::getAdminUsername);
registry.add("rabbitmq.password", rabbitMQContainer::getAdminPassword);
}

@Test
public void sendMessageToNonExistentQueue_receiverReceives() throws InterruptedException {
DinaTestMessage myMessage = new DinaTestMessage("test-message Queue non-existing");
rabbitTemplate.convertAndSend("non-existing", myMessage);

assertTrue(rabbitTemplateTestConfig.getLatch().await(1000, TimeUnit.MILLISECONDS));
assertNotNull(rabbitTemplateTestConfig.getReturnedMessage());
}

@TestConfiguration
public static class RabbitTemplateTestConfig {

private final CountDownLatch latch = new CountDownLatch(1);
private ReturnedMessage returnedMessage;

public CountDownLatch getLatch() {
return latch;
}

public ReturnedMessage getReturnedMessage() {
return returnedMessage;
}

@Bean
public RabbitTemplate.ReturnsCallback returnCallback() {
return m -> {
returnedMessage = m;
latch.countDown();
};
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ca.gc.aafc.dina.messaging;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MessagingTestApplication {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import lombok.Getter;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

import ca.gc.aafc.dina.messaging.DinaTestMessage;

@Component
@ConditionalOnProperty(prefix = "dina.messaging", name = "isConsumer", havingValue = "true")
public class RabbitMQTestConsumer implements RabbitMQMessageConsumer<DinaTestMessage> {

@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ca.gc.aafc.dina.messaging.consumer;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

import ca.gc.aafc.dina.messaging.DinaTestMessage;
Expand All @@ -9,6 +10,7 @@
import lombok.Getter;

@Component
@ConditionalOnProperty(prefix = "dina.messaging", name = "isConsumer", havingValue = "true")
public class RabbitMQTestConsumerQueue2 implements RabbitMQMessageConsumer<DinaTestMessage> {

@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ca.gc.aafc.dina.messaging.message;

import java.util.UUID;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.core.JsonProcessingException;

import ca.gc.aafc.dina.testsupport.TestResourceHelper;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class ObjectExportNotificationIT {

@Test
public void testSerDe() throws JsonProcessingException {

ObjectExportNotification oen = ObjectExportNotification.builder()
.uuid(UUID.randomUUID())
.username("user")
.toa("toa").build();

String asJson = TestResourceHelper.OBJECT_MAPPER.writeValueAsString(oen);

ObjectExportNotification oen2 = TestResourceHelper.OBJECT_MAPPER.readValue(asJson, ObjectExportNotification.class);
assertEquals(oen, oen2);
}
}
2 changes: 1 addition & 1 deletion dina-search/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>
</parent>

<artifactId>dina-search</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion dina-test-support/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<parent>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>
</parent>

<artifactId>dina-test-support</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion dina-workbook/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>
</parent>

<artifactId>dina-workbook</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>io.github.aafc-bicoe</groupId>
<artifactId>dina-base-parent</artifactId>
<version>0.116</version>
<version>0.117</version>

<packaging>pom</packaging>

Expand Down

0 comments on commit 3844564

Please sign in to comment.