sql >> Database >  >> RDS >> Sqlserver

In wachtrij plaatsen in OneWay WCF-berichten met Windows Service en SQL Server

Ik ben een DBA, dus dat geeft smaak aan mijn reactie, maar dit is wat ik zou doen:

  1. Als je SQL 2005+ gebruikt, gebruik dan Service Broker om de berichten in de database op te slaan in plaats van ze in een tabel op te slaan. Je krijgt hiermee een wachtrijmechanisme, zodat je van MSMQ af kunt komen. Je hebt ook een tabel, maar deze slaat alleen het gesprekshandvat op (in wezen een verwijzing naar het bericht), samen met hoe vaak het dit bericht heeft geprobeerd. Ten slotte wil je een soort 'dode brievenbus' waar berichten die je drempel voor opnieuw proberen bereiken, naartoe gaan.
  2. Doe het volgende in uw berichtverwerkingscode:
    • Een transactie starten
    • Ontvang een bericht buiten de wachtrij
    • Als het aantal nieuwe pogingen groter is dan de drempel, verplaats het dan naar de dode letter en bevestig
    • Verhoog de teller op de tafel voor dit bericht
    • Verwerk het bericht
    • Als de verwerking is gelukt, voert u de transactie door
    • Als de verwerking is mislukt, plaatst u een nieuw bericht in de wachtrij met dezelfde inhoud en voert u de transactie uit

Merk op dat er geen geplande rollbacks zijn. Rollbacks in Service Broker kunnen slecht zijn; als u 5 keer terugdraait zonder een succesvolle ontvangst, wordt de wachtrij uitgeschakeld voor zowel in de wachtrij plaatsen als uit de wachtrij halen. Maar u wilt nog steeds transacties hebben voor het geval uw berichtverwerker tijdens de verwerking doodgaat (d.w.z. de server crasht).



  1. java.lang.UnfilledLinkError:geen ocijdbc11 in java. bibliotheek.pad

  2. Word lid van 3 tabellen in SQL

  3. De wizard Offline reorg gebruiken

  4. Afbeeldingen toewijzen aan structuurweergaveknooppunten