【问题标题】:Cant consume message from Topic in activemq无法在 activemq 中消费来自 Topic 的消息
【发布时间】:2013-12-24 02:47:50
【问题描述】:

我是activemq的新手。 T 想问一个关于 Activemq 主题的问题。我成功地从队列中获取消息。我也可以向主题/队列发送消息,但我无法从主题中获取消息。

我尝试过使用 Java 代码。结果是一样的。

以下是我的核心代码:

connection.ClientId = clientId;
connection.Start();
using (ISession session = connection.CreateSession())
{                  
    ITopic topic = new Apache.NMS.Commands.Topic(topicName);
    IDestination destination = SessionUtil.GetDestination(session, topicName, 
                                    DestinationType.Topic);

    using (IMessageConsumer consumer = **session.CreateDurableConsumer**(topic, "news", null, false))
    {
        **consumer.Listener += new MessageListener(consumer_Listener);**     
        //**IMessage iMsg = consumer.Receive();** 
        // if (iMsg != null)//{
        //    ITextMessage msg = (ITextMessage)iMsg;
        //    return msg.Text;         
        // }      
            //else
                //return iMsg;
    }
}

我也使用:IMessage iMsg = consumer.Receive(); IMsg 永远为空(topicname有消息。如何使用主题的消息?

【问题讨论】:

    标签: c# activemq message


    【解决方案1】:

    消息需要在主题消费者创建后发送。一个主题就是一劳永逸,如果没有消费者,则该消息将被丢弃。任何上线的消费者都只会收到在那之后发送的消息,除非它是持久主题消费者或队列消费者。

    在持久消费者的情况下,您必须创建它的一个实例,以便在将这些消息发送到主题之前有一个订阅记录。所以我猜你的问题是你之前没有订阅这个消费者,所以经纪人没有为它存储任何消息。

    【讨论】:

    • 我得到了一点。我需要首先为主题创建一个持久的消费者。然后向主题发送消息。消息将被持久消费者接收,无论在线还是离线?我也想问一下“Receive()”方法和consumer.Listener的区别。
    • 我测试了这两种方法。程序只从队列或主题中读取一条消息。然后跳过程序。持久主题订阅者无法接收离线消息。仅接收在线消息(仅接收一条消息)。我英语不好。我尽力解释我的问题并理解您的回复。非常感谢。
    【解决方案2】:

    我对“使用”这个短语非常愚蠢。因为我使用“使用”打开连接和会话。当代码块被执行时,连接/会话消失。现在我不使用“使用”块来建立连接。就像普通代码一样。有用。我也建立“Global.asax”文件。程序一旦启动就可以监听主题。同时,我写了一个函数来colse连接。我测试了。向主题发送消息后,将执行 Onessage() 函数。

    只要解决我的问题。也许你会有更好的答案。谢谢蒂姆。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 2014-12-14
      • 2015-11-25
      • 1970-01-01
      • 2022-01-23
      • 2013-08-13
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      相关资源
      最近更新 更多