ActiveMQ - 没有从 DurableConsumer 收到主题消息



我正在尝试显示来自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));
}

最新更新