无法在activemq中使用Topic中的消息

时间:2013-12-24 02:47:50

标签: c# activemq message

我是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始终为null(topicname包含消息。我如何消费主题的消息?

2 个答案:

答案 0 :(得分:0)

在创建主题消费者之后,需要发送消息。如果没有消费者,那么主题就会被激发而忘记,然后该消息被丢弃。任何联机的消费者只会接收在此之后发送的消息,除非它是Durable主题消费者或Queue消费者。

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

答案 1 :(得分:0)

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

只是解决我的问题。可能你会有更好的回答。谢谢蒂姆。