RocketMQ メッセージを使用するときに一部のフィールドが null になる問題を解決する

MySQL がデータを更新すると、Canal は binlog を受信し、更新されたコンテンツを RocketMQ に送信し、それをサーバー上で消費しますが、消費中に一部のフィールドが null であることが判明し、これにより一部のリモート呼び出しが失敗します。
ここに画像の説明を挿入します
奇妙なことに、すべてのフィールドが null であるわけではありません...
RocketMQ 管理者パネルのメッセージを見ると、完了していることがわかります。
ここに画像の説明を挿入します
よく考えてみると、「id」「名前」「価格」などの1つの単語で構成されるフィールドは正常に送信できるが、「カテゴリーid」「ブランド」などの2つ以上の単語で構成されるフィールドは正常に送信できることがわかりました。 id" では、送信時に問題が発生します。これは、MySQL ではフィールドにスネークボトム スタイルで名前が付けられますが、Java プログラムではフィールドがすべてハンプケース形式であるため、マッピングできず、結果が null になるためです。
ここに画像の説明を挿入します
最初は、RocketMQ の自動変換スタイルを設定しようと考えましたが、適切な設定が見つかりませんでした。そこで、単純に String 形式で受け入れて、Json とオブジェクトを自分で変換したいと思いました。Gson、Jackson、fastjson などの Json ライブラリにはすべて、関連するメソッドがあります。
したがって、メソッドの先頭は次のように変更され、
ここに画像の説明を挿入します
カプセル化されたツール クラスは次のようになります。

public class JsonUtils {
    
    

    public static <T> CanalMessage<T> CanalMessageToObject(String json, Class<T> clazz) {
    
    
        return JSONObject.parseObject(json, new TypeReference<CanalMessage<T>>(clazz) {
    
    });
    }
}

その後の結果は次のようになります。これで
ここに画像の説明を挿入します
完了です。

おすすめ

転載: blog.csdn.net/weixin_45654405/article/details/128386214