Esempio n. 1
0
        public static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = MicroServiceConfig.Rabbit_hostname(),
                UserName = MicroServiceConfig.Rabbit_username(),
                Password = MicroServiceConfig.Rabbit_password()
            };

            factory.AutomaticRecoveryEnabled = true;
            factory.NetworkRecoveryInterval  = TimeSpan.FromSeconds(10);
            using (var connection = factory.CreateConnection())
            {
                Console.WriteLine(DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + ": Connected");
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "ms.events", type: "topic");
                    channel.QueueDeclare(queue: "ms.queue.authapi", durable: true, exclusive: false, autoDelete: false, arguments: null);
                    channel.QueueBind("ms.queue.authapi", "ms.events", "#");
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        try
                        {
                            MessageFlow.HandleEvent("authapi", ea, authApiHub.HandleMessage);
                            channel.BasicAck(ea.DeliveryTag, false);
                        }
                        catch (Exception ex)
                        {
                            System.Threading.Thread.Sleep(1000); //try again in a second...
                            channel.BasicNack(ea.DeliveryTag, false, true);
                            authApiHub.Log($"Event exception: {Monosoft.Common.Utils.ExceptionHelper.GetExceptionAsReportText(ex)}");
                        }
                    };

                    channel.BasicConsume("ms.queue.authapi", false, consumer);
                    CreateWebHostBuilder(args).Build().Run();
                }
            }
        }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = MicroServiceConfig.Rabbit_hostname(),
                UserName = MicroServiceConfig.Rabbit_username(),
                Password = MicroServiceConfig.Rabbit_password()
            };

            factory.AutomaticRecoveryEnabled = true;
            factory.NetworkRecoveryInterval  = TimeSpan.FromSeconds(10);
            using (var connection = factory.CreateConnection())
            {
                Console.WriteLine(DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + ": Connected");
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "ms.events", type: "topic");
                    channel.QueueDeclare(queue: "ms.queue.clusterapi", durable: true, exclusive: false, autoDelete: false, arguments: null);
                    channel.QueueBind("ms.queue.clusterapi", "ms.events", "#");
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        try
                        {
                            MessageFlow.HandleEvent("clusterapi", ea, clusterApiHub.HandleMessage);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("ex: " + ex.Message);
                        }
                        finally
                        {
                            channel.BasicAck(ea.DeliveryTag, false);
                        }
                    };

                    channel.BasicConsume("ms.queue.clusterapi", false, consumer);
                    CreateWebHostBuilder(args).Build().Run();
                }

                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "ms.request", type: "topic");//ms.request? eller ms.auth.request?
                    channel.QueueDeclare(queue: "ms.queue.forwardauthapi", durable: true, exclusive: false, autoDelete: false, arguments: null);
                    channel.QueueBind("ms.queue.forwardauthapi", "ms.request", "token.#");
                    channel.QueueBind("ms.queue.forwardauthapi", "ms.request", "servicestore.#");
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        byte[] response   = null;
                        var    body       = ea.Body;
                        var    props      = ea.BasicProperties;
                        var    replyProps = channel.CreateBasicProperties();
                        replyProps.CorrelationId = props.CorrelationId;
                        try
                        {
                            response = MessageFlow.HandleMessage("clusterapi", ea, Program.FowardMessage /*send via signalR*/);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("ex: " + ex.Message);
                        }
                        finally
                        {
                            channel.BasicAck(ea.DeliveryTag, false);
                            if (props != null && props.ReplyTo != null)
                            {
                                channel.BasicPublish(
                                    exchange: string.Empty,
                                    routingKey: props.ReplyTo,
                                    basicProperties: replyProps,
                                    body: response);
                                Console.WriteLine(DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + ": RPC responded");
                            }
                        }
                    };
                    channel.BasicConsume("ms.queue.forwardauthapi", false, consumer);
                    CreateWebHostBuilder(args).Build().Run();
                }
            }
        }