public async Task TestUriConnectionWithAuthAsync() { var resolver = new MqttConnectionResolver(); resolver.Configure(ConfigParams.FromTuples( "connection.uri", "tcp://*****:*****@server1:1883,server2:1883,server3:1883?param1=ABC" )); var connection = await resolver.ResolveAsync(null); Assert.Equal("server1:1883,server2:1883,server3:1883", connection.GetAsString("servers")); Assert.Equal("test", connection.GetAsString("username")); Assert.Equal("pass123", connection.GetAsString("password")); }
public async Task TestSingleConnectionAsync() { var resolver = new MqttConnectionResolver(); resolver.Configure(ConfigParams.FromTuples( "connection.protocol", "tcp", "connection.host", "localhost", "connection.port", 1883 )); var connection = await resolver.ResolveAsync(null); Assert.Equal("localhost:1883", connection.GetAsString("servers")); Assert.Null(connection.GetAsString("username")); Assert.Null(connection.GetAsString("password")); }
public async Task TestClusterConnectionAsync() { var resolver = new MqttConnectionResolver(); resolver.Configure(ConfigParams.FromTuples( "connections.0.protocol", "tcp", "connections.0.host", "server1", "connections.0.port", 1883, "connections.1.protocol", "tcp", "connections.1.host", "server2", "connections.1.port", 1883, "connections.2.protocol", "tcp", "connections.2.host", "server3", "connections.2.port", 1883 )); var connection = await resolver.ResolveAsync(null); Assert.Equal("server1:1883,server2:1883,server3:1883", connection.GetAsString("servers")); Assert.Null(connection.GetAsString("username")); Assert.Null(connection.GetAsString("password")); }
/// <summary> /// Opens the component. /// </summary> /// <param name="correlationId">(optional) transaction id to trace execution through call chain.</param> public async Task OpenAsync(string correlationId) { var options = await _connectionResolver.ResolveAsync(correlationId); var opts = new MqttClientOptionsBuilder() .WithClientId(_clientId); if (_keepAliveTimeout > 0) { opts.WithKeepAlivePeriod(TimeSpan.FromMilliseconds(_keepAliveTimeout)); } else { opts.WithNoKeepAlive(); } var uri = options.GetAsString("servers") ?? ""; var servers = uri.Split(','); foreach (var server in servers) { var host = server; var port = 1883; var pos = server.IndexOf(":"); if (pos > 0) { host = server.Substring(0, pos); Int32.TryParse(server.Substring(pos + 1), out port); } opts.WithTcpServer(host, port); } var username = options.GetAsString("username"); if (!string.IsNullOrEmpty(username)) { var password = options.GetAsString("password"); opts.WithCredentials(username, password); } //opts.SetAutoReconnect(c.retryConnect) //opts.SetConnectTimeout(time.Millisecond * time.Duration(c.connectTimeout)) //opts.SetConnectRetryInterval(time.Millisecond * time.Duration(c.reconnectTimeout)) var client = new MqttFactory().CreateMqttClient(); client.UseDisconnectedHandler(DisconnectedHandlerAsync); client.UseApplicationMessageReceivedHandler(MessageReceiveHandlerAsync); try { await client.ConnectAsync(opts.Build()); } catch (Exception ex) { _logger.Error(correlationId, ex, "Failed to connect to MQTT broker at " + uri); throw ex; } _connection = client; _clientOptions = opts.Build(); _logger.Debug(correlationId, "Connected to MQTT broker at " + uri); }