2017-12-27 2 views
0

저는 제작자와 소비자 마이크로 서비스간에 메시지를 교환하기 위해 스프링 클라우드 스트림 (kafka)을 사용하고 있습니다. 네이티브 java 직렬화와 데이터를 교환합니다. 스프링 클라우드 문서에 따라 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

변환기는 실제로 이러한 우려를 해결하기 위해 존재하는 스프링 클라우드 스트림의 자연스러운 확장 메커니즘 (스프링 통합 통합)이기 때문에 실제로 시도하는 것이 아니라 오히려 수행하는 것이 좋습니다. 그래서 네, 당신은 자신의 사용자 지정 변환기를 추가 할 수 있습니다.

또한 Kafka에는 기본 serde 개념이 있으므로 두 가지가 충돌을 일으키지 않는지 확인해야합니다.

관련 문제