2016-11-10 3 views
2

많은 응용 프로그램을 연결하기 위해 gRCP/Protobuf를 사용한다고 가정 해 봅니다. 이러한 응용 프로그램은 자체 속도로 개발 및 배포됩니다. 시간이 지남에 따라 정의 된 인터페이스에서 다른 버전을 사용하는 동일한 앱의 다른 버전 (예 : 사용자 PC에 데스크톱 앱을 설치)이있을 것입니다.gRPC/Protobuf 인터페이스 버전 관리

Protobuf는 이전 버전과의 호환성을 허용하지만, 은 다른 지점에서 실행중인 인터페이스의 버전을 확인하는 방법이 있습니까?

가장 간단한 구현은 앱 버전과 동일한 인터페이스 버전을 갖는 것입니다. 그러나 많은 언어가 사용되기 때문에 모든 언어에서 앱 버전 관리를 구현하는 것이 쉽지 않습니다.

그래서 버전의 인터페이스와 클라이언트 버전 서버가 알 수 있도록하는 방법? 나는 서버가 [인터페이스 v.version를 사용] 프로그램 응용의 v.version에서

DATETIME 연결을 로그인 할 수 있어야한다고 생각

+0

아마도 내가보기에 필요한 것은 글로벌 인터셉터입니다. –

+0

https://groups.google.com/forum/#!topic/grpc-io/LPsPg5ctQd4와 유사합니다. 사람들이 "GetVersion()"메소드를 구현합니까? 질문 –

+0

방법을 변경하고 두 가지 최신 버전을 유지하는 것이 좋습니다. 그것은'DoSmth7()'과'DoSmth8()'을 가지고 있는데 이것은 약간 못 생겼지 만 이것을 산다. –

답변

0

버전 2 프로토콜 버퍼를 사용하는 경우 기본값을 사용하여이를 구현할 수 있습니다. 프로토콜 버퍼 3은 기본값에 대한 지원을 제거 했으므로이 응답이 거기에서 작동하지 않습니다. 모든 클라이언트가 자동으로 .proto에서 가져온 버전 번호가 포함됩니다

message MyLoginMessage 
{ 
    ... normal login fields ... 

    // Increment this number when you make new releases 
    // of this .proto. 
    optional int32 protocol_version [default=55]; 
} 

이 방법 : 당신의 인터페이스를 정의하는 .proto 파일에서

는 같은 있습니다.

편집 : 아, 그냥 proto3 태그를 발견했습니다. 그래서이 대답은 결국 당신에게 유용하지 않다고 생각합니다. 이 작업을 수행하는

+0

아이디어가 좋습니다. 그러나'optional'는 proto3에 대해 키워드/지원되지 않습니다.또한 모든 메시지와 인터페이스에 추가해야합니다. –

0

한 가지 방법은 다음과 같이 당신의 .proto 파일의 상단에 해당 옵션을 custom option를 추가하고 설정하는 것입니다 :

option (my_app.version) = 3; 

그런 다음 각 언어에 해당 옵션의 값을 검사 할 수 있습니다 귀하의 버전 번호로 표시하십시오.

0

곧 출시 될 gRPC 버전에는 Server Reflection이라는 새로운 기능이 추가 될 예정입니다. 이것은 클라이언트가 사용되는 proto 파일을 기술하는 디스크립터를 서버에 요청할 수있게한다. 서버가 클라이언트가 실행중인 버전을 알고 있기보다는 클라이언트가 서버가 실행 중인지를 알 수 있습니다. 서버 설명자가 클라이언트에 이미있는 것과 일치하면 서버가 동일한 버전으로 말하고 있음을 알게됩니다.

이 버전은 1.1으로 출시됩니다.

Protobufs는 이 아니기 때문에을 사용해야합니다. proto를 올바르게 설정하면 이전 버전과 새 버전의 클라이언트와 서버가 함께 작동해야합니다.