gRPC Uyumluluğu
Connect, gRPC ve gRPC-Web protokollerini tam olarak desteklemektedir, akış dahil. Bu protokollerin uygulamasını, Google'ın kendi etkileşim testlerinin geliştirilmiş bir versiyonu ile doğruluyoruz.
İşleyiciler
İşleyiciler varsayılan olarak gRPC protokolünü destekler: grpc-go
, grpcurl
ve diğer TLS kullanan gRPC istemcileri ile özel bir yapılandırmaya gerek kalmadan çalışırlar. TLS kullanılmadan HTTP/2 ile çalışan gRPC istemcilerini desteklemek için, dağıtım belgelerinde
açıklandığı gibi golang.org/x/net/http2/h2c
kullanın.
İpucu: İşleyicilerin otomatik desteklediği protokollere dikkat edin.
İşleyiciler ayrıca, çevirici bir proxyye ihtiyaç duymadan doğrudan ikili gRPC-Web protokolünü otomatik olarak destekler. Modern tarayıcılar ikili yükleri desteklediğinden, Connect gRPC-Web'in metin modunu desteklememektedir: protoc-gen-grpc-web
kullanıyorsanız, kod oluştururken mode=grpcweb
kullanmanız gerekir.
Birçok gRPC'ye özel araç, çağırıcıların servisinizin Protobuf şemasına çalışma zamanında erişmesini sağlayan sunucu yansımasına bağımlıdır. Connect, connectrpc.com/grpcreflect
paketi ile sunucu yansımasını destekler. GRPC sunucu yansıma API'sinin iki versiyonu olduğunu ve birçok aracın (içinde grpcurl
de dahil) hala daha eski sürümü kullandığını unutmamalısınız; çoğu hizmet hem grpcreflect.NewHandlerV1
hem de grpcreflect.NewHandlerV1Alpha
'dan işleyicileri monte etmelidir.
Konteyner orkestrasyonu ve sağlık kontrol sistemleri genellikle gRPC sağlık kontrol API'sini destekler. Daha geleneksel HTTP kontrolleri yerine gRPC tarzı sağlık kontrolleri tercih ediyorsanız, connectrpc.com/grpchealth
kullanın.
İstemciler
İstemciler varsayılan olarak Connect protokolünü kullanır. gRPC veya gRPC-Web protokollerini kullanmak için, istemci inşası sırasında WithGRPC
veya WithGRPCWeb
seçeneklerini kullanın. Eğer gRPC sunucusu TLS kullanıyorsa, Connect istemcileri daha fazla yapılandırma olmadan çalışır. gRPC sunucusu HTTP/2 kullanıyorsa ancak TLS yoksa, HTTP istemcinizi dağıtım belgelerinde
açıklandığı gibi golang.org/x/net/http2
kullanarak yapılandırın.
Önemli Bilgi: TLS yapılandırmasına dikkat edin; bu istemci güvenliği için kritiktir.
Göç
Mevcut bir grpc-go
hizmetini connect-go
'ya geçirmek için kesin bir rehber yoktur; her kod tabanı farklı bir grpc-go
özellik alt kümesi kullanır ve biraz farklı bir yaklaşım gerektirir. Birçok RPC çerçevesinin göçlerinden farklı olarak, hizmetinizin istemcilerini değiştirmeniz gerekmediğini unutmayın: mevcut gRPC istemcilerini kullanmaya devam edebilirler. Mevcut Protobuf şemanız da değişiklik olmadan çalışacaktır.
Kod tabanınızın detayları benzersiz olacaktır, ancak çoğu göç birkaç ortak adım içerir:
protoc-gen-connect-go
ile kod üretmeye başlayın. Göç sırasında kodunuz,connect-go
vegrpc-go
kodunu sorunsuz bir şekilde içe aktarabilir.- Hizmet uygulamalarınızı,
connect.Request
ile sarılmış Protobuf mesajlarını kabul edecek şekilde değiştirin ve döndürdüğünüz yanıt mesajlarınıconnect.NewResponse
kullanarak sarın. Metadata okumak ve yazmak için bağlam tabanlı API'ler yerine,connect.Request
veconnect.Response
türlerini doğrudan kullanın. - Gerektiğinde, hizmet uygulamalarınızın Connect hatalarını döndürecek şekilde değiştirin. Connect ve gRPC aynı hata kodlarını kullandığından, genellikle
status.Error
ileconnect.NewError
'ı basit bir şekilde değiştirmeniz yeterlidir. - Herhangi bir akış işleyicisini Connect akış türlerini kullanacak şekilde göç edin. Bunlar,
grpc-go
eşdeğerleriyle geniş ölçüde benzerlik gösterir. - Hizmet uygulamalarınızı Connect'e göç ettirdikten sonra,
main
fonksiyonunuzugrpc-go
yerine birnet/http
sunucusu kullanacak şekilde değiştirin. Hizmetinizin istemcileri TLS kullanmıyorsa,h2c'yi
kullanmayı unutmayın. Bu noktada, yarı yolda kalmış olursunuz: hizmetiniz derlenmeli ve akıştaki hizmetlere çağrılarınızı göç ettirmeden dağıtabilirsiniz. - Sonra, aşağıya doğru olan çağrılarınızı ele alın. Connect’in oluşturduğu istemci türlerine geçin ve istek mesajlarını
connect.NewRequest
ile sarın. Bağlam tabanlı API'ler yerine, istek başlıklarını doğrudan isteğe ayarlayın. Çağrı seçeneklerini kullanmak yerine,connect.Response
'dan yanıt meta verilerini doğrudan okuyun. İstemcinizi oluştururkenWithGRPC
kullanmayı unutmayın ve gerekirseHTTP istemcilerinizi h2c kullanacak şekilde yapılandırın
. - Gerektiğinde,
status.Code
vestatus.FromError
'danconnect.CodeOf
ve standart kütüphaneninerrors.As
'ına geçin. - Herhangi bir akış çağrısını Connect akış türlerine göç edin.
- Tamamladınız! Hizmetiniz istemcileriyle aynı depoda değilse,
protoc-gen-go-grpc
ile kod üretmeyi bırakabilirsiniz.
Not: İleri düzey özellikler ve eğitimler için connect-conformance kaynaklarına göz atın.