J'utilise Service Broker dans mon environnement de développement depuis quelques mois maintenant et j'ai obtenu des performances parfaitement adéquates, autour de 1000 messages par seconde (largement suffisant pour mes besoins).
J'ai également travaillé sur une réplique réduite de mon environnement de production réel qui implique une instance de redirection, et pour la première fois aujourd'hui, j'ai poussé une certaine charge à travers elle avec des résultats terribles ! J'essaie de comprendre ce que j'ai vu, mais j'ai un peu de mal à le faire, alors j'ai pensé que je devais en parler pour voir si quelqu'un pouvait m'aider.
Tout d'abord, les messages son sont livrés du début à la fin par le transitaire. Cependant, lorsque j'ai poussé quelques milliers de messages, j'ai vu des lots de 20 à 100 messages envoyés, suivis de retards d'une minute ou deux. Les messages sont finalement traités avec succès.
Si l'on regarde la file d'attente sur le Store (l'expéditeur initial), des milliers de messages attendent d'être transférés et s'écoulent.
La configuration de la sécurité est la suivante :
Store database -> Certificate -> Forwarding instance -> Windows Security -> Central database
Lorsque j'active les profileurs, je vois beaucoup d'erreurs :
Quelques exemples sur l'instance de transfert :
7 - Send IO Error (10054(failed to retrieve text for this error. Reason: 15105))
Forwarded Message Dropped (The forwarded message has been dropped because a transport send error occurred when sending the message. Check previous events for the error.)
Et sur mon instance cible "centrale" :
A corrupted message has been received. The binary message preamble is malformed.
Broker message undeliverable This message was dropped because it could not be dispatched on time. State: 2
Quelqu'un peut-il m'aider en m'indiquant des vérifications que je pourrais faire, ou peut-être quelque chose d'évident que j'ai manqué. Je sais qu'il y a quelque chose qui ne va pas, mais je ne vois pas quoi.
Edit - 14/1/2011 - plus d'informations : Nous avons retiré notre instance de transfert de messages de l'équation et avons constaté des améliorations massives immédiatement - 2000 messages ont été délivrés en quelques secondes.
L'architecture utilise la sécurité du transport et nous essayons actuellement de passer à la sécurité du dialogue, car nous avons lu que la sécurité du transport/transfert peut nuire aux performances. Nous espérons que la sécurité de dialogue optimisera d'une manière ou d'une autre ce qui doit être décrypté par l'instance de transfert, améliorant ainsi les performances.
Lundi, je veux d'abord désactiver le cryptage sur la couche de transport (entre l'initiateur et le transporteur) pour voir si c'est là que se trouve le goulot d'étranglement. Est-il possible que cela entraîne une surcharge importante dans nos communications ou une instance de transfert ne devrait-elle pas produire un goulot d'étranglement aussi important ?