public void TestEventingConsumerRegistrationEvents()
        {
            string q = Model.QueueDeclare();

            var    registeredLatch    = new ManualResetEvent(false);
            object registeredSender   = null;
            var    unregisteredLatch  = new ManualResetEvent(false);
            object unregisteredSender = null;

            EventingBasicConsumer ec = new EventingBasicConsumer(Model);

            ec.Registered += (s, args) =>
            {
                registeredSender = s;
                registeredLatch.Set();
            };

            ec.Unregistered += (s, args) =>
            {
                unregisteredSender = s;
                unregisteredLatch.Set();
            };

            string tag = Model.BasicConsume(q, false, ec);

            Wait(registeredLatch);

            Assert.IsNotNull(registeredSender);
            Assert.AreEqual(ec, registeredSender);
            Assert.AreEqual(Model, ((EventingBasicConsumer)registeredSender).Model);

            Model.BasicCancel(tag);
            Wait(unregisteredLatch);
            Assert.IsNotNull(unregisteredSender);
            Assert.AreEqual(ec, unregisteredSender);
            Assert.AreEqual(Model, ((EventingBasicConsumer)unregisteredSender).Model);
        }
        static void Main(string[] args)
        {
            IConnectionFactory factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (IConnection connection = factory.CreateConnection())
                using (IModel channel = connection.CreateModel())
                {
                    //We might start the consumer before the publisher
                    channel.QueueDeclare(
                        queue: "hello_queue",
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

                    //消费者定义
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body    = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" SKO1.HelloWorld.Receiver: {0}", message);
                    };

                    //消费者绑定到队列
                    channel.BasicConsume(
                        queue: "hello_queue",
                        noAck: true,        //是否不需要消费者手工确认消息
                        consumer: consumer);

                    Console.WriteLine(" Press [Enter] to exit...");
                    Console.ReadLine();
                }
        }
        static void Main(string[] args)
        {
            var logger  = new LoggerConfiguration().MinimumLevel.Verbose().WriteTo.RollingFile(@"E:\C#\Приват\RabbitMQ\Send\Logs\Log-{Date}.txt").WriteTo.ColoredConsole().CreateLogger();
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            logger.Debug("Created new factory {factory}", factory.HostName);
            using (var connection = factory.CreateConnection())
            {
                logger.Debug("Created connection {connection}", connection.ToString());
                using (var channel = connection.CreateModel())
                {
                    string queyeName = "first";
                    channel.QueueDeclare(queyeName, false, false, false, null);
                    logger.Debug("Created queye {queye}", queyeName);


                    var consumer = new EventingBasicConsumer(channel);
                    logger.Debug("Created new consumer {consumer}", consumer.ToString());
                    consumer.Received += (model, ea) =>
                    {
                        var data = ea.Body;

                        var message = Encoding.UTF8.GetString(data);
                        logger.Debug("Get messagge from ea.Body {message}", message);
                        System.Console.WriteLine(message);
                    };

                    channel.BasicConsume("first", true, consumer);
                    System.Console.WriteLine("Type [enter] to exit");
                    System.Console.ReadLine();
                    ;
                }
            }
        }
Exemple #4
0
        public Receiver()
        {
            ConnectionFactory factory = new ConnectionFactory();
            IConnection       conn    = factory.CreateConnection();
            IModel            channel = conn.CreateModel();

            channel.ExchangeDeclare("processing-limiter", ExchangeType.Fanout);
            channel.ExchangeDeclare("text-rank-tasks", ExchangeType.Direct);



            string queueName = channel.QueueDeclare().QueueName;

            channel.QueueBind(queueName, "processing-limiter", "");

            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                byte[] body    = ea.Body;
                string message = Encoding.UTF8.GetString(body);

                string[] items = message.Split(':');


                if (items.Length == 3 && items[0] == "ProcessingAccepted" && items[2] == "true")
                {
                    channel.BasicPublish(
                        exchange: "text-rank-tasks",
                        routingKey: "text-rank-task",
                        basicProperties: null,
                        body: Encoding.UTF8.GetBytes("TextRankTask:" + items[1]));
                }
            };

            channel.BasicConsume(queueName, true, consumer);
        }
Exemple #5
0
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(
                        queue: "hello",
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null
                        );

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (sender, e) =>
                    {
                        var body   = e.Body;
                        var mesage = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", mesage);
                    };

                    channel.BasicConsume(
                        queue: "hello",
                        autoAck: true,
                        consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
        }
Exemple #6
0
        public void Subscribe()
        {
            try
            {
                connection = connf.CreateConnection();

                canal = connection.CreateModel();

                canal.QueueDeclare(
                    queue: config.Fila
                    , durable: true
                    , exclusive: false
                    , autoDelete: false
                    , arguments: null
                    );

                basicConsumer           = new EventingBasicConsumer(canal);
                basicConsumer.Received += (model, ea) =>
                {
                    var message = Encoding.UTF8.GetString(ea.Body);

                    //_DataConsumer(new Mensa(Encoding.UTF8.GetString(ea.Body)));
                    Mensagem mensagem = JsonConvert.DeserializeObject <Mensagem>(message);
                    _DataConsumer(mensagem);
                };

                canal.BasicConsume(config.Fila, true, basicConsumer);
                canal.CallbackException += canal_CallbackException;
            }
            catch (BrokerUnreachableException ex)
            {
            }
            catch
            {
                throw;
            }
        }
        public static void Show()
        {
            var factory = new ConnectionFactory();

            factory.HostName = "localhost"; //RabbitMQ服务在本地运行
            factory.UserName = "******";     //用户名
            factory.Password = "******";     //密码
            using (var connection = factory.CreateConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "DirectExchangeLogAllQueue", durable: true, exclusive: false, autoDelete: false, arguments: null);
                    channel.ExchangeDeclare(exchange: "DirectExChange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);
                    string[] logtypes = new string[] { "debug", "info", "warn", "error" };
                    foreach (string logtype in logtypes)
                    {
                        channel.QueueBind(queue: "DirectExchangeLogAllQueue",
                                          exchange: "DirectExChange",
                                          routingKey: logtype);
                    }

                    //消费队列中的所有消息;
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body    = ea.Body;
                        var message = Encoding.UTF8.GetString(body.ToArray());
                        Console.WriteLine($"【{message}】,写入文本~~");
                    };
                    //处理消息
                    channel.BasicConsume(queue: "DirectExchangeLogAllQueue",
                                         autoAck: true,
                                         consumer: consumer);
                    Console.ReadLine();
                }
            }
        }
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory();

            factory.Uri = new Uri("amqp://*****:*****@localhost:5672");
            var connection = factory.CreateConnection();
            var channel    = connection.CreateModel();

            channel.QueueDeclare("emailServiceQueue", true, false, false);

            var headers = new Dictionary <string, object>
            {
                { "subject", "tour" },
                { "action", "booked" },
                { "x-match", "all" }
            };

            channel.QueueBind("emailServiceQueue", "webappExchange", "", headers);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (sender, eventArgs) =>
            {
                var msg     = Encoding.UTF8.GetString(eventArgs.Body);
                var subject = Encoding.UTF8.GetString(eventArgs.BasicProperties.Headers["subject"] as byte[]);
                var action  = Encoding.UTF8.GetString(eventArgs.BasicProperties.Headers["action"] as byte[]);

                Console.WriteLine($"{subject}.{action}: {msg}");
            };

            channel.BasicConsume("emailServiceQueue", true, consumer);

            Console.ReadLine();

            channel.Close();
            connection.Close();
        }
Exemple #9
0
        public string ConsumeMessage()
        {
            //Apparently, this should not be async.
            //The async bit (with Task.Run{ Task.ReturnFrom() })
            //should be in the UI thread only.
            var factory = new ConnectionFactory()
            {
                HostName = HostName
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(
                        queue: QueueName,
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

                    var    consumer = new EventingBasicConsumer(channel);
                    string message  = null;
                    consumer.Received += (model, e) =>
                    {
                        message = Encoding.UTF8.GetString(e.Body);
                        _autoResetEvent.Set();
                    }; //the callback method, once message finally received.

                    channel.BasicConsume(
                        queue: QueueName,
                        autoAck: true,
                        consumer: consumer);

                    _autoResetEvent.WaitOne(); //Wait until message received.
                    return(message);
                }
        }
Exemple #10
0
        public void Initialize()
        {
            persistance = new Persistance();
            ConnectionFactory factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using IConnection connection = factory.CreateConnection();
            using IModel channel         = connection.CreateModel();
            channel.QueueDeclare(queue: JobStatusQueue.QueueName,
                                 durable: JobStatusQueue.Durable,
                                 exclusive: JobStatusQueue.Exclusive,
                                 autoDelete: JobStatusQueue.AutoDelete,
                                 arguments: JobStatusQueue.Arguments);

            Console.WriteLine(" [*] Waiting for messages.");

            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, eventArgs) =>
            {
                byte[] body    = eventArgs.Body.ToArray();
                string message = Encoding.UTF8.GetString(body);
                Console.WriteLine("[x] Received {0}", message);
                SaveJobStatus(message);
            };

            channel.BasicConsume(
                queue: JobStatusQueue.QueueName,
                autoAck: true,
                consumer: consumer
                );

            Console.WriteLine(" Press [enter] to exit.");
            Console.ReadLine();
        }
        public RabbitEventSource(
            IModel channel,
            IEventSerializer eventSerializer,
            ILogger log,
            string exchangeName,
            string exchangeType,
            string routingKey)
        {
            Guard.DebugAssertArgumentNotNull(routingKey, nameof(routingKey));
            Guard.DebugAssertArgumentNotNull(exchangeName, nameof(exchangeName));
            Guard.DebugAssertArgumentNotNull(exchangeType, nameof(exchangeType));
            Guard.DebugAssertArgumentNotNull(eventSerializer, nameof(eventSerializer));
            Guard.DebugAssertArgumentNotNull(channel, nameof(channel));
            Guard.DebugAssertArgumentNotNull(log, nameof(log));

            channel.ExchangeDeclare(exchangeName, exchangeType);

            var queueName = $"{exchangeName}-{Guid.NewGuid()}";
            var queue     = channel.QueueDeclare(queueName);

            channel.QueueBind(queue.QueueName, exchangeName, routingKey);

            var consumer = new EventingBasicConsumer(channel);

            var messageSource = Observable.FromEventPattern <BasicDeliverEventArgs>(
                e => consumer.Received += e,
                e => consumer.Received -= e);

            _deserializedEvents = messageSource
                                  .Select(e => e.EventArgs.Body)
                                  .Select(eventSerializer.Deserialize)
                                  .Do(msg => log.Verbose("{ExchangeName}>>>{Event}", exchangeName, msg))
                                  .Publish();
            _eventsConnection = _deserializedEvents.Connect();

            channel.BasicConsume(queue.QueueName, true, consumer);
        }
Exemple #12
0
        private IModel CreateConsumerChannel(string queueName, bool bindConsumer)
        {
            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }

            var channel = _persistentConnection.CreateModel();

            channel.ExchangeDeclare(exchange: BROKER_NAME,
                                    type: "direct");

            channel.QueueDeclare(queueName, true, false, false, null);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += async(model, ea) =>
            {
                var eventName = ea.RoutingKey;
                await ProcessEvent(eventName, ea.Body, ea.BasicProperties);

                channel.BasicAck(ea.DeliveryTag, false);
            };
            if (bindConsumer)
            {
                channel.BasicConsume(queue: queueName,
                                     autoAck: false,
                                     consumer: consumer);
            }
            channel.CallbackException += (sender, ea) =>
            {
                var key = new Tuple <string, QueueConsumerMode>(queueName, QueueConsumerMode.Normal);
                _consumerChannels[key].Dispose();
                _consumerChannels[key] = CreateConsumerChannel(queueName, bindConsumer);
            };
            return(channel);
        }
Exemple #13
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            var factory = new ConnectionFactory
            {
                UserName    = "******",
                Password    = "******",
                VirtualHost = "/",
                HostName    = "localhost",
                Port        = 5672
            };

            _conn = factory.CreateConnection();

            var channel = _conn.CreateModel();

            //channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body = ea.Body;

                // ... process the message
                var msg = Encoding.UTF8.GetString(body);
                Console.WriteLine(msg);

                //var s = msg.Split('-')[1].ToString();
                //Thread.Sleep(int.Parse(s) * 1000);

                //channel.BasicAck(ea.DeliveryTag, true);
            };

            var consumerTag = channel.BasicConsume(queue: "test.queue", autoAck: false, consumerTag: "consumer-test" + new Random().Next(1, 9), consumer: consumer);

            return(Task.CompletedTask);
        }
        public NotificationEventsManager(IServiceScopeFactory serviceScopeFactory,
                                         [FromServices] RabbitMQConfigurations rabbitMQConfiguration,
                                         ILogService logger,
                                         Notifications notificationHub)
        {
            Console.WriteLine($"{nameof(NotificationEventsManager)} initialized");
            _logger = logger;

            try
            {
                _serviceScopeFactory    = serviceScopeFactory;
                notificationHubInstance = notificationHub;

                _factory = new ConnectionFactory()
                {
                    HostName = rabbitMQConfiguration.HostName,
                    Port     = rabbitMQConfiguration.Port,
                    UserName = rabbitMQConfiguration.UserName,
                    Password = rabbitMQConfiguration.Password
                };

                _connection = _factory.CreateConnection();
                _channel    = _connection.CreateModel();

                _channel.QueueDeclare(queue: ApplicationEvents.pushNotificationQueue, durable: true, exclusive: false, autoDelete: false, arguments: null);


                var consumer = new EventingBasicConsumer(_channel);
                consumer.Received += Notification_Received;
                _channel.BasicConsume(ApplicationEvents.pushNotificationQueue, true, consumer);
            }
            catch (Exception ex)
            {
                _logger.Log(ex.Message, Microsoft.Extensions.Logging.LogLevel.Error, System.Net.HttpStatusCode.InternalServerError, nameof(NotificationEventsManager));
                throw ex;
            }
        }
Exemple #15
0
        public static void Main()
        {
            var factory = new ConnectionFactory();

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "hello",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += async(model, ea) =>
                    {
                        var body    = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                        await Task.Yield();
                    };
                    channel.BasicConsume(queue: "hello",
                                         autoAck: true,
                                         consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();

                    var cts = new CancellationTokenSource();

                    Task <int> t = new Task <int>(() => {
                        Thread.Sleep(5000);
                        return(1);
                    }, cts.Token);
                    t.Start();
                }
        }
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    //Trigger The SignalR
                    Connect().Wait();
                    channel.QueueDeclare(queue: "Bitcoin",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var  body = ea.Body;
                        var  data = Encoding.UTF8.GetString(body);
                        Stoc stoc = JsonConvert.DeserializeObject <Stoc>(data);
                        Console.WriteLine(" [x] Received {0}", stoc.Name + " : " + stoc.Value);

                        connectionSignalR.InvokeAsync("PushNotify", stoc);
                        //-------------------------
                    };
                    channel.BasicConsume(queue: "Bitcoin",
                                         autoAck: true,
                                         consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
        }
        public static void ConsumeFromDefaultExchange()
        {
            Console.WriteLine("---------------ConsumeFromDefaultExchange!---------------");
            try
            {
                var factory = new ConnectionFactory();
                factory.HostName = "localhost"; //RabbitMQ服务在本地运行
                factory.UserName = "******";     //用户名
                factory.Password = "******";     //密码

                using (var connection = factory.CreateConnection())
                {
                    using (IModel channel = connection.CreateModel())
                    {
                        //prefetchSize:预读取的消息内容大小上限(包含),可以简单理解为消息有效载荷字节数组的最大长度限制,0表示无上限。
                        //prefetchCount:预读取的消息数量上限,0表示无上限。
                        //global:false表示prefetchCount单独应用于信道上的每个新消费者,true表示prefetchCount在同一个信道上的消费者共享。
                        channel.BasicQos(0, 1, false);
                        //declare consumer
                        var consumer = new EventingBasicConsumer(channel);
                        consumer.Received += Consumer_Received;

                        //binding consumer
                        channel.BasicConsume("RabbitMqDemo.BasicPublish_test1", true, consumer);

                        //block thread
                        Console.WriteLine("press any key to exit.");
                        Console.ReadLine();
                        Console.WriteLine("exit.");
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        static void Main()
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using var connection = factory.CreateConnection();
            using var channel    = connection.CreateModel();
            channel.QueueDeclare(queue: "registerUserQueue",
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body.ToArray();
                var message = Encoding.UTF8.GetString(body);
                var user    = JsonSerializer.Deserialize <User>(message);

                Console.WriteLine($"User registered | " +
                                  $"Id:{user.Id} | " +
                                  $"Name:{user.Name} | " +
                                  $"Email:{user.Email} | " +
                                  $"Date created:{user.DateCreated} | " +
                                  $"Date updated:{user.DateUpdated}");
            };
            channel.BasicConsume(queue: "registerUserQueue",
                                 autoAck: false,
                                 consumer: consumer);

            Console.WriteLine("Press [enter] to exit.");
            Console.ReadLine();
        }
Exemple #19
0
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "exchange_kassa", type: "topic");

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

                    channel.QueueBind(queue: "queue_planning",
                                      exchange: "exchange_kassa",
                                      routingKey: "guest.checkIn");

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body    = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    };
                    channel.BasicConsume(queue: "queue_planning",
                                         autoAck: true,
                                         consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
        }
        public void Receive()
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "direct_logs",
                                            type: "direct");
                    var queueName = channel.QueueDeclare().QueueName;

                    channel.QueueBind(queue: queueName,
                                      exchange: "direct_logs",
                                      routingKey: "info");

                    Console.WriteLine(" [*] Waiting for messages.");

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body       = ea.Body;
                        var message    = Encoding.UTF8.GetString(body);
                        var routingKey = ea.RoutingKey;
                        Console.WriteLine(" [x] Received '{0}':'{1}'",
                                          routingKey, message);
                    };
                    channel.BasicConsume(queue: queueName,
                                         autoAck: true,
                                         consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
        }
        /// <summary>
        /// 接收消息(订阅广播)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queue">队列名称</param>
        /// <param name="isProperties"></param>
        /// <param name="handler">消费处理</param>
        /// <param name="isDeadLetter"></param>
        public void SubscribeBroadcast <T>(string queue, string exchange, bool isProperties, Action <T> handler, bool isDeadLetter) where T : class
        {
            //队列声明
            var channel = GetModel(queue, exchange, "");

            channel.ExchangeDeclare(exchange: exchange, type: ExchangeType.Fanout);
            //默认队列,用于广播
            var queueName = channel.QueueDeclare().QueueName;

            channel.QueueBind(queue: queueName, exchange: exchange, routingKey: "");

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body   = ea.Body;
                var msgStr = SerializeExtension.DeserializeUtf8(body);
                var msg    = msgStr.FromJson <T>();
                try
                {
                    handler(msg);
                }
                catch (Exception ex)
                {
                    ex.GetInnestException().WriteToFile("队列接收消息", "RabbitMq");
                    if (!isDeadLetter)
                    {
                        PublishToDead <DeadLetterQueue>(queue, msgStr, ex);
                    }
                }
                finally
                {
                    channel.BasicAck(ea.DeliveryTag, false);
                }
            };
            channel.BasicConsume(queueName, false, consumer);
        }
Exemple #22
0
        /// <summary>
        /// 为指定消息队列创建生产者
        /// </summary>
        /// <param name="channelGuid"></param>
        public bool Consume(string channelName, string queueName)
        {
            ConnectChannel temp = null;

            lock (listAccessLock)
            {
                if (channelList != null)
                {
                    temp = channelList.Where(p => p != null && p.ChannelName == channelName).FirstOrDefault();
                }
            }
            if (temp == null)
            {
                LogHelper.LogError($"Channel {channelName} Not Exist");
                return(false);
            }
            if (!temp.QueueNames.Contains(queueName))
            {
                LogHelper.LogError($"Queue {queueName} Not Exist");
                return(false);
            }
            try
            {
                lock (temp.AccessLock)
                {
                    var consumer = new EventingBasicConsumer(temp.ConsumerChannel);
                    consumer.Received += Consumer_MultiReceived;
                    temp.ConsumerChannel.BasicConsume(queueName, false, temp.ChannelGuid, consumer);
                }
                return(true);
            }
            catch (Exception e)
            {
                LogHelper.LogError(e.Message);
                return(false);
            }
        }
Exemple #23
0
        public ConfigurationListener(string appName)
        {
            this._appName = appName.ToLower();
            this._configurationSettingList = new List <ConfigurationSetting>();

            string hostName = Environment.GetEnvironmentVariable("RabbitMq/Host");
            string userName = Environment.GetEnvironmentVariable("RabbitMq/Username");
            string passWord = Environment.GetEnvironmentVariable("RabbitMq/Password");

            if (hostName == null)
            {
                _factory = new ConnectionFactory()
                {
                    HostName = "localhost"
                };
            }
            else
            {
                _factory = new ConnectionFactory()
                {
                    HostName = hostName,
                    UserName = userName,
                    Password = passWord
                };
            }

            _connection = _factory.CreateConnection();
            _channel    = _connection.CreateModel();
            _channel.ExchangeDeclare(exchange: _cnstExchangeName, type: _cnstExchangeType);
            var queueName = _channel.QueueDeclare().QueueName;

            _channel.QueueBind(queue: queueName, exchange: _cnstExchangeName, routingKey: _appName);
            _consumer = new EventingBasicConsumer(_channel);
            //registering to receive event
            _consumer.Received += ReceiveHandler;
            _channel.BasicConsume(queue: queueName, autoAck: true, consumer: _consumer);
        }
        /// <summary>
        /// Consulta la información de RabbitMQ
        /// </summary>
        static void ConsultarRabbitMQ()
        {
            //Definir las colas por cada tipo de prueba (check)
            //Definir el Exhange que hara las veces de Dispatcher (check)

            //Establecer los bindings para crear los routingKey (check)
            //Primero crear el registro en la base de datos. (check)
            //Enviar mensaje a la cola por cada tipo de prueba (check)


            //Crear workers capaces de leer mensajes encolados
            //Consultar información complementaria de la estrategia al worker
            //ejecutar el SCRIPT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



            var conn = ConnectionRabbitMQ();

            //asumiendo que tenemos la cola, exhange y el routing creado capturamos un mensaje

            var    channel  = conn.CreateModel();
            string mensajes = string.Empty;
            var    consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body = ea.Body;
                mensajes = Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", mensajes);
            };



            channel.BasicConsume(queue: "QueueTest2",
                                 autoAck: true,
                                 consumer: consumer);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Queye Name -- " + args[0]);

            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };
            var connection = factory.CreateConnection();
            var channel    = connection.CreateModel();

            channel.ExchangeDeclare(exchange: "fanout-exch",
                                    type: ExchangeType.Fanout,
                                    durable: false,
                                    autoDelete: false,
                                    arguments: null);

            channel.QueueDeclare(args[0], durable: false, exclusive: false, autoDelete: false);

            channel.QueueBind(args[0], "fanout-exch", "", null);

            var Consumer = new EventingBasicConsumer(channel);

            Consumer.Received += (ch, ea) =>
            {
                var message = Encoding.UTF8.GetString(ea.Body);
                Console.WriteLine($"Message Received:{message}");
            };

            channel.BasicConsume(args[0], true, Consumer);

            Console.WriteLine("Waiting for Messages... Press ENTER to Exit");
            Console.ReadLine();

            channel.Dispose();
            connection.Dispose();
        }
        public static void Main()
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false,
                                         arguments: null);

                    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

                    Console.WriteLine(" [*] Waiting for messages.");

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body    = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);

                        int dots = message.Split('.').Length - 1;
                        Thread.Sleep(dots * 1000);

                        Console.WriteLine(" [x] Done");

                        channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                    };
                    channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
        }
Exemple #27
0
        static void Main(string[] args)
        {
            Console.WriteLine("CONSUMER APP - 3 !");
            var factory = new ConnectionFactory {
                HostName = "localhost"
            };

            // create connection
            _connection = factory.CreateConnection();

            // create channel
            _channel = _connection.CreateModel();

            _channel.ExchangeDeclare("Booking.Orders", ExchangeType.Topic, true);
            _channel.QueueDeclare("Booking.Cancelled", true, false, false, null);
            _channel.QueueBind("Booking.Cancelled", "Booking.Orders", "Booking.Cancelled.*", null);
            _channel.BasicQos(0, 1, false);



            var consumer = new EventingBasicConsumer(_channel);

            consumer.Received += (ch, ea) =>
            {
                // received message
                var content = System.Text.Encoding.UTF8.GetString(ea.Body);

                //When JSON message
                //var content = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(ea.Body));

                // handle the received message
                Console.WriteLine("CONSUMER APP - 3  === " + content.ToString());
                _channel.BasicAck(ea.DeliveryTag, false);
            };

            _channel.BasicConsume("Booking.Cancelled", false, consumer);
        }
Exemple #28
0
        public void ReceiveFirstAndSecond()
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
            {
                // Declaração da fila e envio de mensagem
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(
                        queue: "MessageService",
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

                    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
                    Console.WriteLine(" [*] Waiting for messages.");

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body    = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(message);
                        Thread.Sleep(10 * 1000);
                    };

                    channel.BasicConsume(queue: "MessageService", autoAck: true, consumer: consumer);
                    Console.WriteLine("Consumer Funcionando");
                    Console.ReadLine();
                }
            }
        }
Exemple #29
0
        public ClientsAPI()
        {
            ConnectionFactory factory = new ConnectionFactory()
            {
                UserName = "******", Password = "******", HostName = ""
            };

            connection     = factory.CreateConnection();
            channel        = connection.CreateModel();
            replyQueueName = channel.QueueDeclare().QueueName;
            consumer       = new EventingBasicConsumer(channel);

            props         = channel.CreateBasicProperties();
            props.ReplyTo = replyQueueName;
            channel.BasicConsume(queue: replyQueueName, autoAck: true, consumer: consumer);
            consumer.Received += (model, ea) =>
            {
                Object obtained = ea.Body.Deserializer();
                switch (obtained)
                {
                case JsonClass j:
                    JsonResponse(System.Text.Encoding.Default.GetString(j.JsonByteArray));
                    break;

                case ImageClass i:
                    ImageResponse(i.ImageByteArray);
                    break;

                case FileClass f:
                    FileResponse(f.FileByteArray);
                    break;

                default:
                    throw new Exception("Type if different! Server sent unknown type!");
                }
            };
        }
Exemple #30
0
        public static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using var connection = factory.CreateConnection();
            using var channel    = connection.CreateModel();
            {
                channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout);

                var queueName = channel.QueueDeclare().QueueName;
                channel.QueueBind(
                    queue: queueName,
                    exchange: "logs",
                    routingKey: "");

                Console.WriteLine(" [*] Waiting for logs.");

                var consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    var body    = ea.Body.ToArray();
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine($" [x] {message}");
                };

                channel.BasicConsume(
                    queue: queueName,
                    autoAck: true,
                    consumer: consumer);

                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }
        }
Exemple #31
0
 public static int Main(string[] args)
 {
     Hashtable cnxSettings = new Hashtable();
     if (AppConfig.Load(ref cnxSettings) > 0) {
         Console.WriteLine( "error occurred while parsing .exe.config.");
     }
     string queueName = cnxSettings["AMQ_QUEUE"].ToString();
     //ServicePointManager.ServerCertificateValidationCallback = ValidateSslCerts;
     try {
         Console.WriteLine("connecting to Active MQ queue {4} over tcp/{1} on {0} with {2}/{3} credentials",
                       cnxSettings["AMQ_HOST"].ToString(), cnxSettings["AMQ_PORT"].ToString(), cnxSettings["AMQ_USER"].ToString(),
                       cnxSettings["AMQ_PASS"].ToString(), cnxSettings["AMQ_QUEUE"].ToString() );
         ConnectionFactory factory = new ConnectionFactory();
         factory.HostName = cnxSettings["AMQ_HOST"].ToString();
         factory.UserName = cnxSettings["AMQ_USER"].ToString();
         factory.Password = cnxSettings["AMQ_PASS"].ToString();
         factory.VirtualHost = cnxSettings["AMQ_VHOST"].ToString();
         factory.Port = Convert.ToInt32(cnxSettings["AMQ_PORT"]);
         SslOption sslopts = new SslOption();
         sslopts.AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch |
                                          SslPolicyErrors.RemoteCertificateChainErrors |
                                          SslPolicyErrors.RemoteCertificateNotAvailable;
         sslopts.Enabled = true;
         sslopts.Version =  System.Security.Authentication.SslProtocols.Tls12;
         sslopts.ServerName = cnxSettings["AMQ_HOSTNAME"].ToString();
         sslopts.CertificateValidationCallback = ValidateSslCerts;
         factory.Ssl = sslopts;
         // AMQP 0-9-1 Protocol Spec: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf
         //IProtocol protocol = Protocols.DefaultProtocol;
         IProtocol protocol = Protocols.AMQP_0_9_1;
         IConnection conn = factory.CreateConnection();
         IModel channel = conn.CreateModel();
         channel.QueueDeclarePassive(queueName);
         Console.WriteLine("connected ...");
         var consumer = new EventingBasicConsumer(channel);
         consumer.Received += (model, ea) => {
             var body = ea.Body;
             var message = Encoding.UTF8.GetString(body);
             Console.WriteLine(" * rx: {0}", message);
         };
         // Disable AutoAcknowledgements. This way a broker will keep items in the queue
         channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer);
         Console.WriteLine("Press Enter to terminate this channel.");
         Console.ReadLine();
         conn.Close(200, "Closing the connection");
         Console.WriteLine("closing the connection ...");
     } catch(Exception e) {
         Console.WriteLine(e.Source.ToString() + ": " + e.Message.ToString());
         return 1;
     }
     return 0;
 }