0

我是 MQTT 世界的新手,我正在尝试创建一个连接到 HiveMQ 云代理的 .Net 5.0 应用程序。

我创建了一个免费代理,并且可以使用 HiveMQ Websocket Client 连接到它。

这是我的主机的屏幕截图。

在此处输入图像描述

我已经为主机创建了 MQTT 凭据,并且能够通过示例客户端进行连接。这是该客户端的屏幕截图。

在此处输入图像描述

这行得通,我可以发布和订阅消息队列。

但是,现在我正在尝试将其翻译为 c#,但我无法连接。我从这个示例项目开始:https ://github.com/rafiulgits/mqtt-client-dotnet-core

然后从我的集群实例中插入值,但我在启动时遇到连接超时。

这是我的服务配置的样子:

public static IServiceCollection AddMqttClientHostedService(this IServiceCollection services)
{
    services.AddMqttClientServiceWithConfig(aspOptionBuilder =>
    {
        //var clientSettinigs = AppSettingsProvider.ClientSettings;
        //var brokerHostSettings = AppSettingsProvider.BrokerHostSettings;

        aspOptionBuilder
        .WithCredentials("Test1", "xxxxx") //clientSettinigs.UserName, clientSettinigs.Password)
        .WithClientId("clientId-jqE8uIw6Pp") //clientSettinigs.Id)
        .WithTcpServer("xxxxxxxxxxxxxx.s2.eu.hivemq.cloud", 8884); //brokerHostSettings.Host, brokerHostSettings.Port);
    });
    return services;
}

private static IServiceCollection AddMqttClientServiceWithConfig(this IServiceCollection services, Action<AspCoreMqttClientOptionBuilder> configure)
{
    services.AddSingleton<IMqttClientOptions>(serviceProvider =>
    {
        var optionBuilder = new AspCoreMqttClientOptionBuilder(serviceProvider);
        configure(optionBuilder);
        return optionBuilder.Build();
    });
    services.AddSingleton<MqttClientService>();
    services.AddSingleton<IHostedService>(serviceProvider =>
    {
        return serviceProvider.GetService<MqttClientService>();
    });
    services.AddSingleton<MqttClientServiceProvider>(serviceProvider =>
    {
        var mqttClientService = serviceProvider.GetService<MqttClientService>();
        var mqttClientServiceProvider = new MqttClientServiceProvider(mqttClientService);
        return mqttClientServiceProvider;
    });
    return services;
}

我不确定我哪里出错了,任何帮助将不胜感激。

4

1 回答 1

2

当我怀疑您确实应该使用普通的 TLS 端点(端口 8883)时,您似乎正在尝试连接到代码中的 WebSocket 端点(端口 8884)

此外,如果您想让两个客户端同时连接,您将需要使用不同的 clientid 值,因为匹配意味着客户端将不断地相互踢出代理。

(编辑:仔细观察,客户端ID实际上是不同的,但仅在最后一个字符中)

于 2021-12-16T17:46:55.667 回答