私はクライアントにcontent_type application/jsonを提供する必要はありませんが、デフォルトにしています。私はこれを働かせた。デフォルトのcontent_type application/jsonにDefaultExceptionStatgyから無効化されたisFatalがあります
また、別の例と組み合わせて、ConditionalRejectingErrorHandlerからカスタムisFatal(Throwable t)を実装しようとしました。カスタムエラーハンドラを起動させることはできますが、それでもcontent_typeプロパティが必要になるようです。私はそれらを同時に両方の方法で動かす方法を理解できません。
アイデア?
以下は正常に動作しますcontent_type 編集:以下のコードは私が思ったように機能しません。プロパティCONTENT_TYPEアプリケーション/ JSONと、キュー内の古いメッセージがConditionalRejectingErrorHandlerでisFatalを()をオーバーライドするには、以下のここ
@EnableRabbit
@Configuration
public class ExampleRabbitConfigurer implements
RabbitListenerConfigurer {
@Value("${spring.rabbitmq.host:'localhost'}")
private String host;
@Value("${spring.rabbitmq.port:5672}")
private int port;
@Value("${spring.rabbitmq.username}")
private String username;
@Value("${spring.rabbitmq.password}")
private String password;
@Autowired
private MappingJackson2MessageConverter mappingJackson2MessageConverter;
@Autowired
private DefaultMessageHandlerMethodFactory messageHandlerMethodFactory;
@Bean
public MappingJackson2MessageConverter mappingJackson2MessageConverter() {
return new MappingJackson2MessageConverter();
}
@Bean
public DefaultMessageHandlerMethodFactory messageHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(mappingJackson2MessageConverter);
return factory;
}
@Override
public void configureRabbitListeners(final RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory);
}
作品に引っ張られている必要があります。 SimpleRabbitListenerContainerFactory.setMessageConverter()は、DefaultMessageHandlerMethodFactory.setMessageConverter()と同じ目的を果たすようです。明らかに、これは当てはまりません。
@EnableRabbit
@Configuration
public class ExampleRabbitConfigurer {
@Value("${spring.rabbitmq.host:'localhost'}")
private String host;
@Value("${spring.rabbitmq.port:5672}")
private int port;
@Value("${spring.rabbitmq.username}")
private String username;
@Value("${spring.rabbitmq.password}")
private String password;
@Autowired
ConnectionFactory connectionFactory;
@Autowired
Jackson2JsonMessageConverter jackson2JsonConverter;
@Autowired
ErrorHandler amqpErrorHandlingExceptionStrategy;
@Bean
public Jackson2JsonMessageConverter jackson2JsonConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public ErrorHandler amqpErrorHandlingExceptionStrategy() {
return new ConditionalRejectingErrorHandler(new AmqpErrorHandlingExceptionStrategy());
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(jackson2JsonConverter);
factory.setErrorHandler(amqpErrorHandlingExceptionStrategy);
return factory;
}
public static class AmqpErrorHandlingExceptionStrategy extends ConditionalRejectingErrorHandler.DefaultExceptionStrategy {
private final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(getClass());
@Override
public boolean isFatal(Throwable t) {
if (t instanceof ListenerExecutionFailedException) {
ListenerExecutionFailedException lefe = (ListenerExecutionFailedException) t;
LOGGER.error("Failed to process inbound message from queue "
+ lefe.getFailedMessage().getMessageProperties().getConsumerQueue()
+ "; failed message: " + lefe.getFailedMessage(), t);
}
return super.isFatal(t);
}
}
と2.0では、MPPをコンテナファクトリに追加できます。 –
おかげでゲーリー、afterReceivePostProcessorは私が必要としていたものでした。あなたのサンプルを自分のコードにうまく適応させることができました。 – JvmSd121