Poison Queues e a ordem de entrega

Já falei neste post e neste artigo os benefícios da utilização das poison queues. Mas utilizá-la nem sempre uma boa alternativa. Quando habilitada, mensagens que repetidamente falham (independentemente do problema ocorrido) durante o seu processamento, são movidas para esse tipo de fila, permitindo assim que as mensagens subsequentes sejam processadas.

Essa alternativa somente é válida quando voce não precisa garantir o processamento ordenado da fila, ou seja, uma vez que a mensagem é movida para a poison queue a próxima mensagem é processada, e com isso perdemos a característica principal de uma fila, que é o processamento baseado no padrão FIFO (First-In, First-Out).

Quando a ordem de processamento das mensagens for importante, não podemos habilitar a poison queue. Neste caso, quando um problema acontece, será necessária a intervenção de alguma pessoa (técnico) que consiga resolver o problema e dar continuidade no processamento sequencial da fila. Quando o problema se tratar de algo relacionado à infraestrutura, como acesso à banco de dados, permissões, etc., basta resolve-los e seguir em frente; já quando o problema é alguma falha no conteúdo da mensagem, então compete ao usuário que está analisando-a decidir excluí-la ou não.

Cookies em serviços HTTP

Bindings baseados em HTTP, como por exemplo BasicHttpBinding ou WSHttpBinding, possuem uma propriedade booleana chamada AllowCookies. O nome desta propriedade pode parecer confuso, pois a finalidade dela não é permitir que o binding utilize ou não cookies, mas sim determinar quem deverá manipulá-los.

Quando esta propriedade estiver definida como True, o próprio runtime do WCF irá gerenciar os cookies. Isso quer dizer que ele criará uma instancia da classe CookieContainer e a associará ao serviço, utilizando-a para todas as requisições, ou seja, todo e qualquer cookie retornardo pelo serviço será automaticamente reenviado nas futuras requisições, sem a necessidade de controlar como isso é realizado.

Já quando a propriedade AllowCookies for definida como False (que é o padrão), o WCF não irá gerenciar os cookies. Isso quer dizer que entre as chamadas das operações do lado do cliente, será necessário que voce recupere os possíveis cookies retornados pelo serviço e os adicione novamente para efetuar uma posterior requisição. Como podemos perceber, ao contrário da opção anterior, devemos controlar totalmente a captura, manipulação e o envio para o serviço. Voce deve ter uma atenção especial aqui, já que uma das características do WCF é ser independente de protocolo e, se dentro da implementação do serviço voce tentar manipular essas informações (exclusivas do HTTP), voce começará a ter uma afinidade com tal protocolo.