目前我正在开发一个带有一些控制器和最小MQTT服务器的IdeNet6应用程序。到目前为止,我在本地计算机上一切正常,但是,当部署到Google Cloud Run(GCR)时,我无法连接到MQTT服务器。
我注意到GCR容器希望您将传入流量Map到单个端口(在我的例子中是8080),但是我在端口1883(默认)上运行MQTT,无法连接到它。
我需要一个解决方案的方向,最好是在一个单一的容器。
程序.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();
1条答案
按热度按时间yhqotfr81#
一个可能的选项是不使用2个端口。
如果您在WebSockets上使用MQTT,那么您的代理可以与HTTP服务器共享一个端口。