Dapr 应用程序通道未初始化,如果需要 pubsub 订阅,请确保指定 -app-port

Posted

技术标签:

【中文标题】Dapr 应用程序通道未初始化,如果需要 pubsub 订阅,请确保指定 -app-port【英文标题】:Dapr app channel not initialized, make sure -app-port is specified if pubsub subscription is required 【发布时间】:2022-01-15 02:37:47 【问题描述】:

我正在尝试使用 Dapr 在 C# 控制台应用程序中实现订阅者,但它给出了以下错误。

错误:

应用程序通道未初始化,请确保指定 -app-port 如果 需要订阅 pubsub

成功退出应用

收到终止信号:成功关闭 Exited Dapr

代码:

public static void Main(string[] args)

    DaprClient _dapr = new DaprClientBuilder().Build();
    _dapr.PublishEventAsync("pubSubName", "topicName", "data");

【问题讨论】:

【参考方案1】:

我可以通过将控制台应用程序转换为 windows (worker) 服务来解决这个问题。

public static void Main(string[] args)

    CreateHostBuilder(args).Build().Run();


public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>

    services.AddHostedService<MyService>();
)
.ConfigureWebHostDefaults((builder) =>

    builder.UseStartup<Startup>();
);

public  class Startup

    public void ConfigureServices(IServiceCollection services)
    
        services.AddDaprClient();
    
    public void Configure()
    
    


public class MyService: BackgroundService

    private readonly DaprClient _dapr;

    public PaymentService(DaprClient dapr)
    
        _dapr = dapr;
    
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    
        while (!stoppingToken.IsCancellationRequested)
        
            await _dapr.PublishEventAsync();
            await Task.Delay(1000, stoppingToken);
        
    

【讨论】:

以上是关于Dapr 应用程序通道未初始化,如果需要 pubsub 订阅,请确保指定 -app-port的主要内容,如果未能解决你的问题,请参考以下文章

分布式应用运行时Dapr

Dapr + .NET 实战(十-终篇)K8S运行Dapr

云原生开发框架dapr环境搭建:CLI安装和初始化

Dapr PubSub 与 dotnet SDK

云原生开发框架dapr环境搭建:CLI安装和初始化

未初始化的通道如何表现?