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(); } } }
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(); } } }