Мой слушатель 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 также. это тоже не сработало