Аспект для слушателя Rabbit MQ - PullRequest
0 голосов
/ 02 марта 2020

Мой слушатель RMQ:

@RabbitListener(
  bindings = @QueueBinding(
    value = @Queue,
    exchange = @Exchange(
      value = "${rabbitmq.exchange.sales-exchange.name}",
      type = "${rabbitmq.exchange.sales-exchange.type}",
      ignoreDeclarationExceptions = "true"
    ),
    key = "${rabbitmq.exchange.sales-exchange.sales-bk}"
  )
)
public void listenSalesOrderCreatedMessage(
  @Headers Map<String, Object> headers,
  @Payload SalesDTO payload
)
{
  log.info("Message Received!");
}

salesDTO:

package org.laptop.sale.event.subscriber.dto;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
public class SalesOrderCreatedEventDTO implements Serializable {

  @JsonProperty("vendorDetails")
  @Valid
  private VendorDetails vendorDetails;

  @JsonInclude(JsonInclude.Include.NON_NULL)
  @Getter
  @Setter
  public static class VendorDetails implements Serializable {
    @JsonProperty("name")
    private String name;
    @JsonProperty("vendorCommission")
    private Double vendorCommission;
  }
}

Мой аспект @Around выполняется до и после вызова сообщения:

package org.laptop.sale.event.subscriber;

@Component
@Aspect
@Slf4j
public class SubscriberAdvice {
  @Around("execution(* org.laptop.sale.event.subscriber..*(..)))")
  public void payloadValidationFailed(ProceedingJoinPoint joinPoint) {
    try {
      joinPoint.proceed();
    } catch (Throwable throwable) {
      log.error("Exception in the process execution {}", throwable);
    }
  }
}

Недопустимая полезная нагрузка сообщения:

{
  "vendorDetails": {
    "name": "Vendor Name",
    "vendorCommission": "wrongData"
  }
}

Действительная полезная нагрузка сообщения:

{
  "vendorDetails": {
    "name": "Vendor Name",
    "vendorCommission": 8000.1
  }
}

Здесь поток программы входит только в аспект действительной полезной нагрузки. не входит в Аспект в случае неверной полезной нагрузки. Я попытался с @AfterThrowing также. это тоже не сработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...