【发布时间】:2019-07-11 18:42:10
【问题描述】:
在将 ReceiveNoWait 与 Apache.NMS 和 ActiveMQ 一起使用时遇到问题,非常简单的场景:
private static void Send(string text)
{
var factory = new ConnectionFactory("tcp://localhost:61616/");
using (var connection = factory.CreateConnection())
{
connection.Start();
var session = connection.CreateSession();
var queue = session.GetQueue("test");
var producer = session.CreateProducer(queue);
producer.Send(producer.CreateTextMessage(text));
}
}
private static string Receive()
{
var factory = new ConnectionFactory("tcp://localhost:61616/");
using (var connection = factory.CreateConnection())
{
connection.Start();
var session = connection.CreateSession();
var queue = session.GetQueue("test");
var consumer = session.CreateConsumer(queue);
var message = (ITextMessage)consumer.ReceiveNoWait();
return message == null ? null : message.Text;
}
}
static void Main(string[] args)
{
for (var i = 0; i < 100; i++)
{
Send(i.ToString());
}
while (true)
{
Console.WriteLine(Receive() ?? "(null)");
}
}
解释:我向队列发送了 100 条短信,我将使用 while 循环一一接收并打印这些消息。但是上面的代码总是打印(null) - 我可以从管理控制台找到队列中的消息。
怎么了?
【问题讨论】:
-
您找到答案了吗?我也有同样的问题。
标签: activemq