Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Ориентировочный интерфейс нашего messaging решения.
- */
- public interface MessagingService {
- /**
- * Отправка сообщения в шину.
- *
- * @param msg сообщение для отправки.
- *
- * @return идентификатор отправленного сообщения (correlationId)
- */
- <T> MessageId send(Message<T> msg);
- /**
- * Встает на ожидание ответа по сообщению с messageId.
- *
- * Редко, но может кинуть исключение по таймауту.
- *
- * @param messageId идентификатор сообщения, на которое ждем ответ.
- * @return Тело ответа.
- */
- <T> Message<T> receive(MessageId messageId) throws TimeoutException;
- /**
- * Отправляем сообщение и ждем на него ответ.
- *
- * @param request тело запроса.
- * @return тело ответа.
- */
- <R, A> Message<A> doRequest(Message<R> request) throws TimeoutException;
- }
- /**
- * Ориентировочный интерфейс мейлера.
- */
- public interface SendMailer {
- void sendMail (EmailAddress toAddress, EmailContent messageBody) throws TimeoutException;
- }
- /**
- * Опциональный интерфейс для лисенеров.
- * Необязательно реализовывать всю инфраструктуру по регистрации и обработке, достаточно и тестов.
- *
- * @param <T> тип сообщений, которые будем слушать.
- */
- public interface MessageListener<T> {
- void handleMessage(Message<T> incomingMessage);
- }
- public class MessagingServiceStub implements MessagingService {
- @Override
- public <T> MessageId send(Message<T> msg) {
- return new MessageId(UUID.randomUUID());
- }
- @Override
- public <T> Message<T> receive(MessageId messageId) throws TimeoutException {
- if(shouldThrowTimeout()) {
- sleep();
- throw new TimeoutException("Timeout!");
- }
- if(shouldSleep()) {
- sleep();
- }
- // return our stub message here.
- return null;
- }
- @Override
- public <R, A> Message<A> doRequest(Message<R> request) throws TimeoutException {
- final MessageId messageId = send(request);
- return receive(messageId);
- }
- @SneakyThrows
- private static void sleep() {
- Thread.sleep(TimeUnit.MINUTES.toMillis(1));
- }
- private static boolean shouldSleep() {
- return new Random().nextInt(10) == 1;
- }
- private static boolean shouldThrowTimeout() {
- return new Random().nextInt(10) == 1;
- }
- }
- public class SendMailerStub implements SendMailer {
- @Override
- public void sendMail(EmailAddress toAddress, EmailContent messageBody) throws TimeoutException {
- if(shouldThrowTimeout()) {
- sleep();
- throw new TimeoutException("Timeout!");
- }
- if(shouldSleep()) {
- sleep();
- }
- // ok.
- log.info("Message sent to {}, body {}.", toAddress, messageBody);
- }
- @SneakyThrows
- private static void sleep() {
- Thread.sleep(TimeUnit.MINUTES.toMillis(1));
- }
- private static boolean shouldSleep() {
- return new Random().nextInt(10) == 1;
- }
- private static boolean shouldThrowTimeout() {
- return new Random().nextInt(10) == 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment