【问题标题】:Google cloud run unable to connect MQTT谷歌云运行无法连接MQTT
【发布时间】:2023-01-26 02:53:06
【问题描述】:

目前我正在开发一个带有一些控制器和最小 MQTT 服务器的 .Net6 应用程序。到目前为止,我的本地机器上一切正常,但是,当部署到 Google Cloud Run (GCR) 时,我无法连接到 MQTT 服务器。

我注意到 GCR 容器希望您将传入流量映射到单个端口(在我的例子中是 8080),但是我在端口 1883(默认)上运行 MQTT 并且无法连接到它。在端口 8080 上运行的控制器可以访问并且工作正常。

我需要一些解决方案的方向,最好是在一个容器中。

程序.cs

var builder = WebApplication.CreateBuilder(args);

builder.WebHost.UseKestrel(o =>
{
    o.ListenAnyIP(1883, l => l.UseMqtt()); 
    o.ListenAnyIP(8080);
});

...

var app = builder.Build();

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints
        .MapConnectionHandler<MqttConnectionHandler>("/mqtt",
            httpConnectionDispatcherOptions =>
                httpConnectionDispatcherOptions.WebSockets.SubProtocolSelector = protocolList => protocolList.FirstOrDefault() ?? string.Empty);
});

app.UseMqttServer(server => server.StartAsync());
app.MapControllers();
app.Run();

【问题讨论】:

  • 您考虑过 MQTT over WebSockets 吗?这有效允许同一端口上的 http 和 MQTT 流量
  • @hardillb:似乎可以解决问题,谢谢。请作为答案发布,这样我就可以接受,其他人也可以使用它;)

标签: c# .net docker mqtt google-cloud-run


【解决方案1】:

一个可能的选择是不使用 2 个端口。

如果您在 WebSockets 上使用 MQTT,那么您的代理可以与 HTTP 服务器共享一个端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2020-03-18
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多