2012-07-10 4 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 consumer = session.CreateConsumer (대상, "REFCODE> 200") 또는 필요한 것을 찾는 것에 따라 유사하게 만듭니다. 그런 다음 consumer.receive (timeout_val)를 호출하십시오. 큐의 모든 선택된 메시지를 꺼낼 때까지. Info about AMQ selectors