refactored message pact examples
This commit is contained in:
@@ -13,13 +13,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class UserCreatedMessageConsumer {
|
||||
public class MessageConsumer {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(UserCreatedMessageConsumer.class);
|
||||
private Logger logger = LoggerFactory.getLogger(MessageConsumer.class);
|
||||
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
public UserCreatedMessageConsumer(ObjectMapper objectMapper) {
|
||||
public MessageConsumer(ObjectMapper objectMapper) {
|
||||
this.objectMapper = objectMapper;
|
||||
}
|
||||
|
||||
@@ -47,13 +47,13 @@ public class MessageConsumerConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageListenerAdapter listenerAdapter(UserCreatedMessageConsumer userCreatedMessageConsumer) {
|
||||
return new MessageListenerAdapter(userCreatedMessageConsumer, "consumeStringMessage");
|
||||
public MessageListenerAdapter listenerAdapter(MessageConsumer messageConsumer) {
|
||||
return new MessageListenerAdapter(messageConsumer, "consumeStringMessage");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public UserCreatedMessageConsumer eventReceiver(ObjectMapper objectMapper) {
|
||||
return new UserCreatedMessageConsumer(objectMapper);
|
||||
public MessageConsumer eventReceiver(ObjectMapper objectMapper) {
|
||||
return new MessageConsumer(objectMapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,14 +17,14 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class UserCreatedMessageConsumerTest {
|
||||
public class MessageConsumerTest {
|
||||
|
||||
@Rule
|
||||
public MessagePactProviderRule mockProvider = new MessagePactProviderRule(this);
|
||||
private byte[] currentMessage;
|
||||
|
||||
@Autowired
|
||||
private UserCreatedMessageConsumer userCreatedMessageConsumer;
|
||||
private MessageConsumer messageConsumer;
|
||||
|
||||
@Pact(provider = "userservice", consumer = "userclient")
|
||||
public MessagePact userCreatedMessagePact(MessagePactBuilder builder) {
|
||||
@@ -46,7 +46,7 @@ public class UserCreatedMessageConsumerTest {
|
||||
@Test
|
||||
@PactVerification("userCreatedMessagePact")
|
||||
public void verifyCreatePersonPact() throws IOException {
|
||||
userCreatedMessageConsumer.consumeStringMessage(new String(this.currentMessage));
|
||||
messageConsumer.consumeStringMessage(new String(this.currentMessage));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -0,0 +1,31 @@
|
||||
package io.reflectoring;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Takes a {@link UserCreatedMessage}, converts it to a {@link String} and sends it to be published.
|
||||
*/
|
||||
class MessageProducer {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(MessageProducer.class);
|
||||
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
private MessagePublisher messagePublisher;
|
||||
|
||||
MessageProducer(ObjectMapper objectMapper, MessagePublisher messagePublisher) {
|
||||
this.objectMapper = objectMapper;
|
||||
this.messagePublisher = messagePublisher;
|
||||
}
|
||||
|
||||
void produceUserCreatedMessage(UserCreatedMessage message) throws IOException {
|
||||
String stringMessage = objectMapper.writeValueAsString(message);
|
||||
messagePublisher.publishMessage(stringMessage, "user.created");
|
||||
logger.info("Published message '{}'", stringMessage);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,18 +18,18 @@ class MessageProviderConfiguration {
|
||||
|
||||
|
||||
@Bean
|
||||
UserCreatedMessageProvider messageProvider(ObjectMapper objectMapper, UserCreatedMessagePublisher publisher) {
|
||||
return new UserCreatedMessageProvider(objectMapper, publisher);
|
||||
MessageProducer messageProvider(ObjectMapper objectMapper, MessagePublisher publisher) {
|
||||
return new MessageProducer(objectMapper, publisher);
|
||||
}
|
||||
|
||||
@Bean
|
||||
UserCreatedMessagePublisher messagePublisher(RabbitTemplate rabbitTemplate, TopicExchange topicExchange) {
|
||||
return new UserCreatedMessagePublisher(rabbitTemplate, topicExchange);
|
||||
MessagePublisher messagePublisher(RabbitTemplate rabbitTemplate, TopicExchange topicExchange) {
|
||||
return new MessagePublisher(rabbitTemplate, topicExchange);
|
||||
}
|
||||
|
||||
@Bean
|
||||
SendMessageJob job(UserCreatedMessageProvider messageProvider) {
|
||||
return new SendMessageJob(messageProvider);
|
||||
SendMessageJob job(MessageProducer messageProducer) {
|
||||
return new SendMessageJob(messageProducer);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
/**
|
||||
* Publishes a String message to RabbitMQ.
|
||||
*/
|
||||
class UserCreatedMessagePublisher {
|
||||
class MessagePublisher {
|
||||
|
||||
private RabbitTemplate rabbitTemplate;
|
||||
|
||||
private TopicExchange topicExchange;
|
||||
|
||||
UserCreatedMessagePublisher(RabbitTemplate rabbitTemplate, TopicExchange topicExchange) {
|
||||
MessagePublisher(RabbitTemplate rabbitTemplate, TopicExchange topicExchange) {
|
||||
this.rabbitTemplate = rabbitTemplate;
|
||||
this.topicExchange = topicExchange;
|
||||
}
|
||||
@@ -10,10 +10,10 @@ class SendMessageJob {
|
||||
|
||||
private Random random = new Random();
|
||||
|
||||
private UserCreatedMessageProvider messageProvider;
|
||||
private MessageProducer messageProducer;
|
||||
|
||||
SendMessageJob(UserCreatedMessageProvider messageProvider) {
|
||||
this.messageProvider = messageProvider;
|
||||
SendMessageJob(MessageProducer messageProducer) {
|
||||
this.messageProducer = messageProducer;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -29,7 +29,7 @@ class SendMessageJob {
|
||||
.name("Zaphpod Beeblebrox")
|
||||
.build())
|
||||
.build();
|
||||
messageProvider.sendUserCreatedMessage(userCreatedMessage);
|
||||
messageProducer.produceUserCreatedMessage(userCreatedMessage);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -10,6 +10,12 @@ import au.com.dius.pact.provider.ProviderVerifier;
|
||||
import au.com.dius.pact.provider.junit.target.AmqpTarget;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Custom implementation of {@link AmqpTarget} since with {@link AmqpTarget}
|
||||
* I had classpath troubles (see https://github.com/DiUS/pact-jvm/issues/763).
|
||||
* Use at own risk, since the implementation is not complete and may behave
|
||||
* a little different that the original class.
|
||||
*/
|
||||
public class CustomAmqpTarget extends AmqpTarget {
|
||||
|
||||
public CustomAmqpTarget(List<String> packagesToScan) {
|
||||
@@ -8,16 +8,12 @@ import au.com.dius.pact.provider.PactVerifyProvider;
|
||||
import au.com.dius.pact.provider.junit.PactRunner;
|
||||
import au.com.dius.pact.provider.junit.Provider;
|
||||
import au.com.dius.pact.provider.junit.loader.PactFolder;
|
||||
import au.com.dius.pact.provider.junit.target.AmqpTarget;
|
||||
import au.com.dius.pact.provider.junit.target.Target;
|
||||
import au.com.dius.pact.provider.junit.target.TestTarget;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@RunWith(PactRunner.class)
|
||||
@@ -28,9 +24,9 @@ public class UserCreatedMessageProviderTest {
|
||||
@TestTarget
|
||||
public final Target target = new CustomAmqpTarget(Collections.singletonList("io.reflectoring"));
|
||||
|
||||
private UserCreatedMessagePublisher publisher = Mockito.mock(UserCreatedMessagePublisher.class);
|
||||
private MessagePublisher publisher = Mockito.mock(MessagePublisher.class);
|
||||
|
||||
private UserCreatedMessageProvider messageProvider = new UserCreatedMessageProvider(new ObjectMapper(), publisher);
|
||||
private MessageProducer messageProducer = new MessageProducer(new ObjectMapper(), publisher);
|
||||
|
||||
@PactVerifyProvider("a user created message")
|
||||
public String verifyUserCreatedMessage() throws IOException {
|
||||
@@ -45,7 +41,7 @@ public class UserCreatedMessageProviderTest {
|
||||
.name("Zaphod Beeblebrox")
|
||||
.build())
|
||||
.build();
|
||||
messageProvider.sendUserCreatedMessage(message);
|
||||
messageProducer.produceUserCreatedMessage(message);
|
||||
|
||||
// then
|
||||
ArgumentCaptor<String> messageCapture = ArgumentCaptor.forClass(String.class);
|
||||
@@ -1,31 +0,0 @@
|
||||
package io.reflectoring;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Takes a {@link UserCreatedMessage}, converts it to a {@link String} and sends it to be published.
|
||||
*/
|
||||
class UserCreatedMessageProvider {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(UserCreatedMessageProvider.class);
|
||||
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
private UserCreatedMessagePublisher userCreatedMessagePublisher;
|
||||
|
||||
UserCreatedMessageProvider(ObjectMapper objectMapper, UserCreatedMessagePublisher userCreatedMessagePublisher) {
|
||||
this.objectMapper = objectMapper;
|
||||
this.userCreatedMessagePublisher = userCreatedMessagePublisher;
|
||||
}
|
||||
|
||||
void sendUserCreatedMessage(UserCreatedMessage message) throws IOException {
|
||||
String stringMessage = objectMapper.writeValueAsString(message);
|
||||
userCreatedMessagePublisher.publishMessage(stringMessage, "user.created");
|
||||
logger.info("Published message '{}'", stringMessage);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,7 +10,7 @@ include 'spring-cloud:spring-cloud-contract-consumer'
|
||||
include 'pact:pact-spring-provider'
|
||||
include 'pact:pact-feign-consumer'
|
||||
include 'pact:pact-message-consumer'
|
||||
include 'pact:pact-message-provider'
|
||||
include 'pact:pact-message-producer'
|
||||
|
||||
|
||||
include 'spring-boot:rabbitmq-event-brokering'
|
||||
|
||||
Reference in New Issue
Block a user