Проблема с потребителем. Прием MessageSelector - PullRequest
0 голосов
/ 15 апреля 2019

У меня проблема в 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();

Я не знаю больше

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Я использовал Apache.NMS и Apache.NMS.ActiveMQ (1.7.1.3924) возможно ли использовать этот API, чем jms?Я пробую это с 1 недели, и селектор не работает .... Может быть, кто-то другой

0 голосов
/ 15 апреля 2019

С помощью селектора ProducerId = 'MsgIDValue' операция consumer.receive() ищет сообщение в очереди с пользовательским свойством «ProducerId» со значением переменной MsgID. Если сообщение не найдено, потребитель ожидает новых сообщений.

Если вы хотите выполнить поиск поля сообщения по умолчанию, ссылки на поля заголовка сообщения ограничены JMSDeliveryMode, JMSPriority, JMSMessageID, JMSTimestamp, JMSCorrelationID и JMSType. Значения JMSMessageID, JMSCorrelationID и JMSType могут быть нулевыми и, если это так, рассматриваются как значение NULL.

Селекторы исходного сообщения

...