sql >> Database teknologi >  >> RDS >> Sqlserver

Kø i OneWay WCF-meddelelser ved hjælp af Windows Service og SQL Server

Jeg er en DBA, så det giver smag for mit svar, men her er, hvad jeg ville gøre:

  1. Hvis du bruger SQL 2005+, skal du bruge Service Broker til at gemme meddelelserne i databasen i stedet for at gemme dem i en tabel. Du får en kødannelsesmekanisme med dette, så du kan slippe af med MSMQ. Du har også en tabel, men den gemmer bare samtalehåndtaget (i det væsentlige en pegepind til beskeden) sammen med hvor mange gange den har forsøgt denne besked. Til sidst vil du have en slags "død brevkasse", hvor meddelelser, der når din genforsøgsgrænse, går.
  2. Gør følgende i din meddelelsesbehandlingskode:
    • Begynd en transaktion
    • Modtag en besked uden for køen
    • Hvis antallet af genforsøg er større end tærsklen, skal du flytte det til den døde brevkasse og begå
    • Forøg tælleren på bordet for denne besked
    • Behandle beskeden
    • Hvis behandlingen lykkedes, skal du forpligte transaktionen
    • Hvis behandlingen mislykkedes, skal du sætte en ny besked i køen med det samme indhold og derefter forpligte transaktionen

Bemærk, at der ikke er planlagte tilbagerulninger. Tilbageføringer i Service Broker kan være dårlige; hvis du ruller tilbage 5 gange uden en vellykket modtagelse, vil køen blive deaktiveret for både kø og udkø. Men du vil stadig have transaktioner til sagen, når din meddelelsesprocessor dør midt i behandlingen (dvs. serveren går ned).



  1. En guide til implementering af TimescaleDB med Docker

  2. Distribueret transaktion på linket server mellem sql server og mysql

  3. ENUM (Enumeration) Datatype i MySQL:Top 12 fakta og nyttige tips

  4. Er der en måde at indlæse tekstdata til databasen i PostgreSQL?