In de rij staan ​​en geïsoleerde opslag

Ik heb een kleine applicatie die enkele verzoeken in de wachtrij plaatst en ze van de stapel haalt.

De toepassing op de server die de wachtrij onderhoudt, kan echter op elk moment mislukken en ik moet de wachtrij opnieuw kunnen opbouwen wanneer de toepassing opnieuw opstart. Dit kan niet in een database worden verwerkt omdat de database leest en schrijft in deze omgeving traag is, vandaar de wachtrij om de gebruiker op zijn minst de perceptie van snelheid te geven.

Weet iemand van een bibliotheek die me in staat stelt om de wachtrij op te slaan in geïsoleerde opslag. Het zou de wachtrij op elk gewenst moment moeten kunnen onderhouden tijdens inqueue en dequeue opperations.

Het enige wat ik tot nu toe heb geprobeerd, is om de wachtrij-items te serialiseren terwijl ze in de wachtrij worden geplaatst, maar zit nu vast aan de richting van de nadering, daarom hoopte ik dat er een bibliotheek zou kunnen zijn.

bewerken

Is het antwoord om de gehele wachtrij eenvoudig te reserialiseren telkens wanneer er een wachtrij en wachtrij is?

En hoe zou ik " peek " in de hele wachtrij zien om alle items op de eerste plaats te krijgen?

1
@JohnSaunders, ja, eerlijk genoeg. Bedankt voor de bewerking
toegevoegd de auteur griegs, de bron
Voeg uw titels niet toe met "C #". Het maakt de titel gewoon lelijk, en de tags dekken dat al.
toegevoegd de auteur John Saunders, de bron

1 antwoord

Mijn eerste advies zou zijn om ActiveMQ of < a href = "http://www.firatatagun.com/rabbitmq/2011/11/24/" rel = "nofollow"> RabbitMQ , beide gebruiken persistentie, met failover, ze zijn heel gemakkelijk op te halen . ActiveMQ heeft een eigen database en u kunt uw eigen database invoegen.

Als u de database niet wilt gebruiken, blijft ActiveMQ de gegevens behouden bij tijdelijke bestanden en biedt u betrouwbaarheid.

Als u deze producten niet wilt gebruiken, kunt u een ConcurrentQueue gebruiken en wanneer je in de wachtrij plaatst, schrijf dat asynchroon naar een geïsoleerde opslag, dan zul je het moeten behouden wanneer je uit de wachtrij gaat. Je zou ook een apart app-domein voor dit onderdeel kunnen overwegen, dus als je hoofdapp offline gaat, kun je nog steeds je wachtrij laten lopen.

Ik geloof dat je meer gevallen zult hebben om dit te behandelen, is gewoon intuïtief.

Bewerk:

Het serialiseren van de volledige wachtrij vertraagt ​​veel, omdat serialisatie duur is.
Peek wordt geïmplementeerd als een kenmerk van elke wachtrij.

1
toegevoegd
Ja, Peek kijkt alleen naar het laatste item. als je ze allemaal wilt bekijken, moet je ze allemaal pakken, op een stapel leggen en vervolgens in de wachtrij opslaan.
toegevoegd de auteur DarthVader, de bron
ActiveMQ is ook een zeer goed product. Ik heb het gebruikt en gelukkig geweest. Ik zou MSMQ niet aanbevelen als uw consument niet zo snel zal zijn als producenten.
toegevoegd de auteur DarthVader, de bron
Ja maar "peek" kijkt alleen naar het laatste item in de wachtrij, wat een schande is. Wat betreft de twee producten die u noemde, ik denk dat RabbitMQ eruit ziet als een waarschijnlijke kandidaat. Zal onderzoeken. +1 voor dat bedankt.
toegevoegd de auteur griegs, de bron
ja maar ActiveMQ is koopkleding en deze mensen zijn, um, strak!
toegevoegd de auteur griegs, de bron
Hmm ... ActiveMQ is open source software ... activemq.apache.org . Het is gebaseerd op Java, maar ik heb het met groot succes gebruikt van .NET.
toegevoegd de auteur NateTheGreat, de bron
Wanneer u geen wachtrij in het geheugen wilt en u geen extra producten wilt installeren en u zich op een Windows-platform bevindt, gebruikt u een transactie MSMQ . Dit is een standaardonderdeel voor Windows.
toegevoegd de auteur Ruzzie, de bron