2017-12-27 14 views
0

私は、Springクラウドストリーム(kafka)を使用してプロデューサとコンシューマのマイクロサービス間でメッセージを交換しています。 ネイティブjava直列化とデータを交換します。 Springクラウドのドキュメントに従って、JSON、AVROのシリアル化をサポートしています。 シリアルクラウドストリーム(kafka)をシリアル化としてprotobufを使用するように設定する方法

は、いずれかが春の雲の流れにいるProtobufのシリアライズ(メッセージコンバータ)を試され

----------------後で追加私はこのMessageConverterを書いた

public class ProtobufMessageConverter<T extends AbstractMessage > extends AbstractMessageConverter 
{ 
    private Parser<T> parser; 
    public ProtobufMessageConverter(Parser<T> parser) 

    { 
     super(new MimeType("application", "protobuf")); 
     this.parser = parser; 
    } 

    @Override 
    protected boolean supports(Class<?> clazz) 
    { 
     if (clazz != null) 
     { 
      return EquipmentProto.Equipment.class.isAssignableFrom(clazz); 
     } 
     return true; 
    } 

    @Override 
    public Object convertFromInternal(Message<?> message, Class<?> targetClass, Object conversionHint) 
    { 
     if (!(message.getPayload() instanceof byte[])) 
     { 
      return null; 
     } 
     try 
     { 
//   return EquipmentProto.Equipment.parseFrom((byte[]) message.getPayload()); 
      return parser.parseFrom((byte[]) message.getPayload()); 
     } 
     catch (Exception e) 
     { 
      this.logger.error(e.getMessage(), e); 
     } 
     return null; 
    } 

    @Override 
    protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) 
    { 
     return ((AbstractMessage) payload).toByteArray(); 
    } 

} 

答えて

0

コンバーターは、これらの問題に具体的に対処するために存在する春 - 雲のストリームの自然な拡張メカニズム(継承されたバネ統合)であるため、実際に試みるのではなく、むしろそれを行うことです。そう、はい、独自のカスタムコンバータを追加することができます。

また、カフカにはネイティブ・セラードの概念もあるので、2つが矛盾しないようにする必要があります。

関連する問題