Sua solicitação de recurso está relacionada a um problema?
Não vi se offline publishing
estava habilitado por padrão.
Descreva a solução que você gostaria
Como em python sdk v1, seria bom ver algo como o método configureOfflinePublishQueueing
.
Descreva as alternativas que você considerou
Eu teria uma Fila própria para manter se a mensagem fosse publicada ou não.
Contexto adicional
https://github.com/aws/aws-iot-device-sdk-python/blob/master/samples/basicPubSub/basicPubSub.py#L101
O comportamento atual é:
Entendemos que isso é inconsistente. O usuário provavelmente deseja:
1) as mensagens são sempre enfileiradas até que possam ser enviadas
2) as mensagens falham se o cliente está offline ou fica offline antes de serem enviadas.
Estamos avaliando muito ativamente a mudança disso. Vou manter esse problema aberto e vamos atualizar quando fizermos alterações (ou formalizarmos o comportamento atual)
Se você deseja assumir o controle total de seu destino agora, você pode construir uma fila própria que envia 1 mensagem de cada vez para o cliente. Se for bem-sucedido, envie o próximo. Se falhar, tente novamente. Isso também lhe dá a oportunidade de ter controle total sobre o tempo que uma mensagem pode ficar na fila, o número de mensagens que ficarão na fila, etc.
Se você deseja assumir o controle total de seu destino agora, você pode construir uma fila própria que envia 1 mensagem de cada vez para o cliente. Se for bem-sucedido, envie o próximo. Se falhar, tente novamente. Isso também lhe dá a oportunidade de ter controle total sobre o tempo que uma mensagem pode ficar na fila, o número de mensagens que ficarão na fila, etc.
Olá @graebm. Como você faria isso? Se meu dispositivo publica mensagens, mas está offline, eu acho que essas mensagens ficam em algum tipo de fila? Existe uma maneira de acessar essa fila e eliminar certas mensagens dela se ainda não foram publicadas?
Obrigada
@samvandamme você pode definir a qualidade do serviço (qos) para no máximo uma vez (0).
qos=mqtt.QoS.AT_MOST_ONCE
No mesmo dispositivo, assine o tópico no qual você está publicando. Em seguida, para garantir que as mensagens sejam enviadas, você mantém uma lista das mensagens que publicou. Remova-os apenas quando tiver recebido de volta a mensagem sobre o assunto.
O comportamento atual é:
- Todas as mensagens publicadas são enfileiradas antes do envio, independentemente de o cliente estar offline ou online.
- Quando o cliente fica online (ou se já estiver online), as mensagens da fila são enviadas em ordem.
- NO ENTANTO: Se o cliente ESTAVA online, e fica offline, naquele momento ele cancela cada PUBLICAR e ASSINAR em sua fila.
Entendemos que isso é inconsistente. O usuário provavelmente deseja:
- as mensagens estão sempre na fila até que possam ser enviadas
- as mensagens falham se o cliente estiver offline ou fica offline antes de serem enviadas.
Estamos avaliando muito ativamente a mudança disso. Vou manter esse problema aberto e vamos atualizar quando fizermos alterações (ou formalizarmos o comportamento atual)
Se você deseja assumir o controle total de seu destino agora, você pode construir uma fila própria que envia 1 mensagem de cada vez para o cliente. Se for bem-sucedido, envie o próximo. Se falhar, tente novamente. Isso também lhe dá a oportunidade de ter controle total sobre o tempo que uma mensagem pode ficar na fila, o número de mensagens que ficarão na fila, etc.
Então, qual é a abordagem recomendada para lidar com dispositivos que ficam offline por alguns períodos de tempo?
Supondo que eu tenha um dispositivo enviando mensagens a cada 5 segundos, o dispositivo está online, as mensagens estão alcançando o AWS IoT Core. Em seguida, o dispositivo perdeu a conexão por 10 minutos e, em seguida, fica online novamente. O que acontece com todas as mensagens que foram tentadas publicar durante o período off-line de 10 minutos? Eles são publicados assim que o dispositivo fica online novamente ou são perdidos para sempre?
As primeiras mensagens serão perdidas enquanto o SDK não percebeu que não está mais desconectado. Todas as mensagens subsequentes serão salvas na fila e enviadas quando a conexão for restaurada.
Ao testar isso, perdi as 5 primeiras mensagens ao usar o pubsub, que envia mensagens a cada segundo. Assim, você perderia apenas uma mensagem na maioria das vezes.
Eu também gostaria de entender isso com mais detalhes. Conforme mencionado acima, as mensagens publicadas off-line vão para a fila e são publicadas quando a conexão fica on-line novamente.
Quantas mensagens são armazenadas na fila offline? O SDK anterior permitia que você escolhesse infinito, nenhum ou um valor especificado. Não consigo encontrar nenhuma documentação sobre isso. Parece infinito, mas gostaria de saber. O SDK anterior também permitia que você caísse da parte superior ou inferior da fila. Isso é possível agora?
O SDK anterior também permitia que você escolhesse uma taxa de drenagem para mensagens armazenadas na fila. Isso é configurável agora? Se não, qual é o valor?
Comentários muito úteis
Eu também gostaria de entender isso com mais detalhes. Conforme mencionado acima, as mensagens publicadas off-line vão para a fila e são publicadas quando a conexão fica on-line novamente.
Quantas mensagens são armazenadas na fila offline? O SDK anterior permitia que você escolhesse infinito, nenhum ou um valor especificado. Não consigo encontrar nenhuma documentação sobre isso. Parece infinito, mas gostaria de saber. O SDK anterior também permitia que você caísse da parte superior ou inferior da fila. Isso é possível agora?
O SDK anterior também permitia que você escolhesse uma taxa de drenagem para mensagens armazenadas na fila. Isso é configurável agora? Se não, qual é o valor?