我有ManagedMqttClient来建立与Solace的连接。
public async Task Connect()
{
_mqttClient = new MqttFactory().CreateManagedMqttClient();
_mqttClientOptions = new MqttClientOptionsBuilder()
.WithClientId(_options.ClientId)
.WithTcpServer(_options.Host, _options.Port);
ManagedMqttClientOptions managedMqttClientOptions = new ManagedMqttClientOptionsBuilder()
.WithClientOptions(_mqttClientOptions)
.Build();
await _mqttClient.StartAsync(managedMqttClientOptions);
_mqttClient.ConnectedHandler = new MqttClientConnectedHandlerDelegate(e =>
_logger.LogDebug("MQTT connection is made; Result code: {ConnectResult}", e.ConnectResult.ResultCode));
_mqttClient.ConnectingFailedHandler = new ConnectingFailedHandlerDelegate(e =>
_logger.LogError("MQTT connection is failed; Exception: {Exception}", e.Exception.Demystify()));
_mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(e =>
_logger.LogDebug("MQTT connection is end; Reason: {Reason}", e.Reason));
_mqttClient.UseApplicationMessageReceivedHandler(MessageReceivedHandler);
}
它对服务的一个实例( MQTT客户端)非常有用。但是,当并行地启动另一个服务实例时,我将面临重新连接问题。它每秒钟对两个服务进行连接和断开。
是否有什么方法可以使用MQTTnet和缩放我的服务而没有这样的问题。提前谢谢你!
MQTTnet包:
<PackageReference Include="MQTTnet" Version="3.1.2" />
<PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="3.1.2" />
发布于 2022-09-23 02:05:05
这不是MQTTnet管理客户端的问题。深入了解MQTT我发现
如果尝试连接到与现有客户端同名的MQTT代理,则删除现有客户端连接。因为大多数MQTT客户端将尝试在断开之后重新连接,这可能导致断开连接和连接的循环。
因此,安慰放弃一个客户端,用另一个客户端替换它。它可以通过共享订阅功能来修复。在我的例子中,Solace支持它,MQTTnet也支持这样的特性。所有必要的方法就是在主题中使用$/group订阅和创建具有不同ids的客户端。有关更多信息,请查看MQTTnet负载平衡。
https://stackoverflow.com/questions/73816135
复制相似问题