Estoy tratando de aprender a usar el marco de mensajería Disruptor.NET, y no puedo encontrar ningún ejemplo práctico. Hay bastantes artículos con imágenes sobre cómo funciona, pero no puedo encontrar ningún lugar que realmente funcione y le muestra cómo implementar los métodos. ¿Qué sería un ejemplo?Disruptor.NET ejemplo
Respuesta
Frustrado de que no pude encontrar un 'Hola mundo' viable para Disruptor-net, jugueteé hasta que conseguí uno funcionando - ver abajo. Es de esperar que sea bastante auto explicativo. Las líneas Console.WriteLine
son prácticas para ver cómo funcionan las cosas, por ejemplo, que RingBuffer crea cada instancia de entrada al inicio (lo cual tiene sentido).
Espero que esto ayude a cualquiera que busque ayuda con Disruptor en .NET.
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Disruptor;
using Disruptor.Dsl;
namespace DisruptorTest
{
public sealed class ValueEntry
{
public long Value { get; set; }
public ValueEntry()
{
Console.WriteLine("New ValueEntry created");
}
}
public class ValueAdditionHandler : IEventHandler<ValueEntry>
{
public void OnNext(ValueEntry data, long sequence, bool endOfBatch)
{
Console.WriteLine("Event handled: Value = {0} (processed event {1}", data.Value, sequence);
}
}
class Program
{
private static readonly Random _random = new Random();
private static readonly int _ringSize = 16; // Must be multiple of 2
static void Main(string[] args)
{
var disruptor = new Disruptor.Dsl.Disruptor<ValueEntry>(() => new ValueEntry(), _ringSize, TaskScheduler.Default);
disruptor.HandleEventsWith(new ValueAdditionHandler());
var ringBuffer = disruptor.Start();
while (true)
{
long sequenceNo = ringBuffer.Next();
ValueEntry entry = ringBuffer[sequenceNo];
entry.Value = _random.Next();
ringBuffer.Publish(sequenceNo);
Console.WriteLine("Published entry {0}, value {1}", sequenceNo, entry.Value);
Thread.Sleep(250);
}
}
}
}
también puede agregar notas sobre cómo ejecutarlo? ¿Qué dll debería agregar a un proyecto? ¿Debería descargarlos en algún lado o debería construirlos yo mismo? – javapowered
también alguien puede explicar un ejemplo? ¿Por qué es mejor que el estándar .net libriries? ¿Cuántos hilos están involucrados? ¿solo uno? No veo ninguna creación de hilos. – javapowered
La mayoría de las personas que usan el patrón disruptor probablemente usarán una tubería de tres etapas, por lo que sería bueno con un ejemplo con un disruptor de entrada y un disruptor de salida. – Fred
Hay una entrada en el blog detallada sobre el patrón disruptor, The Latency Issue. Demuestra cómo comenzar y usar Disruptor en detalle.
Este enlace es obsoleto. El nuevo enlace es http://www.tradesharp.se/over-6-million-transactions-per-second-in-a-real-time-system-an-out-of-the-box-approach/ –
Nuevo enlace está rancio también – Ozgur
- 1. ejemplo
- 2. compresibilidad Ejemplo
- 3. multiprocesamiento.Pool ejemplo
- 4. ejemplo reinicio
- 5. Ejemplo de'instanceof'
- 6. ejemplo WeakHashMap
- 7. Ejemplo NSSpeechRecognizer
- 8. NSOutlineView ejemplo
- 9. Python Cut Ejemplo
- 10. simple C++ hash_set ejemplo
- 11. GWT CustomScrollPanel ejemplo
- 12. Node.js - EJS ejemplo
- 13. Ejemplo 2D con OpenGL
- 14. Ejemplo de Android JSoup
- 15. Agregado() ejemplo en R
- 16. UINavigationController: ejemplo más simple
- 17. MVVM Light Threading Ejemplo
- 18. Ejemplo de Android SSLEngine
- 19. Ejemplo de resolución - Autofac
- 20. Ejemplo de startMonitoringSignificantLocationChanges
- 21. Ejemplo usando Androids lrucache
- 22. Ejemplo básico de pySQLite?
- 23. v4l2 muy simple ejemplo
- 24. Ejemplo de O (n!)?
- 25. Ejemplo de SVG Salamander?
- 26. NaCl OpenGL ejemplo
- 27. Java extiende el ejemplo
- 28. android.support.v4.widget.SearchViewCompat ejemplo?
- 29. Ejemplo de TTPickerTextField
- 30. Ejemplo multipart/form-data
Esta pregunta podría llevarle a cierta información que aún no ha visto: http://stackoverflow.com/questions/6933347/how-should-one-use-disruptor-disruptor-pattern-to-build-real- world-message-sys –
El [wiki oficial del proyecto] (http://code.google.com/p/disruptor-net/w/list) tiene algo de información. – caesay
El ejemplo de un código en su parece estar desactualizado, por ejemplo, no puedo encontrar la interfaz "IBatchHandler" en ninguna parte de la compilación actual y los parámetros del RingBuffer parecen tener parámetros completamente diferentes. Parece que el sitio oficial se ha movido a GitHub, pero no puedo encontrar ningún otro documento/documentación adicional en el sitio (pero no estoy seguro si lo estoy haciendo correctamente) - https://github.com/odeheurles/ Disruptor-net # readme – William