带有消息选择器的消费者不起作用

问题描述

我有一个简单的消费者:

            try
            {
                factory = new NMSConnectionFactory(Settings.Endpoint);

                connection = factory.CreateConnection(Settings.UserName,Settings.Password);
                connection.ClientId = Settings.Name;

                session = connection.CreateSession(AckNowledgementMode.AutoAckNowledge);
                destination = SessionUtil.GetDestination(session,Settings.QueueName,DestinationType.Queue);

                consumer = session.CreateConsumer(destination,"portCode = 'GB'",false);

                consumer.Listener += new MessageListener(OnMessage);         
            }
            catch
            {
                throw;
            }

当 portCode 字段等于“GB”时,我需要应用选择器来获取消息。 此队列接收许多消息。

该消息采用 JSON 格式,此消息的示例如下所示:

{
  "message": {
    "list": [
      {
    xxxxxxx
      }
    ]
  },"header": {
    "messageCode": "xxxxxx","portCode": "GB","sourceSystem": "origin","messageId": "ca0bf0e0-cefa-4f5a-a80a-b518e7d2f645","dateTimeMessage": "2021-04-22T07:12:48.000-0300","version": "1.0"
  }
}

但是,我没有使用指定的“GB”选择器接收消息。 定义选择器似乎很简单,但它对我不起作用。

谢谢。

解决方法

选择器处理消息的正文(即您的 JSON 数据)。它们只对消息的标题和属性起作用。