Esempio n. 1
0
        public void RouteMessages()
        {
            var connectionfactory = new MyConnectionFactory();

            //create a connection
            using (var connection = connectionfactory.CreateConnection())
            {
                //create a channel
                using (var channel = connection.CreateModel())
                {
                    //Declare/Create a queue
                    channel.QueueDeclare(queue: "S.Giorgio",
                                         durable: true,
                                         autoDelete: false,
                                         exclusive: false,
                                         arguments: null);

                    channel.QueueDeclare(queue: "scadenziario_operational",
                                         durable: true,
                                         autoDelete: false,
                                         exclusive: false,
                                         arguments: null);

                    Subscription subscription = new Subscription(model: channel, queueName: "S.Giorgio", autoAck: false);

                    while (true)
                    {
                        BasicDeliverEventArgs deliveryArguments = subscription.Next();      //queue consumption
                        StringBuilder         messageBuilder    = new StringBuilder();
                        string message = Encoding.UTF8.GetString(deliveryArguments.Body);
                        messageBuilder.Append("Message from queue: ").Append(message).Append(". ");
                        foreach (string headerKey in deliveryArguments.BasicProperties.Headers.Keys)
                        {
                            byte[] value = deliveryArguments.BasicProperties.Headers[headerKey] as byte[];
                            messageBuilder.Append("Header key: ").Append(headerKey).Append(", value: ").Append(Encoding.UTF8.GetString(value)).Append("; ");
                        }
                        Console.WriteLine(messageBuilder.ToString() + "...arrived");

                        //route message
                        string exchangePlant = "Plant";
                        channel.ExchangeDeclare(exchange: exchangePlant, type: "headers", durable: true, autoDelete: false, arguments: null);

                        Dictionary <string, object> bindingArgs = new Dictionary <string, object>();
                        bindingArgs.Add("x-match", "all");
                        bindingArgs.Add("object", "deadline");
                        channel.QueueBind(queue: "scadenziario_operational", exchange: "Plant", routingKey: "", arguments: bindingArgs);

                        channel.BasicPublish(exchange: "Plant",
                                             routingKey: "",
                                             basicProperties: deliveryArguments.BasicProperties,
                                             body: deliveryArguments.Body);
                        Console.WriteLine("[x] message '{0}' routed to {1} exchange \n", message, exchangePlant);

                        subscription.Ack(deliveryArguments);
                    }
                }
            }
        }
Esempio n. 2
0
        public static async Task Main(string[] args)
        {
            Trace.Listeners.Add(MyConsoleListener.Instance);

            var connectionFactory = new MyConnectionFactory(@"C:\git\csharp\hn-reader\data\hn-data.sqlite");

            var crawlTask = new CrawlTask(connectionFactory, Client, 3);

            await crawlTask.Run();
        }