예제 #1
0
        static void Main(string[] args)
        {
            string clientId = $"producer-{Guid.NewGuid().ToString()}";

            var         cf      = new StanConnectionFactory();
            StanOptions options = StanOptions.GetDefaultOptions();

            options.NatsURL = "nats://localhost:4222";

            using (var c = cf.CreateConnection("test-cluster", clientId, options))
            {
                do
                {
                    var opts = StanSubscriptionOptions.GetDefaultOptions();
                    opts.StartWithLastReceived();
                    var s = c.Subscribe("nats.streaming.demo.client", opts, (obj, arguments) =>
                    {
                        string message = Encoding.UTF8.GetString(arguments.Message.Data);
                        Console.WriteLine(message);
                    });

                    c.Publish("nats.streaming.demo", Encoding.UTF8.GetBytes("Published from the publisher"));
                    Thread.Sleep(10000);
                } while (true);
            }
        }
예제 #2
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            string clientId = $"producer-{Guid.NewGuid().ToString()}";

            StanOptions stanOptions = StanOptions.GetDefaultOptions();

            stanOptions.NatsURL = _natsOptions.Url;

            using (var c = new StanConnectionFactory()
                           .CreateConnection(_natsOptions.ClusterId, clientId, stanOptions))
            {
                while (!cancellationToken.IsCancellationRequested)
                {
                    var message = new Message();
                    await _messageRepository.AddAsync(message);

                    var json = JsonSerializer.Serialize(message);
                    Console.WriteLine($"Отправка {json}");
                    c.Publish(_natsOptions.Subject, Encoding.UTF8.GetBytes(json));

                    await Task.Delay(1000);
                }

                _logger.LogInformation("Отправка сообщений отменена.");
            }
        }
예제 #3
0
        private async Task RxSubscriber(string dataCentre, CancellationToken token)
        {
            var clusterId   = "test-cluster";
            var clientId    = Guid.NewGuid().ToString("N");
            var stanOptions = StanOptions.GetDefaultOptions();

            stanOptions.NatsURL = _natsClusterNodes[dataCentre];

            using var stanConnection = new StanConnectionFactory().CreateConnection(clusterId, clientId, stanOptions);

            var messagesSubject = stanConnection.Observe("foo");

            var loopCount = 0;

            messagesSubject.Subscribe(onNext: (message) =>
            {
                Console.WriteLine(
                    $"{dataCentre}: received '{System.Text.Encoding.UTF8.GetString(message.Data)}'. Redelivered: {message.Redelivered}. Sequence: {message.Sequence}");
                Console.WriteLine($"loopCount: {Interlocked.Increment(ref loopCount)}");
            });

            await Task.Delay(1000000, token);

            Console.WriteLine("Exiting subscription");
        }
예제 #4
0
        static void Main(string[] args)
        {
            // run docker run --rm --name natstest -p 4222:4222 -p 8222:8222 nats-streaming -store file -dir ./data --max_msgs 0 --max_bytes 0 --cluster_id scarsnatscluster
            var cf = new StanConnectionFactory();
            var c  = cf.CreateConnection("mynatscluster", "my-publish");

            // when the server responds with an acknowledgement, this
            // handler will be invoked.
            EventHandler <StanAckHandlerArgs> ackHandler = (obj, natsargs) =>
            {
                if (!string.IsNullOrEmpty(natsargs.Error))
                {
                    Console.WriteLine("Published Msg {0} failed: {1}",
                                      natsargs.GUID, natsargs.Error);
                }

                // handle success - correlate the send with the guid..
                //Console.WriteLine("Published msg {0} was stored on the server.");
            };

            int i = 0;

            // returns immediately
            while (true)
            {
                string guid = c.Publish("my.log.error", System.Text.Encoding.UTF8.GetBytes(i.ToString() + " - This error sucks!"), ackHandler);
                Console.WriteLine("{1} - Published msg {0} was stored on the server.", guid, i.ToString());
                i++;
                System.Threading.Thread.Sleep(new TimeSpan(0, 0, 5));
            }
        }
        //  .\nats-streaming-server.exe -cid cluster-teste-local -store file -dir dados-cluster-teste-local

        static void Main(string[] args)
        {
            string CLUSTER_ID = "cluster-teste-local";
            string CLIENT_ID  = "Producer-" + DateTime.Now.Second;
            string SUBJECT    = "subject-test";
            string URL_NATS   = "nats://localhost:4222";

            var         cf          = new StanConnectionFactory();
            StanOptions stanOptions = StanOptions.GetDefaultOptions();

            stanOptions.NatsURL = URL_NATS;

            Console.WriteLine($"Connecting (URL_NATS = {URL_NATS}) ...");
            Console.WriteLine($"CLUSTER_ID = {CLUSTER_ID}");
            Console.WriteLine($"CLIENT_ID = {CLIENT_ID}");


            using (var c = cf.CreateConnection(CLUSTER_ID, CLIENT_ID, stanOptions))
            {
                Random r = new Random();

                while (true)
                {
                    var msgId = r.Next();

                    string msg = CLIENT_ID + "-" + msgId.ToString();
                    c.Publish(SUBJECT, Encoding.UTF8.GetBytes(msg));

                    Console.WriteLine($"Msg published on {SUBJECT} : {msg}");

                    Thread.Sleep(1000);
                }
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Starting subsriber app...");

            var natsConnectionOptions = StanOptions.GetDefaultOptions();

            natsConnectionOptions.NatsURL = "nats://localhost:4222";
            natsConnectionOptions.ServerHeartbeatTimeoutCallback = () =>
            {
                Console.WriteLine("Hurrr... connection problem!");
            };
            natsConnectionOptions.ServerHeartbeatTimeoutMillis = 10000;

            var stanConnection = new StanConnectionFactory().CreateConnection("test-cluster", $"subscirber-name", natsConnectionOptions);

            var options = StanSubscriptionOptions.GetDefaultOptions();


            stanConnection.Subscribe($"some-channel", options, (sender, e) =>
            {
                Console.WriteLine("Message received...");
            });

            Console.WriteLine("Started... Hit any key to quit.");
            Console.ReadKey();
        }
예제 #7
0
        static void Main(string[] args)
        {
            string      serverURL = "nats://localhost:4222", clusterID = "test-cluster", clientID = "pub_client", subject = "foo_subject";
            StanOptions cOpts = StanOptions.GetDefaultOptions();

            cOpts.NatsURL = serverURL;
            using (var c = new StanConnectionFactory().CreateConnection(clusterID, clientID, cOpts))
            {
                Console.WriteLine("nats: connected serverURL='{0}', clusterID='{1}', clientID='{2}'", serverURL, clusterID, clientID);
                // publish message
                var ev     = new AutoResetEvent(false);
                var seq    = 0;
                var thread = new Thread(obj =>
                {
                    do
                    {
                        var msg = string.Format("message [#{0}]", ++seq);
                        c.Publish(subject, System.Text.Encoding.UTF8.GetBytes(msg));
                        Console.WriteLine("nats: published subject='{0}', message='{1}'", subject, msg);
                    } while (!ev.WaitOne(TimeSpan.FromSeconds(5)));
                });
                thread.Start();
                // wait for exit
                Console.WriteLine("program: press <enter> to exit...");
                Console.ReadLine();
                ev.Set();
                thread.Join();
            }
        }
예제 #8
0
        public void Start()
        {
            // connect to STAN
            var cf          = new StanConnectionFactory();
            var natsOptions = StanOptions.GetDefaultOptions();

            natsOptions.NatsURL = "nats://localhost:4223";
            _stanConnection     = cf.CreateConnection("test-cluster", "ShippingService", natsOptions);

            // create events subscription
            StanSubscriptionOptions stanOptions = StanSubscriptionOptions.GetDefaultOptions();

            stanOptions.DurableName = "ShippingService";

            // determine where to start reading in the event-stream
            ulong?lastSeqNr = GetLastSequenceNumber();

            if (lastSeqNr != null)
            {
                lastSeqNr++;
                stanOptions.StartAt(lastSeqNr.Value);

                Console.WriteLine($"Replaying from seq# {lastSeqNr}");
            }
            else
            {
                stanOptions.DeliverAllAvailable();

                Console.WriteLine("Replaying all messages.");
            }

            _stanConnection.Subscribe("store.events", stanOptions, EventReceived);
        }
예제 #9
0
        public static void Main(string[] args)
        {
            Console.WriteLine($"NATS Monitor Tool - v1.2");

            if (args == null || !args.Any())
            {
                Console.WriteLine("Need argument!");
                Environment.Exit(1);
            }


            _eventName = args[0];
            if (args.Length > 1)
            {
                URL = $"nats://{args[1]}";
            }

            var scf     = new StanConnectionFactory();
            var options = StanOptions.GetDefaultOptions();

            options.NatsURL = URL;
            var clientId       = Environment.MachineName;
            var stanConnection = scf.CreateConnection("events-streaming",
                                                      $"{clientId}-{Guid.NewGuid()}",
                                                      options);

            var subOptions = StanSubscriptionOptions.GetDefaultOptions();

            subOptions.DurableName = Environment.MachineName;
            subOptions.StartAt(DateTime.UtcNow.AddMinutes(-1));

            Console.WriteLine($"Starting connection to {_eventName} at {URL}");
            using (var sub = stanConnection.Subscribe(_eventName, subOptions, (sender, handlerArgs) =>
            {
                WriteToConsole(format_json(Encoding.UTF8.GetString(handlerArgs.Message.Data)));
                _eventCount++;
            }))
            {
                while (true)
                {
                    Thread.Sleep(1000);

                    if (!Console.KeyAvailable)
                    {
                        continue;
                    }

                    var key = Console.ReadKey(true);
                    if (key.Modifiers.HasFlag(ConsoleModifiers.Control) && key.Key == ConsoleKey.S)
                    {
                        sub.Close();
                        WriteToConsole("Exiting application...");
                        Environment.Exit(0);
                    }
                }
            }
        }
예제 #10
0
        void InitStanClient()
        {
            var stanConnectionFactory = new StanConnectionFactory();

            _stanClient = stanConnectionFactory.CreateConnection(_options.ClusterId, _options.ClientId, _stanOptions);

            _stanSubscriptionOptions             = StanSubscriptionOptions.GetDefaultOptions();
            _stanSubscriptionOptions.DurableName = _options.StanSubscriptionOptions.DurableName;
        }
        //Deadlock when i use simple stan configuration for cluster
        static async void DeadlockInStanOptions()
        {
            var cf = new StanConnectionFactory();

            var opts = StanOptions.GetDefaultOptions();

            opts.NatsURL      = "nats://127.0.0.1:4223,nats://127.0.0.1:4224";
            opts.PingInterval = 500;

            var opts2 = StanOptions.GetDefaultOptions();

            opts2.NatsURL = "nats://127.0.0.1:4222";


            using (var producer = cf.CreateConnection("test-cluster", "appname", opts))
                using (var consumer = cf.CreateConnection("test-cluster", "appname2", opts2))
                {
                    using (consumer.Subscribe("foo", (sender, handlerArgs) => Console.WriteLine(
                                                  System.Text.Encoding.UTF8.GetString(handlerArgs.Message.Data))))
                    {
                        Console.WriteLine("Connected. ConnServ {0}.", producer?.NATSConnection?.ConnectedUrl);

                        //first success send
                        producer?.Publish("foo", System.Text.Encoding.UTF8.GetBytes("first success hello"));

                        //stop connected stan container, simulation disconnect
                        var firstUrl             = producer?.NATSConnection?.ConnectedUrl;
                        var clusterContainerName = firstUrl.Contains("4224") ? "nats-2" : "nats-1";
                        DockerController.SendStopContainer(clusterContainerName);

                        //simulation of sending 10 messages to diconnected node
                        for (var i = 0; i < 10; i++)
                        {
                            var success = false;
                            while (!success)
                            {
                                Console.WriteLine($"Publishing.  ConnState {producer?.NATSConnection?.State}. Connected to {producer?.NATSConnection?.ConnectedUrl}");
                                try
                                {
                                    producer?.Publish("foo", System.Text.Encoding.UTF8.GetBytes("hello"));
                                    success = true;
                                }
                                catch (Exception e)
                                {
                                    System.Console.WriteLine("exception:  {0}", e.Message);
                                }

                                await Task.Delay(1000);
                            }
                        }

                        DockerController.SendStartContainer(clusterContainerName);
                    }
                }
        }
예제 #12
0
        /// <summary>
        /// Establishes the server connection.
        /// </summary>
        private void Connect()
        {
            var factory = new StanConnectionFactory();
            var retry   = new LinearRetryPolicy(exception => true, 20, TimeSpan.FromSeconds(0.5));

            retry.Invoke(
                () =>
            {
                Connection = factory.CreateConnection("test-cluster", nameof(NatsStreamingFixture));
            });
        }
        public Program(string[] args)
        {
            var clientId = "";
            var topic    = "sample";

            if (args.Length > 1)
            {
                topic = args[1];
            }
            if (args.Length > 2)
            {
                clientId = args[2];
            }
            var cf      = new StanConnectionFactory();
            var options = StanOptions.GetDefaultOptions();

            options.ConnectTimeout = 1000;
            options.NatsURL        = "nats://*****:*****@localhost:4222";
            IStanConnection connection = cf.CreateConnection("test-cluster", clientId, options);

            if (args.Length > 0 && args[0] == "send")
            {
                while (true)
                {
                    connection.Publish(topic, Encoding.UTF8.GetBytes("Hello NATS " + Guid.NewGuid().ToString()));
                    Console.WriteLine("Message sent to topic: " + topic);
                    Thread.Sleep(500);
                }
            }
            else
            {
                var subName = "subscription-1";
                if (args.Length > 0)
                {
                    subName = args[0];
                }
                EventHandler <StanMsgHandlerArgs> eh = (sender, argsMsg) =>
                {
                    var body = Encoding.UTF8.GetString(argsMsg.Message.Data);
                    // TODO: Handle headers in right way
                    Console.WriteLine(body);
                    Thread.Sleep(1000);
                    argsMsg.Message.Ack();
                };

                var opts = StanSubscriptionOptions.GetDefaultOptions();
                opts.DurableName = subName;
                opts.ManualAcks  = true;
                opts.AckWait     = 60000;
                opts.MaxInflight = 1;
                IStanSubscription subscription = subscription = connection.Subscribe(topic, subName, opts, eh);
            }
        }
예제 #14
0
        static void Main(string[] args)
        {
            string CLUSTER_ID   = "cluster-teste-local";
            string CLIENT_ID    = "Consumer-" + DateTime.Now.Second;
            string DURABLE_NAME = "durable-queue";
            string SUBJECT      = "subject-test";
            string QUEUE_GROUP  = "queue-group-test";
            string URL_NATS     = "nats://localhost:4222";


            var         cf          = new StanConnectionFactory();
            StanOptions stanOptions = StanOptions.GetDefaultOptions();

            stanOptions.NatsURL = URL_NATS;

            Console.WriteLine($"Connecting (URL_NATS = {URL_NATS}) ...");
            Console.WriteLine($"CLUSTER_ID = {CLUSTER_ID}");
            Console.WriteLine($"CLIENT_ID = {CLIENT_ID}");

            using (var c = cf.CreateConnection(CLUSTER_ID, CLIENT_ID, stanOptions))
            {
                var subscriptionOpts = StanSubscriptionOptions.GetDefaultOptions();

                subscriptionOpts.DurableName = DURABLE_NAME;
                subscriptionOpts.ManualAcks  = true;
                subscriptionOpts.MaxInflight = 1;

                var cts = new CancellationTokenSource();

                Task.Run(() =>
                {
                    c.Subscribe(SUBJECT, QUEUE_GROUP, subscriptionOpts, (obj, args) =>
                    {
                        string msg = Encoding.UTF8.GetString(args.Message.Data);

                        Console.WriteLine($"Msg received on {SUBJECT} : {msg}");

                        args.Message.Ack();
                    });
                }, cts.Token);



                Console.WriteLine("Waiting...  [press any key to exit]");
                Console.ReadKey();

                cts.Cancel();
            }
        }
예제 #15
0
        public void Setup(string appname)
        {
            var cf = new StanConnectionFactory();

            _connection = cf.CreateConnection("test-cluster", appname);

            _connection.NATSConnection.Opts.DisconnectedEventHandler += (sender, args) =>
            {
                OnDisconnected?.Invoke(this, new OnDisconnectedHandlerArgs(args.Conn.State));
            };

            _connection.NATSConnection.Opts.ClosedEventHandler += (sender, args) =>
            {
                OnClosed?.Invoke(this, new OnClosedHandlerArgs(args.Conn.State));
            };
        }
예제 #16
0
        public NATSOrderRepository()
        {
            try
            {
                var cf      = new StanConnectionFactory();
                var options = StanOptions.GetDefaultOptions();
                options.NatsURL = "nats://localhost:4223";
                _stanConnection = cf.CreateConnection("test-cluster", CLIENTID, options);
                var subOptions = StanSubscriptionOptions.GetDefaultOptions();
                subOptions.DeliverAllAvailable();
                _stanConnection.Subscribe(EVENTSTREAM_SUBJECT, subOptions, (obj, args) =>
                {
                    try
                    {
                        string message        = Encoding.UTF8.GetString(args.Message.Data);
                        string[] messageParts = message.Split('#');

                        string eventTypeDescriptor =
                            $"Store.OrderProcessingService.Domain.Events.{messageParts[0]}";
                        Type eventType   = Type.GetType(eventTypeDescriptor);
                        string eventData = message.Substring(message.IndexOf('#') + 1);
                        dynamic e        = JsonSerializer.Deserialize(eventData, eventType);
                        if (_eventStreams.ContainsKey(e.OrderNumber))
                        {
                            _eventStreams[e.OrderNumber].Add(e);
                        }
                        else
                        {
                            _eventStreams.Add(e.OrderNumber, new List <BusinessEvent>()
                            {
                                e
                            });

                            Console.WriteLine($"Order #{e.OrderNumber} found during replay.");
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error: {ex.Message}");
                    }
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
            }
        }
예제 #17
0
        private void Run(string[] args)
        {
            _clientId += Guid.NewGuid();

            Banner();

            _cOpts.NatsURL = Url;
            using var c    = new StanConnectionFactory().CreateConnection(ClusterId, _clientId, _cOpts);
            while (true)
            {
                long acksProcessed = 0;
                var  sw            = Stopwatch.StartNew();
                var  ev            = new AutoResetEvent(false);

                // async
                for (var i = 0; i < Count; i++)
                {
                    var guid = c.Publish(Subject, _payload, (obj, pubArgs) =>
                    {
                        if (Verbose)
                        {
                            Console.WriteLine("Received ack for message {0}", pubArgs.GUID);
                        }
                        if (!string.IsNullOrEmpty(pubArgs.Error))
                        {
                            Console.WriteLine("Error processing message {0}", pubArgs.GUID);
                        }

                        if (Interlocked.Increment(ref acksProcessed) == Count)
                        {
                            ev.Set();
                        }
                    });

                    if (Verbose)
                    {
                        Console.WriteLine("Published message with guid: {0}", guid);
                    }
                }

                ev.WaitOne();
                sw.Stop();

                Console.Write("Published {0} msgs with acknowledgements in {1} seconds ", Count, sw.Elapsed.TotalSeconds);
                Console.WriteLine("({0} msgs/second).", (int)(Count / sw.Elapsed.TotalSeconds));
            }
        }
예제 #18
0
        static void Main(string[] args)
        {
            // run docker run --rm --name natstest -p 4222:4222 -p 8222:8222 nats-streaming -store file -dir ./data --max_msgs 0 --max_bytes 0 --cluster_id scarsnatscluster
            EventHandler <StanMsgHandlerArgs> ackHandler = (obj, natsargs) =>
            {
                Console.WriteLine("Message: {0} - {1} - {2}", natsargs.Message.Subject,
                                  System.Text.Encoding.UTF8.GetString(natsargs.Message.Data), natsargs.Message.TimeStamp.ToString());
            };

            var opts = StanSubscriptionOptions.GetDefaultOptions();

            opts.DeliverAllAvailable();
            //opts.StartAt(22);
            var cf = new StanConnectionFactory();
            var c  = cf.CreateConnection("mynatscluster", "my-reader");
            var s  = c.Subscribe("my.log.error", opts, ackHandler);
        }
예제 #19
0
        public void Run(string[] args)
        {
            parseArgs(args);
            banner();

            var opts = StanOptions.GetDefaultOptions();

            opts.NatsURL = url;

            using (var c = new StanConnectionFactory().CreateConnection(clusterID, clientID, opts))
            {
                TimeSpan elapsed = receiveAsyncSubscriber(c);

                Console.Write("Received {0} msgs in {1} seconds ", received, elapsed.TotalSeconds);
                Console.WriteLine("({0} msgs/second).",
                                  (int)(received / elapsed.TotalSeconds));
            }
        }
예제 #20
0
        public void Run(string[] args)
        {
            _clientId += Guid.NewGuid();
            Banner();

            var opts = StanOptions.GetDefaultOptions();

            opts.NatsURL = Url;

            using var c = new StanConnectionFactory().CreateConnection(ClusterId, _clientId, opts);
            while (true)
            {
                _received = 0;
                var elapsed = ReceiveAsyncSubscriber(c);
                Console.Write("Received {0} msgs in {1} seconds ", _received, elapsed.TotalSeconds);
                Console.WriteLine("({0} msgs/second).", (int)(_received / elapsed.TotalSeconds));
            }
        }
예제 #21
0
        public void Start()
        {
            _repo = new SQLServerOrderRepository();

            // connect to NATS
            var natsConnectionFactory = new ConnectionFactory();

            _natsConnection = natsConnectionFactory.CreateConnection("nats://localhost:4222");

            // connect to STAN
            var cf      = new StanConnectionFactory();
            var options = StanOptions.GetDefaultOptions();

            options.NatsURL = "nats://localhost:4223";
            _stanConnection = cf.CreateConnection("test-cluster", "OrderProcessingService", options);

            // create commands subscription
            _commandsSubscription = _natsConnection.SubscribeAsync("store.commands.*", CommandReceived);
        }
예제 #22
0
        private void Publish(string dataCentre)
        {
            var stanOptions = StanOptions.GetDefaultOptions();

            stanOptions.NatsURL = _natsClusterNodes[dataCentre];
            var       iteration = 0;
            const int numberOfMessagesToSend = 10;

            using var stanConnection = new StanConnectionFactory().CreateConnection(ClusterId, $"{Environment.MachineName.ToLower()}-{dataCentre}-sending", stanOptions);

            var messages = Enumerable.Range(1, numberOfMessagesToSend).Select(r =>
            {
                Console.WriteLine($"{dataCentre}: sent 'Sending message from test {++iteration}'");
                stanConnection.Publish("foo",
                                       System.Text.Encoding.UTF8.GetBytes($"Sending message from test {iteration}"));
                return(r);
            });

            Console.WriteLine($"Published {messages.Count()} messages...");
        }
예제 #23
0
        private async Task Subscriber(string dataCentre, CancellationToken token)
        {
            var subscriberOptions = StanOptions.GetDefaultOptions();

            subscriberOptions.NatsURL = _natsClusterNodes[dataCentre];
            var loopCount = 0;

            using var stanConnection = new StanConnectionFactory().CreateConnection(ClusterId, $"{Environment.MachineName.ToLower()}-{dataCentre}-receiving", subscriberOptions);
            using var subscribe      = stanConnection.Subscribe("foo", CreateStanSubscriptionOptions(dataCentre, subscriberOptions), (obj, context) =>
            {
                Console.WriteLine(
                    $"{dataCentre}: received '{System.Text.Encoding.UTF8.GetString(context.Message.Data)}'. Redelivered: {context.Message.Redelivered}. Sequence: {context.Message.Sequence}");
                Console.WriteLine($"loopCount: {Interlocked.Increment(ref loopCount)}");
            });

            await Task.Delay(1000000, token);

            subscribe.Unsubscribe();
            Console.WriteLine("Exiting subscription");
        }
예제 #24
0
        static void Main(string[] args)
        {
            var natsOptions = ConnectionFactory.GetDefaultOptions();

            natsOptions.Url            = "nats://localhost:4222";
            natsOptions.PingInterval   = 1 * 1000;
            natsOptions.MaxPingsOut    = 3;
            natsOptions.AllowReconnect = true;
            natsOptions.MaxReconnect   = Options.ReconnectForever;
            natsOptions.ReconnectWait  = 1 * 1000;
            var natsConn = new ConnectionFactory().CreateConnection(natsOptions);

            var stanOptions = StanOptions.GetDefaultOptions();

            stanOptions.NatsConn = natsConn;
            var stanConn = new StanConnectionFactory().CreateConnection("test-cluster", "net-client", stanOptions);

            TestNATS(natsConn);
            // TestSTAN(stanConn);
        }
예제 #25
0
        static void Main(string[] args)
        {
            string clientId = $"producer-{Guid.NewGuid().ToString()}";

            var         cf      = new StanConnectionFactory();
            StanOptions options = StanOptions.GetDefaultOptions();

            options.NatsURL = "nats://localhost:4223";

            using (var c = cf.CreateConnection("test-cluster", clientId, options))
            {
                for (int i = 1; i <= 25; i++)
                {
                    string message = $"[{DateTime.Now.ToString("hh:mm:ss:fffffff")}] Message {i}";
                    Console.WriteLine($"Sending {message}");

                    c.Publish("nats.streaming.demo", Encoding.UTF8.GetBytes(message));
                }
            }
        }
예제 #26
0
        private IStanConnection GetConnection()
        {
            var clientId = _natsOptions.Value.ClientId?.Replace(".", "_");
            var options  = StanOptions.GetDefaultOptions();

            options.NatsURL = _natsOptions.Value.NatsUrl;

            options.ConnectionLostEventHandler = (_, args) =>
            {
                SetUnrecoverableState(args.ConnectionException ?? new Exception("NATS connection was lost"));
            };

            //fix https://github.com/nats-io/csharp-nats-streaming/issues/28
            options.PubAckWait = 30000;

            var cf = new StanConnectionFactory();

            _connection = cf.CreateConnection(_natsOptions.Value.Cluster, clientId + Guid.NewGuid(), options);

            return(_connection);
        }
예제 #27
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage: consumer <clientid>");
                return;
            }

            string clientId = args[0];

            var cf = new StanConnectionFactory();

            StanOptions options = StanOptions.GetDefaultOptions();

            options.NatsURL = "nats://localhost:4222";

            using (var c = cf.CreateConnection("test-cluster", clientId, options))
            {
                var opts = StanSubscriptionOptions.GetDefaultOptions();

                //opts.DeliverAllAvailable();
                //opts.StartAt(15);
                //opts.StartAt(TimeSpan.FromSeconds(10));
                //opts.StartAt(new DateTime(2019, 9, 18, 9, 0, 0));
                //opts.StartWithLastReceived();
                //opts.DurableName = "durable";

                var s = c.Subscribe("nats.streaming.demo", opts, (obj, args) =>
                {
                    string message = Encoding.UTF8.GetString(args.Message.Data);
                    Console.WriteLine($"[#{args.Message.Sequence}] {message}");
                });

                Console.WriteLine($"Consumer with client id '{clientId}' started. Press any key to quit...");
                Console.ReadKey(true);

                //s.Unsubscribe();
                c.Close();
            }
        }
예제 #28
0
        static void Main(string[] args)
        {
            var clusterId = "test-cluster";
            var clientId  = Guid.NewGuid().ToString("N");

            using (var cn = new StanConnectionFactory().CreateConnection(clusterId, clientId))
            {
                var cts = new CancellationTokenSource();

                Task.Run(() =>
                {
                    var temperatures =
                        cn.Observe("temperatures")
                        .Where(m => m.Data?.Any() == true)
                        .Select(m => BitConverter.ToInt32(m.Data, 0));

                    temperatures.Subscribe(t => Console.WriteLine($"{t}C"));

                    temperatures.Subscribe(t => Console.WriteLine($"{(t * 9 / 5) + 32}F"));
                }, cts.Token);

                Task.Run(async() =>
                {
                    var rnd = new Random();

                    while (!cts.IsCancellationRequested)
                    {
                        cn.Publish("temperatures", BitConverter.GetBytes(rnd.Next(-10, 40)));

                        await Task.Delay(1000, cts.Token);
                    }
                }, cts.Token);

                Console.WriteLine("Hit any key to exit");
                Console.ReadKey();
                cts.Cancel();
            }
        }
예제 #29
0
파일: main.cs 프로젝트: d3sw/one-nats
        static void Main()
        {
            string      serverURL = "nats://localhost:4222", clusterID = "test-cluster", clientID = "client_sub", subject = "foo_subject", queue = "foo_queue", durable = "foo_durable";
            StanOptions cOpts = StanOptions.GetDefaultOptions();

            cOpts.NatsURL = serverURL;
            using (var c = new StanConnectionFactory().CreateConnection(clusterID, clientID, cOpts))
            {
                Console.WriteLine("nats: connected serverURL='{0}', clusterID='{1}', clientID='{2}'", serverURL, clusterID, clientID);
                StanSubscriptionOptions sOpts = StanSubscriptionOptions.GetDefaultOptions();
                sOpts.DurableName = durable;
                sOpts.MaxInflight = 1;
                using (var s = c.Subscribe(subject, queue, sOpts, (sender, args) =>
                {
                    Console.WriteLine("Received seq # {0}: {1}", args.Message.Sequence, System.Text.Encoding.UTF8.GetString(args.Message.Data));
                }))
                {
                    Console.WriteLine("nats: subscribed subject='{0}', queue='{1}', durable='{2}'", subject, queue, durable);
                    Console.WriteLine("program: press <enter> to exit...");
                    Console.ReadLine();
                }
            }
        }
예제 #30
0
        public void Start()
        {
            // connect to NATS
            var natsConnectionFactory = new ConnectionFactory();

            _natsConnection = natsConnectionFactory.CreateConnection("nats://localhost:4222");

            // connect to STAN
            var cf          = new StanConnectionFactory();
            var natsOptions = StanOptions.GetDefaultOptions();

            natsOptions.NatsURL = "nats://localhost:4223";
            _stanConnection     = cf.CreateConnection("test-cluster", "OrdersQueryService", natsOptions);

            // create queries subscription
            _natsConnection.SubscribeAsync("store.queries.*", QueryReceived);

            // create events subscription
            StanSubscriptionOptions stanOptions = StanSubscriptionOptions.GetDefaultOptions();

            stanOptions.DurableName = "OrdersQueryService";
            _stanConnection.Subscribe("store.events", stanOptions, EventReceived);
        }