예제 #1
0
        private static async Task SinglePublisherMultipleSubscribers()
        {
            Console.Clear();
            Console.WriteLine("Single publisher and multiple subscribers");
            Console.WriteLine("Enter message text to send or empty string to exit:");

            using (var caraBus = new RabbitMQCaraBus(new RabbitMQCaraBusOptions()))
            {
                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"Subscriber 1 received message: {m.Text}");
                });

                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"Subscriber 2 received message: {m.Text}");
                });

                await caraBus.StartAsync();

                while (true)
                {
                    var text = Console.ReadLine();
                    if (text == string.Empty)
                    {
                        break;
                    }

                    await caraBus.PublishAsync(new Message { Text = text });
                }

                await caraBus.StopAsync();
            }
        }
예제 #2
0
        protected override ICaraBus CreateCaraBus(CaraBusBaseOptions caraBusBaseOptions)
        {
            var caraBus = new RabbitMQCaraBus(new RabbitMQCaraBusOptions
            {
                ConnectionString       = "amqp://localhost",
                MaxDegreeOfParallelism = caraBusBaseOptions.MaxDegreeOfParallelism,
                AutoStart     = caraBusBaseOptions.AutoStart,
                TimeoutOnStop = caraBusBaseOptions.TimeoutOnStop
            });

            _disposables.Add(caraBus);

            return(caraBus);
        }
예제 #3
0
        private static async Task Scopes()
        {
            Console.Clear();
            Console.WriteLine("Scopes");
            Console.WriteLine("There are two scopes declared for this sample: 'one' and 'two'");
            Console.WriteLine("Enter '[scope]<space>message text' to send or empty string to exit:");

            using (var caraBus = new RabbitMQCaraBus(new RabbitMQCaraBusOptions()))
            {
                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"[scope 'one'], default group subscriber 1: received message: {m.Text}");
                }, SubscribeOptions.Exclusive(opt => opt.Scope = "one"));

                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"[scope 'one'], default group subscriber 2: received message: {m.Text}");
                }, SubscribeOptions.Exclusive(opt => opt.Scope = "one"));

                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"[scope 'one'], custom some group, subscriber 1: received message: {m.Text}");
                }, SubscribeOptions.Exclusive("some group", opt => opt.Scope = "one"));

                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"[scope 'one'] custom some group, subscriber 2: received message: {m.Text}");
                }, SubscribeOptions.Exclusive("some group", opt => opt.Scope = "one"));

                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"[scope 'two'] subscriber 1: received message: {m.Text}");
                }, SubscribeOptions.NonExclusive(opt => opt.Scope = "two"));

                caraBus.Subscribe <Message>(m =>
                {
                    Console.WriteLine($"[scope 'two'] subscriber 2: received message: {m.Text}");
                }, SubscribeOptions.NonExclusive(opt => opt.Scope = "two"));

                await caraBus.StartAsync();

                var scopeOneMessage = "Hello for scope 'one'";
                WriteDemoText($"one {scopeOneMessage}");
                await caraBus.PublishAsync(new Message { Text = scopeOneMessage }, new PublishOptions { Scope = "one" });

                await Task.Delay(TimeSpan.FromSeconds(2));

                var scopeTwoMessage = "Hello for scope 'two'";
                WriteDemoText($"two {scopeTwoMessage}");
                await caraBus.PublishAsync(new Message { Text = scopeTwoMessage }, new PublishOptions { Scope = "two" });

                while (true)
                {
                    var text = Console.ReadLine();
                    if (text == string.Empty)
                    {
                        break;
                    }

                    var parts = text.Split(' ');

                    var scope = parts[0];
                    text = parts.Length > 1
                        ? parts.Skip(1).Aggregate((c, n) => c + " " + n)
                        : String.Empty;

                    await caraBus.PublishAsync(new Message { Text = text }, new PublishOptions { Scope = scope });
                }

                await caraBus.StopAsync();
            }
        }