저는 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를 간단한데 메시지를 보낼 :
확인 업데이트, 문제를 발견
bytesMessage.Properties.SetString(key, messageToSend.MessageProperties[key]);
이 정의는 단일 속성을 설정하므로 내 메시지는 단일 속성으로 태그가 지정되므로 콤보 하위 scription은 절대로 안타. 누구든지 더 많은 속성을 추가하는 방법을 알고 있습니까? bytesMessage.Properties에는 Add 메서드가 있다고 생각 하겠지만 그렇지 않습니다.