我是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包含消息。我如何消费主题的消息?
答案 0 :(得分:0)
在创建主题消费者之后,需要发送消息。如果没有消费者,那么主题就会被激发而忘记,然后该消息被丢弃。任何联机的消费者只会接收在此之后发送的消息,除非它是Durable主题消费者或Queue消费者。
对于持久消费者,您必须创建一个实例,以便在将这些消息发送到主题之前有一个订阅记录。所以我猜你的问题是你以前没有订阅过这个消费者,因此Broker没有为它存储任何消息。
答案 1 :(得分:0)
我对“使用”一词非常愚蠢。因为我使用“使用”开放连接和会话。当代码块被执行时,连接/会话就消失了。现在我不使用“使用”块来限制连接。就像普通代码一样。有用。我也建立了“Global.asax”文件。一旦启动,该程序就可以监听主题。同时,我写了一个函数来收集连接。我测试了。一旦消息被发送到主题,Onessage()函数就会被激活。
只是解决我的问题。可能你会有更好的回答。谢谢蒂姆。