2009-07-09 5 views
0

私はSpring.NETを使用してActiveMQに接続し、かなり簡単なpubサブルーティングを実行しています。私のセレクターがCar = 'Honda'のような単純な式であるのに、Car = 'Honda'やMake = 'Pilot'のような複合式を試しても、私のサブスクリプションには一切のマッチはありません。複合ステートメントを持つSpring.Netメッセージセレクタは動作していないようです

サブスクリプションを生成するコードは次のとおりです。誰かが私が何か間違っているかもしれないと思っていますか?

public bool AddSubscription(string topicName, Dictionary<string,string> selectorList, GDException exp) 
     { 
      try 
      { 
       ActiveMQTopic topic = new ActiveMQTopic(topicName); 
       string selectorString = ""; 

       if (selectorList.Keys.Count == 0) 
       { 
        // Select all items for this topic 
        selectorString = "2>1"; 
       } 
       else 
       { 
        foreach (string key in selectorList.Keys) 
        { 
         selectorString += key + " = '" + selectorList[key] + "'" + " AND "; 
        } 
        selectorString = selectorString.Remove(selectorString.Length - 5, 5); 
       } 

       IMessageConsumer consumer = this._subSession.CreateConsumer(topic, selectorString, false); 
       if (consumer != null) 
       { 
        _consumers.Add(consumer); 
        consumer.Listener += new MessageListener(HandleRecieveMessage); 
        return true; 
       } 
       else 
       { 
        exp.SetValues("Error adding subscription, null consumer returned"); 
        return false; 
       } 
      } 
      catch (Exception ex) 
      { 
       exp.SetValues(ex); 
       return false; 
      } 
     } 

し、コード

が私には十分

public void SendMessage(GDPubSubMessage messageToSend) 
     { 
      if (!this.isDisposed) 
      { 
       if (_producers.ContainsKey(messageToSend.Topic)) 
       { 
        IBytesMessage bytesMessage = this._pubSession.CreateBytesMessage(messageToSend.Payload); 
        foreach (string key in messageToSend.MessageProperties.Keys) 
        { 
         bytesMessage.Properties.SetString(key, messageToSend.MessageProperties[key]); 
        } 

        _producers[messageToSend.Topic].Send(bytesMessage, false, (byte)255, TimeSpan.FromSeconds(1)); 
       } 
       else 
       { 
        ActiveMQTopic topic = new ActiveMQTopic(messageToSend.Topic); 
        _producers.Add(messageToSend.Topic, this._pubSession.CreateProducer(topic)); 
        IBytesMessage bytesMessage = this._pubSession.CreateBytesMessage(messageToSend.Payload); 
        foreach (string key in messageToSend.MessageProperties.Keys) 
        { 
         bytesMessage.Properties.SetString(key, messageToSend.MessageProperties[key]); 
        } 

        _producers[messageToSend.Topic].Send(bytesMessage); 
       } 
      } 
      else 
      { 
       throw new ObjectDisposedException(this.GetType().FullName); 
      } 
     } 

07/102009を簡単なようでメッセージを送信する:

が更新OK、問題を発見した

bytesMessage.Properties.SetString(key, messageToSend.MessageProperties[key]); 

このジャストは単一のプロパティを設定するので、私のメッセージは単一のプロパティでタグ付けされているだけなので、コンボサブscriptionは決してヒットしません。誰もがプロパティを追加する方法を知っていますか? bytesMessage.PropertiesにはAddメソッドがあると思うでしょうが、そうではありません。

答えて

0

は[OK]を、ので、ここで(それは今までに他の誰かに起こるはず)

Spring.NETは、追加のプロパティを処理するためにApache.NMS.ActiveMQ.MessagePropertyHelperクラスを使用して起こってしまったものです。

私には不明な点がありますが、そこにはいくつかの反射が進行中です。私の小さなアプリケーションをテストしているうちに、プロパティ名 "MessageType"を入力するのがうんざりしているので、 "Type"に短縮しました。

どこが間違っているのか分かりませんが、タイプは予約語であり、うまく動作せず、例外をスローしません。

関連する問題