【问题标题】:How to run multiple asp.net core MQTT broker on one windows server?如何在一台 Windows 服务器上运行多个 asp.net core MQTT 代理?
【发布时间】:2019-02-28 16:57:42
【问题描述】:

我通过 asp.net core 2.2 实现了一个 MQTT 代理,并希望在 Windows 服务器 2016 上运行它。我正在使用 MQTTnet 版本 2.8.5 来实现这个代理。这是我的启动代码:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<MyMqttServer>();
            services.AddMvc();

            var mqttServerOptions = new MqttServerOptionsBuilder()
                .WithDefaultEndpointPort(1886)
                .Build();
            services
                .AddHostedMqttServer(mqttServerOptions)
                .AddMqttConnectionHandler()
                .AddConnections()
                .AddMqttTcpServerAdapter();
        }

        public void Configure(IApplicationBuilder app, MyMqttServer myMqttServer)
        {
            app.UseDefaultFiles();
            app.UseStaticFiles();

            app.UseMqttServer(server =>
            {
                server.Started += async (sender, args) => await myMqttServer.RunAsync();
            });
         }

这是我在 Program.cs 中的代码

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseKestrel(o =>
            {
                o.ListenAnyIP(1885, l => l.UseMqtt()); // mqtt pipeline
                o.ListenAnyIP(5000); // default http pipeline
            })
                .UseStartup<Startup>()
                .Build();

我有两个不同的 MQTT 代理应用程序,这些应用程序具有 MQTT 的这些设置(另一个在启动时设置在端口 1883 和 1884 上)但具有不同的端口。问题是这些 MQTT 代理(在 1883,1884 上工作的代理)中只有一个同时工作,而另一个不工作。我该如何解决?

【问题讨论】:

  • 编辑问题以包含第二个代理无法启动时收到的错误消息吗?
  • 不,很遗憾我没有收到任何错误。请求未进入应用程序。

标签: c# asp.net-core mqtt asp.net-core-2.1


【解决方案1】:

感谢 MQTTNET 团队的 JanEggers,他帮助我解决了这个问题。问题是我有一个 myMqttServer 类,它覆盖了启动和主类中的设置。所以我需要删除这些设置并在 myMqttServer 类中进行。您可以在此 github 链接中查看详细信息。

https://github.com/chkr1011/MQTTnet/issues/566

【讨论】:

  • @kamranamingalvani 您好,您在哪一部分有问题?我将它作为服务器上的单独应用程序运行。你到底想做什么,你能分享一些代码吗?
  • 感谢您的回复。真的我不知道如何实现 MQTT 服务器,我有 3 个设备,我们想管理来自 mqtt 的消息。请分享我如何实现设备的用户密码和身份验证以及如何将 MQTT 消息保存到 SqlDatabase。非常感谢
  • @kamranamingalvani 首先,您需要实现 MQTT Broker,这是获取消息并将其通告给其他客户端的服务器。您可以使用此链接使用 C# (github.com/chkr1011/MQTTnet/wiki/Server) 实现您的代理
  • 你也可以使用一些客户端比如 mqttBox 来测试它。在此链接 (github.com/chkr1011/MQTTnet/wiki/Server#validating-mqtt-clients) 中,它显示了如何验证您的客户。
  • @kamranamingalvani 是的,在大多数情况下,您需要在客户端保留用户名和密码以进行身份​​验证。
猜你喜欢
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 2016-04-14
  • 2022-09-16
  • 2012-03-22
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多