2009-02-05 8 views
18

Esiste un prodotto (idealmente open source, ma non necessario), che consentirebbe una distribuzione a dipendenza zero? Ogni bus di servizio o libreria di code che sono stato in grado di trovare ha una dipendenza da una delle app della coda (come msmq) o da un database. Vorrei una soluzione molto leggera che possa solo aggiungere un riferimento alla mia applicazione, crearla e distribuirla con la minore configurazione possibile.C# Queue or ServiceBus senza dipendenze?

In un mondo ideale, il bus di coda/servizio sarebbe eseguito su IIS, e permettere web e ricchi clienti per comunicare con esso.

Tale strumento sarebbe l'ideale per la prototipazione rapida di grandi sistemi distribuiti su una macchina di sviluppo locale.

risposta

16

Rhino code da Ayende è esattamente quello che stai cercando, questo è il post sul blog di introdurlo:

http://ayende.com/Blog/archive/2008/08/01/Rhino-Queues.aspx

penso che tutti i limiti menzionati in questo post sono stati corretti da allora.

Dal post del blog, che cosa rinoceronte code è:

  • XCopyable, Zero Administration, embedded, servizio di accodamento asincrono
  • robusta di fronte alla rete
  • interruzioni System.Transactions supporto
  • Veloce
  • Funziona su HTTP
+0

Così non va bene ... se il riavvio del server, gli elementi della coda in memoria sono andati tutti – user1034912

+1

@ user1034912 - questo non è il caso; il messaggio è persistente in un database locale esent. Penso che questo non era ancora il momento in cui il post del blog è stato scritto. – Marijn

1

abbiamo spostato i nostri progetti da MSMQ a ActiveMQ. è davvero meglio :)
ActiveMQ è open source coda, basata sul server Web Apache.
L'abbiamo utilizzato nella produzione di alta frequenza del flusso di lavoro dei dati, in cui MSMQ hanno un sacco di problemi (lavoriamo con MSMQ un anno)
L'implementazione csharp è nms

2

Se sei felice di essere:

  1. di Windows specifica
  2. limitata al dominio locale
  3. seriamente limitato nella dimensione del messaggio supportati
  4. Wrap Win32 sottostante chiamate in P/Invoke
  5. Deal con il polling da soli
  6. Deal con gli hack necessari per consentire avanti e indietro la comunicazione
  7. Deal con la configurazione condivisa necessario per mantenere i nomi in sincronia

Poi un involucro veloce intorno alle finestre MailSlot API potrebbe essere sufficiente.

Questo simple example è una base ragionevole per iniziare.

This article ha alcune informazioni aggiuntive ma si presuppone che il caso d'uso sia tramite un controllo (piuttosto che un componente come dovrebbe essere) nonché una scarsa integrazione di WinForms, quindi dovrebbe essere considerato per la lettura accidentale piuttosto che una base per qualsiasi libreria.

This article è C++ ma è di uno standard più elevato (e un commentatore l'ha esteso per supportare il batch di messaggi più grandi in molti più piccoli).

Si ottiene 424 byte (quindi con .Net 212 caratteri) si consiglia di scendere a ASCII per raddoppiare la lunghezza del messaggio utile se si sta parlando di testo.

notare che, nonostante la sua semplicità, limiti e mancanza di caratteristiche che fa fornire la consegna multicast, qualcosa spesso complessi per strato su un punto a punto te stesso protocollo.

2

Questo ayende post fornisce e un confronto interessante di tre bus di servizio. Utilizziamo NServiceBus e pensiamo che se non è chiaro che Udi Dahan risponda al modo in cui inseriresti la coda non dipendente.

Lavoriamo con MSMQ felicemente ma ci sono altre opzioni e in teoria dovrebbe essere aperto praticamente a qualsiasi cosa, dato che potresti perdere un po 'di affidabilità e durata a seconda della tua scelta.

2

Perché non Amazon's servizio messaggi Servizio coda semplice?

+2

che aggiunge sicuramente considerazioni di latenza di rete significativa – mwjackson

5

In modo simile al suggerimento di ShuggyCoUk, è possibile installare una coda (o code) utilizzando il database ESENT incorporato di Windows (già installato con Windows). Esiste una libreria di accesso al codice gestito (open source): http://www.codeplex.com/ManagedEsent. Se continui a scrivere/leggere CLOB o BLOB, dovrebbe funzionare bene. Se si desidera essere davvero intelligenti, è possibile utilizzare NServiceBus e scrivere (contribuire?) Archiviazione e trasporto di sottoscrizioni con funzionalità ESENT. Ci sono alcune incursioni nell'uso di ESENT allo Ayende's blog (dovrai cercare nel suo repository SVN i bit succosi).

1

Attualmente sto lavorando su un bus di servizio basato su WCF open source. Puoi trovarlo qui: http://rockbus.codeplex.com/. Supporta sottoscrizioni dinamiche (@ run-time), repository di subcription (database), trasporti a innesto, routing basato sul contenuto basato su XPath, consegna transazionale su protocolli wcf, consegna roundrobin, valutazione di sottoscrizioni a innesto e altro. Dare un'occhiata!

0

Hai mai pensato di utilizzare un servizio come IronMQ per http://Iron.io?

Non avresti alcuna dipendenza, potresti rapidamente creare prototipi di app senza configurare alcuna infrastruttura di coda, ed è altamente disponibile e veloce.

Attualmente non esiste una versione installabile localmente ma è basata sul protocollo OpenStack imminente, quindi non ci sarà.

Btw lavoro per ferro.

+0

Ciao, Ciad; Grazie per la risposta! Vorrei sottolineare che tutti i tuoi post recenti sono stati annunci pubblicitari per i prodotti della tua azienda. Va bene avere un post occasionale che menzioni i tuoi prodotti, ma sembra che l'unica ragione per cui sei qui sia per la promozione. Ciò può far sì che i tuoi messaggi vengano contrassegnati come spam o persino il tuo account venga eliminato, insieme ai post. Ti preghiamo di rispondere alle domande sulla codifica per aiutare altri programmatori e non tanto sulla promozione dei prodotti della tua azienda. –

+0

Certo Andrew, grazie per il suggerimento. Sto solo citando i prodotti dove ha senso. Continuerò a consigliare anche l'architettura e altre opzioni. Saluti. – Chad

+0

Eccellente; Grazie! –

0

Prova https://github.com/mcintyre321/PieQ - questo è il mio tentativo di scrivere una coda di lavoro incorporata, persistente, zero-config, incorporata. Probabilmente ha bisogno di un po 'di amore, ma penso che potrebbe essere il tipo di strumento che stai cercando.

0

Ho sviluppato una libreria JMS InMemory che può essere utilizzata per testare applicazioni JMS senza realmente connettersi a provider/server JMS (si pensi a hsqldb). Non devi occuparti di connessione o protocollo o altro, tutto ciò che devi fare è inviare e ricevere messaggi.

https://github.com/Dhana-Krishnasamy/InMemoryJMS