Aws-iot-device-sdk-python-v2: configurar publicação offline na v2

Criado em 31 jul. 2020  ·  6Comentários  ·  Fonte: aws/aws-iot-device-sdk-python-v2

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

feature-request

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?

Todos 6 comentários

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:
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:

  1. as mensagens estão sempre na fila até que possam ser enviadas
  2. 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?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

satay99 picture satay99  ·  6Comentários

GauravPatni picture GauravPatni  ·  4Comentários

victorct-pronto picture victorct-pronto  ·  3Comentários

mkozjak picture mkozjak  ·  17Comentários

banuprathap picture banuprathap  ·  10Comentários