2016-04-12 25 views
0

Java ile gRPC kullanıyorum ve gönderdiğim iletiler uzantılar içerebilir. Protobuf docs yılında derler:gRPC ve ExtensionRegistry

When parsing a message that might have extensions, you must provide an ExtensionRegistry in which you have registered any extensions that you want to be able to parse. 

soru Ben bir müşteri olarak gRPC kullandığı kod ExtensionRegistry (ve mesaj ayrıştırma gRPC oluşturulan kodun içine yapılır) belirtmek nasıl.

GÜNCELLEME: uzantıları için destek gRPC

ProtoLiteUtils.setExtensionRegistry() 

geliştirici bir not eklendi: Bu API kararlı değildir ve biz (daha uygun bir uzun vadeli bir çözüm çok büyük olasılıkla bir değişiklik olur bir kere yönteme göre özel kayıtları, vb)

more info

cevap

0

Hmm, ben de ExtensionRegistry hakkında bir şey bulamıyorum GRPC kodu. Uzantılar proto3'te kaldırıldığı için, GRPC'nin proto2'yi kullansanız bile bunları desteklememesini seçmesi olasıdır.

Ancak, olarak egzersizle etrafında, her zaman proto serileştirebilirsiniz ve tekrar ayrıştırmak: Bu seri ve-ayrıştırma yeniden bir dizi kaynak ziyan

message = MyType.parseFrom(message.toByteString(), 
          myExtensionRegistry); 

ama işi olmalıdır . (Bu, tabiki bilinmeyen alan korumasına dayandırır, proto3'te kaldırılan başka bir özellik, ancak proto2'yi kullanıyorsunuz, bu yüzden işe yaramalı!)

+0

Çok teşekkürler, bu işe yaradı! Anlama yerine "Any" türünü kullanmaya başlamanın daha iyi olacağını düşünüyor musunuz, benim için "proto3" de olmalı? Örneğin, performans açısından. –

+0

Başka bir düşünce - gRPC'nin, ilk ayrıştırma işlemini yapmadan doğrudan ByteString'e döndürmesine ve ardından bayt dizesine -> ayrıştırma işlemine geri dönmesine neden olabilir miyim? –

+0

Eklentiler, Protobuf tel formatı için daha iyi bir uyum sağlar ve bu nedenle birçok durumda daha verimli olacaktır, ancak Protobuf projesinin onlardan uzaklaştığı göz önüne alındığında, yeni projelerde "Any" (her türlü) kullanımı oldukça mantıklıdır. (Not: Orijinal olarak "uzantılar" özelliğini tasarladım, ancak artık Google için çalışmaz, bu yüzden önyargılı olabilirim.) GRPC'nin ham ByteString isteğinde bulunup bulunmadığını bilmiyorum - bu makul bir özellik gibi gözüküyor ama hiç kullanılmıyor gRPC kendilerine izin verip vermediklerini söyleyemedim. –

1

Son zamanlarda eklenmiş olan ProtoLiteUtils.setExtensionRegistry modelini kullanabilirsiniz. 0.14 sürümü.

+0

Evet, bana "grpc.io" grubunda bunu cevapladınız :) Bu soruya hemen bir güncelleme gönderdim. Tekrar teşekkürler. –

İlgili konular