GRPC CallError : InvalidFlags while publishing Google pub su



我有一个web应用程序,发布消息到某个用户活动的主题。每次我试图将消息发布到计算引擎实例中的主题时,我都会得到以下错误。

PublisherClient publisher = PublisherClient.CreateAsync(new TopicName(projectId, topicName)).Result;
var t = publisher.PublishAsync(serializer.Serialize(topicName.TopicId, message));
t.Wait();
|Result="Call error: InvalidFlags"|ExTyp=System.InvalidOperationException|ExMsg=Call error: InvalidFlags
|EX=System.InvalidOperationException: Call error: InvalidFlags
at Grpc.Core.Internal.CallErrorExtensions.CheckOk(CallError callError)
at Grpc.Core.Internal.CallSafeHandle.StartUnary(IUnaryResponseClientCallback callback, Byte[] payload, WriteFlags writeFlags, MetadataArraySafeHandle metadataArray, CallFlags callFlags)
at Grpc.Core.Internal.AsyncCall`2.UnaryCallAsync(TRequest msg)
at Grpc.Core.Calls.AsyncUnaryCall[TRequest,TResponse](CallInvocationDetails`2 call, TRequest req)
at Grpc.Core.DefaultCallInvoker.AsyncUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
at Grpc.Core.Interceptors.InterceptingCallInvoker.<AsyncUnaryCall>b__4_0[TRequest,TResponse](TRequest req, ClientInterceptorContext`2 ctx)
at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.AsyncUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext`2 context, AsyncUnaryCallContinuation`2 continuation)
at Grpc.Core.Interceptors.InterceptingCallInvoker.AsyncUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
at Google.Cloud.PubSub.V1.Publisher.PublisherClient.PublishAsync(PublishRequest request, CallOptions options)
at Google.Api.Gax.Grpc.ApiCall.GrpcCallAdapter`2.CallAsync(TRequest request, CallSettings callSettings)
at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass0_0`2.<<WithRetry>b__0>d.MoveNext()

计算引擎实例正在使用自定义服务帐户,并具有必要的IAM权限。

另一件要指出的事情是,我在同一个项目中的另一个GCP计算实例Jump服务器中重新创建了环境,通过使用Visual studio构建应用程序,使用相同的源代码进行远程调试。我可以在那里发表主题。该服务器具有相同的IAM权限。

自定义服务帐户具有"roles/pubsub.publisher"角色。

目标.net framework - 4.5.2

using Google.Cloud.PubSub.V1; v1.1.0

下面的链接指向谷歌广告客户端库中类似的问题,根据谷歌代表,这是一个库中的问题。https://groups.google.com/g/adwords-api/c/zSYZKy4J41o

我知道调用错误是枚举的一部分https://chromium.googlesource.com/external/github.com/grpc/grpc/+/chromium-deps/2016-07-19/src/csharp/Grpc.Core/Internal/CallError.cs,但我不知道为什么它在主GCE实例中失败。

如果这不起作用,我将不得不与API调用,但是有任何方法我可以得到这个客户端库工作吗?

我已经实现了SecretManagerStorageClient,但是这个问题让我措手不及。

如果我需要分享更多的信息,请告诉我。提前感谢您的帮助。

我最近不怎么使用c#,所以提前道歉。

使用。net Core 5.0(!?)和旧版本(v1.1.0)和当前(v2.6.0)版本的Cloud PubSub v1,为我工作:

using Google.Apis.Auth.OAuth2;
using Google.Cloud.PubSub.V1;
using System;
using System.Text;
using System.Threading.Tasks;
namespace app
{
class Program
{
static async Task<int> Main(string[] args)
{
string projectId=Environment.GetEnvironmentVariable("PROJECT");

string topicId="foo";
PublisherClient publisher = await PublisherClient.CreateAsync(
new TopicName(projectId, topicId));
var t = await publisher.PublishAsync(
Encoding.ASCII.GetBytes("Hello Freddie"));
return 0;
}
}
}

:

gcloud pubsub subscriptions pull foo-sub 
--project=${PROJECT} 
--format="value(message.data)"
Hello Freddie

也许你有两个虚拟机之间的依赖冲突?我在提供一致性的微软。net Core容器中运行了上面的代码。

app.csproj:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Cloud.PubSub.V1" Version="2.6.0" />
<PackageReference Include="Grpc.Core" Version="2.40.0-pre1" />
</ItemGroup>
</Project>

相关内容

  • 没有找到相关文章

最新更新