2017-08-09 4 views
0

Rabbitmq経由で通信するコンポーネント間で統合テストを行っています。消費者がメッセージを処理しようとしたとき不正なハンドラをコールしようとすると、AMQPの処理が断続的に失敗する

@RabbitHandler 
public List<Call> handle(CallRecordMonthRequest request){ 
    return source.getCalls(request.getMonth(), request.getYear()); 
} 

しかし、時には、それは次の例外で失敗します:

org.springframework.amqp.rabbit 私はこのハンドラメソッドを消費者に持っています。 listener.exception.ListenerExecutionFailedException:引数type = [クラス[B]、値= [{[B @ 7d202207]]でターゲットメソッド 'handle'を呼び出すことに失敗しました ... ... ... 原因: java.lang.NoSuchMethodException:org.rainn.reporting.communication.RabbitMqAdapter.han DLE([B)

Iはbyte[]を受け取り、私は文字列にそれを回すとき、それは適切な型にデシリアライズすることを意味されているのと同じJSONペイロードあるハンドラを追加しました。

答えて

0

おそらく、エラーメッセージにcontentTypeプロパティがないことを意味します。 Jackson2JsonMessageConverterは、コンテンツタイプを持たないメッセージ(または文字列jsonを含まないメッセージ)をbyte[]として返します。

メッセージには通常、contentTypeapplication/jsonである必要があります。

あなたが送信者を解決できない場合は、コンバータをサブクラス化することができ、かつ、次のようにfromMessageを上書き...

public Object fromMessage(Message message, Object conversionHint) throws MessageConversionException { 
    MessageProperties properties = message.getMessageProperties(); 
    if (properties.getContentType == null) { 
     properties.setContentType("application/json"); 
    } 
    super.fromMessage(message, conversionHint); 
} 
関連する問題