Trabalhamos com Filas em todas as nossas integrações.

Essas filas são segregadas de acordo com o tipo de processamento, no caso, sincronização de produtos (SyncProduct).

Nossas filas possuem um algoritmo para isolar volumes grandes de processamento, fazendo com que outros sellers não sejam impactados. Isso significa que se um Seller enviou mais que 50 itens pra ser processado ele ira ser isolado e processado com 2 consumidores¹.

No Magento cada variação é um produto, então devemos processar cada variação como se fosse um produto a parte.

O Magento não fornece todos os dados completos em apenas uma chamada ao WebService, por esse motivo é necessário fazer algumas chamadas para obter o cadastro completo do produto no Magento.

Já por parte do Anymarket existe o Rate Limit, que é a qtde de chamadas que são feitas por segundos ou minutos), e por padrão é definido 120 chamadas por minuto.

Além do Rate Limit temos o Time Connection, que é o tempo de conexão com o Magento, ou seja, o tempo que ficamos esperando uma resposta por parte do Magento quando fazemos uma chamada. Por default é definido 10 segundos, e se excedido esse tempo teremos um erro de TIMED_OUT.

Dado essas informações, temos um número estimados de itens na fila pro seller:

Qtdade de itens que o seller enviou + Qtde de Variações

(o tempo é baseado nesse número levando em consideração a quantidade de chamadas por minuto e o tempo de resposta).

Um exemplo básico seria:

• RateLimit: 10 chamadas por minuto

• Produto: Camiseta

• Variações; Vermelha e Amarela

Nesse cenário teremos 3 itens na fila pra esse Seller e cada item terá em média 4 chamadas, totalizando 12. Como só podemos fazer 10 chamadas por minuto esse produto demorará no mínimo 1 minuto.

Vamos supor que em cada chamada demore 10 segundos, então teremos no mínimo 120 segundos (distribuídos no intervalo do RateLimit).

Conclusão: Quanto mais variações tiver o produto, maior o tempo de processamento.

Sugestão para não encher a fila com itens "desnecessários": utilizar o import por categoria apenas para a primeira carga, pois o modulo possui uma função de Callback que faz com que qualquer alteração no produto seja disparado uma notificação para o Anymarket (lembrando que o próprio Magento não dispara essa chamada ao atualizar atributos em lote ou alterações via Banco de Dados).

¹Consumidores: Nome dado ao processo responsável por pegar um item da fila e processa-lo de forma completa.

OBS: O Rate Limit e o tempo de conexão estão diretamente ligados ao desempenho do servidor. Quanto mais o servidor "aguentar" de conexão mais chamadas serão feitas por segundo; e quando mais rápido o Magento processar a chamada e retornar, menor o tempo de conexão.


Autor: Jose Eduardo