gpt4 book ai didi

java - Spring - 在 RabbitMQ 监听器中验证传入消息

转载 作者:行者123 更新时间:2023-11-30 06:46:37 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 框架。我想通过 RabbitMQ 将对象从一个服务发送到另一个服务,如下所示:

服务 A:

rabbitTemplate.convertAndSend("queue", createAccountRequestMessage);

服务 B:

@RabbitListener(queues = "queue")
public void onAccountRequested(@Valid CreateAccountRequestMessage createAccountRequestMessage, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG, long tag) throws IOException
{

}

CreateAccountRequestMessage 类中,我定义了一些验证注释,如 @NotEmpty@NotNull 等,但是当我发送错误消息时从服务 A 到服务 B,@Valid 注释不起作用,并且在调用 onAccountRequested 方法之前未验证 CreateAccountRequestMessage 对象。

最佳答案

您需要在 DefaultMessageHandlerMethodFactory 中设置 validator 。

@Autowired
SmartValidator validator;

@Bean
public DefaultMessageHandlerMethodFactory messageHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setValidator(this.validator);
return factory;
}

然后您还需要指定 @Payload 注释以及 @Valid 注释。

@RabbitListener(queues = "queue")
public void onAccountRequested(@Valid @Payload CreateAccountRequestMessage
createAccountRequestMessage, Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG, long tag) throws IOException
{

}

现在 MethodArgumentNotValidException 将被抛出并且消息将被丢弃,或者您可以将消息发送到死信交换。

关于java - Spring - 在 RabbitMQ 监听器中验证传入消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47394542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com