私は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メソッドがあると思うでしょうが、そうではありません。