2012-07-10 492 views
1

我使用下面的代码来接收没有删除的消息。现在我需要添加一些过滤并删除一些消息。我的问题是如何删除特定的消息,而其他消息应该留在队列中?ActiveMQ删除特定消息

Uri connecturi = new Uri("activemq:tcp://model.net:61616"); 
    IConnectionFactory factory = new NMSConnectionFactory(connecturi); 
    List<ModelBuilderBase> result = new List<ModelBuilderBase>(); 
    using (IConnection connection = factory.CreateConnection()) 
    using (ISession session = connection.CreateSession()) 
    { 

     IDestination destination = SessionUtil.GetDestination(session, "queue://cidModelbuilderQ"); 
     using (IMessageConsumer consumer = session.CreateConsumer(destination)) 
     { 
      connection.Start(); 
      var q = session.GetQueue("cidModelbuilderQ"); 
      var b = session.CreateBrowser(q); 
      var msgs = b.GetEnumerator(); 
      while (msgs.MoveNext()) 
      { 
       ITextMessage message = msgs.Current as ITextMessage; 
       if (message.Properties[MANDATOR] == null || message.Properties[REFCODE] == null) 
        continue; 
       var mandator = message.Properties[MANDATOR].ToString(); 
       var refCode = message.Properties[REFCODE].ToString(); 
       result.Add(ModelBuilderFactory.Instance.GetInstance(refCode, mandator)); 
      } 
     } 
    } 

回答

3

使用选择器并获取这些消息。

当创建一个消费者,通过 IMessageConsumer消费= session.CreateConsumer创建它(目的地,“REFCODE> 200”) 或类似的取决于你需要寻找的东西。 然后,只需调用consumer.receive(timeout_val);直到你拉出队列中所有选定的消息。 Info about AMQ selectors