-1

我在activemq中有问题。我想从我的 activemq 队列中收到一条特殊消息。我有超过 300 条消息,我想要其中一条消息。我用多选组合框解决了这个问题。在这个框中,我有我需要的所有属性的所有消息。

当我点击 247 项目时,我想选择接收消息的项目,在他们之后我想发送消息,但首先我遇到了接收问题。

我不知道为什么它不起作用。也许有人有想法?

ErrorMessageProperty prop = new ErrorMessageProperty();
IMessage message = null;

try
{
    string MsgID = MSGID;
    string desinationque = sourceQueue;
    string selector = "ProducerId = '" + MsgID + "'";
    IDestination dest = MQSession.GetDestination(desinationque);
    Uri _activeMQURI = new Uri(conf.ActiveMqURL);
    MQConnectionFactory = new NMSConnectionFactory(_activeMQURI);

    using (MQConnection = MQConnectionFactory.CreateConnection(conf.ActiveMqUser, conf.ActiveMqPWD))
    using (MQSession = MQConnection.CreateSession(AcknowledgementMode.AutoAcknowledge))
    {
        try
        {
            MQConnection.Start();
        }
        catch (Exception ex)
        {
            myLogger.NLogger.Info("MQReceiveTextMessage Connection fehlgeschlagen: " + ex.Message);
        }

        using (IMessageConsumer consumer = this.MQSession.CreateConsumer(dest, selector,false))
        {
            if (shallwait)
            {
                try
                {
                    message = consumer.Receive();
                }
                catch (Exception ex)
                {
                    myLogger.NLogger.Error("Error in consumer Receive (MQReceiveTextMessage): Message" + message + " Fehler-Exception: " + ex.Message);
                }
            }
            else
            {
                message = consumer.Receive(TimeSpan.FromSeconds(1));
            }
        }
    }
}
catch (Exception ex)
{
    myLogger.NLogger.Error("Error in MQReceiveTextMessage: Parameter: sourceQueue: " + sourceQueue + " MSGID: " + MSGID + " Message: " + message + " Fehler-Exception: " + ex.Message);
}

return message;
}

ProducerID的是正确的。但为什么这不起作用?它停在这条线上

message = consumer.receive();

我不知道了

4

2 回答 2

0

我使用了 Apache.NMS 和 Apache.NMS.ActiveMQ (1.7.1.3924) 是否可以使用这个 api 而不是 jms?我从 1 周开始尝试这个,但选择器不起作用....也许其他人

于 2019-04-16T09:26:19.957 回答
0

使用 selector ProducerId = 'MsgIDValue',该操作consumer.receive()在队列中搜索具有自定义属性“ProducerId”的消息,该属性具有变量 MsgID 的值。如果未找到消息,消费者将等待新消息。

如果要搜索默认消息字段,则消息头字段引用仅限于 JMSDeliveryMode、JMSPriority、JMSMessageID、JMSTimestamp、JMSCorrelationID 和 JMSType。JMSMessageID、JMSCorrelationID 和 JMSType 值可能为 null,如果是,则被视为 NULL 值。

源消息选择器

于 2019-04-15T14:59:18.213 回答