我正在尝试显示来自ActiveMQ主题的消息。在 Web 控制台中,我看到主题中有许多消息排队,但运行以下代码不会返回任何内容:
IConnectionFactory factory = new ConnectionFactory(new Uri("tcp://localhost:61616?wireformat.version=2"));
using (IConnection connection = factory.CreateConnection())
{
connection.Start();
ISession session = connection.CreateSession();
ActiveMQTopic topic = new ActiveMQTopic("MARKETADAPTERS.ORDERBOOKSNAPSHOT");
consumer = session.CreateDurableConsumer(topic,"OBSnap",null, false);
message = (ActiveMQTextMessage)consumer.Receive(TimeSpan.FromSeconds(vTimeOutSecs));
}
任何提示将不胜感激。
为了使持久订阅接收脱机时发送的消息,必须先在代理上注册该订阅。 您可以通过创建一个实例来注册它,就像您在给定的代码中所做的那样,然后一旦它离线,通过调用 close() 等发送到它的主题的消息将被存储,以便它以后可以读取它们。 如果您尚未注册此使用者,则发送到主题的那些消息将被丢弃。
您还需要连接的唯一客户端 ID,以便每次重新连接时都可以重新订阅持久 Topic 使用者。
注册持久主题使用者:
IConnectionFactory factory = new ConnectionFactory(new Uri("tcp://localhost:61616?wireformat.version=2"));
using (IConnection connection = factory.CreateConnection())
{
connectio.ClientId = "MyClientId";
connection.Start();
ISession session = connection.CreateSession();
ActiveMQTopic topic = new ActiveMQTopic("MARKETADAPTERS.ORDERBOOKSNAPSHOT");
consumer = session.CreateDurableConsumer(topic,"OBSnap",null, false);
}
稍后使用消息:
IConnectionFactory factory = new ConnectionFactory(new Uri("tcp://localhost:61616?wireformat.version=2"));
using (IConnection connection = factory.CreateConnection())
{
connection.ClientId = "MyClientId";
connection.Start();
ISession session = connection.CreateSession();
ActiveMQTopic topic = new ActiveMQTopic("MARKETADAPTERS.ORDERBOOKSNAPSHOT");
consumer = session.CreateDurableConsumer(topic,"OBSnap",null, false);
message = (ActiveMQTextMessage)consumer.Receive(TimeSpan.FromSeconds(vTimeOutSecs));
}