我设法弄清楚了,并认为我会在这里分享我的发现供其他人查看/评论。
首先我创建了一个 OperatorRequestObject 类:
public class OperatorRequestObject
{
string shortcode;
public string Shortcode {
get { return shortcode; }
set { shortcode = value; }
}
}
在创建要发送到队列的消息时,我使用了以下代码:
OperatorRequestObject OperatorRequestObject = new OperatorRequestObject();
OperatorRequestObject.Shortcode = tb_Request.Text.ToString();
IConnectionFactory factory = new NMSConnectionFactory("tcp://192.XXX.X.XXX:61616");
IConnection connection = factory.CreateConnection();
connection.Start();
ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IDestination QueueDestination = SessionUtil.GetDestination(session, "Command");
IMessageProducer messageProducer = session.CreateProducer(QueueDestination);
ITextMessage request = session.CreateTextMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": " + tb_Request.Text.Trim());
request.Properties.SetString("deviceID", "12345");
messageProducer.Send(request);
session.Close();
connection.Stop();
tb_Request.Text = "";
tb_Request.Focus();
行“request.Properties.SetString("deviceID", "12345");"是我添加选择器键/值对的地方,我用它来选择哪个消费者得到什么消息。
要根据“deviceID”的值检索消息,我使用以下代码:
string Selector = "deviceID = '12345'";
IConnectionFactory factory = new NMSConnectionFactory("tcp://192.XXX.X.XXX:61616");
IConnection connection = factory.CreateConnection();
connection.Start();
ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IDestination destination = SessionUtil.GetDestination(session, "Command");
IMessageConsumer messageConsumer = session.CreateConsumer(destination, Selector);
IMessage message = messageConsumer.Receive();
string NewCommand = "";
if (message != null) {
ITextMessage IText = message as ITextMessage;
if (IText != null) {
if (!string.IsNullOrEmpty(IText.Text)) {
NewCommand = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": " + IText.Text;
}
}
}
tb_Command.Text = tb_Command.Text + "\r\n" + NewCommand;
messageConsumer.Close();
messageConsumer.Dispose();
connection.Stop();
connection.Close();
connection.Dispose();
设置“string Selector = “deviceID = '12345'”(不要忘记'')意味着消费者只从队列中获取使用上面显示的选择器发送的消息。
请注意:上面的代码很可能不是“最佳实践”或尽可能快速和紧凑。这就是我设法让我的代码工作的方法。
希望这可以帮助遇到同样问题的人。
欢迎评论:-)