1

次のコードを使用して、削除せずにメッセージを受信します。ここで、フィルタリングを追加し、メッセージの一部を削除する必要があります。私の質問は、他のメッセージがキューに残っている間に特定のメッセージを削除する方法ですか?

    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));
            }
        }
    }
4

1 に答える 1

3

セレクターを使用して、これらのメッセージを取得します。

コンシューマーを作成するときは、探す必要があるものに応じて、IMessageConsumer Consumer = session.CreateConsumer(destination、 "REFCODE> 200")などで作成します。次に、consumer.receive(timeout_val);を呼び出すだけです。キューの選択したすべてのメッセージをプルするまで。 AMQセレクターに関する情報

于 2012-07-10T12:23:16.280 に答える