示例#1
0
 public static bool Push(MQMessage message)
 {
     try
     {
         using (var channel = MQConnection.CreateModel())
         {
             channel.QueueDeclare(queue: MQQueueName,
                                  durable: true,
                                  exclusive: false,
                                  autoDelete: false,
                                  arguments: null);
             var properties = channel.CreateBasicProperties();
             properties.Persistent = true;
             //---------------------------------
             channel.BasicPublish(exchange: "",
                                  routingKey: MQQueueName,
                                  basicProperties: properties,
                                  body: message.ObjectToByteArray());
             //--------------------
             return(true);
         }
     }
     catch (Exception ex)
     {
         log.Error(ex);
         return(false);
     }
 }
示例#2
0
        public static MQMessage Pull()
        {
            //var factory = new ConnectionFactory() { HostName = MQHostName, UserName = MQUserName, Password = MQPassword };
            //using (var connection = factory.CreateConnection())

            try
            {
                using (var channel = MQConnection.CreateModel())
                {
                    channel.QueueDeclare(queue: MQQueueName,
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
                    //var properties = channel.CreateBasicProperties();
                    //properties.Persistent = true;
                    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
                    BasicGetResult result = channel.BasicGet(MQQueueName, false);
                    if (result != null)
                    {
                        MQMessage model = ByteArrayToObject <MQMessage>(result.Body);
                        channel.BasicAck(result.DeliveryTag, false);
                        return(model);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(null);
        }
示例#3
0
        public static bool Consumer(Func <MQMessage, bool> excuteMessage)
        {
            try
            {
                using (var channel = MQConnection.CreateModel())
                {
                    channel.QueueDeclare(queue: MQQueueName,
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
                    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (ch, ea) =>
                    {
                        var body = ea.Body;
                        // ... process the message
                        MQMessage msg = ByteArrayToObject <MQMessage>(body);
                        if (excuteMessage(msg))
                        {
                            channel.BasicAck(ea.DeliveryTag, false);
                        }
                    };
                    String consumerTag = channel.BasicConsume(MQQueueName, false, consumer);
                    return(true);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(false);
        }
示例#4
0
 public static bool QueueEmpty()
 {
     using (var channel = MQConnection.CreateModel())
     {
         var count = channel.MessageCount(MQQueueName);
         if (count == 0)
         {
             return(true);
         }
     }
     return(false);
 }
示例#5
0
        public static bool Pull(Func <MQMessage, bool> excuteMessage)
        {
            try
            {
                using (var channel = MQConnection.CreateModel())
                {
                    channel.QueueDeclare(queue: MQQueueName,
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
                    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

                    BasicGetResult result = channel.BasicGet(MQQueueName, false);
                    if (result != null)
                    {
                        MQMessage msg = ByteArrayToObject <MQMessage>(result.Body);
                        if (excuteMessage(msg))
                        {
                            // đánh dấu đã đọc msg này
                            channel.BasicAck(result.DeliveryTag, false);
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(false);
        }