【问题标题】:ActiveMQ delete specific messageActiveMQ 删除特定消息
【发布时间】:2012-07-09 18:34:51
【问题描述】:

我使用以下代码在不删除的情况下接收消息。现在我需要添加一些过滤并删除一些消息。我的问题是如何删除特定消息而其他消息应保留在队列中?

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

【问题讨论】:

    标签: c# activemq


    【解决方案1】:

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

    创建消费者时,通过 IMessageConsumer 消费者 = session.CreateConsumer(destination,"REFCODE > 200") 或类似的取决于你需要寻找什么。 然后只需调用 consumer.receive(timeout_val);直到您拉出队列中所有选定的消息。 Info about AMQ selectors

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2014-09-17
      • 2021-04-02
      • 2013-09-30
      • 2011-12-25
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多