2013-12-24 2 views
0

Я новичок в activemq. T хочу задать вопрос по темам Activemq. Мне удается получить сообщение из очереди. Также я могу отправить сообщение в тему/Очередь, но я не могу получить сообщение из темы.Невозможно использовать сообщение из темы в 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 имеет сообщений. Как я могу использовать сообщение темы?

ответ

0

Я был настолько глуп в отношении фразы «используя». Я использую «используя» открытое соединение и сеанс. когда код кода был исключен, соединение/сеанс исчезает. Теперь я не использую «использование» блока для соединения cerate. как обычный код. Оно работает. также я создаю файл «Global.asax». Программа может прослушивать тему после запуска. В то же время я пишу функцию для проверки соединения. Я тестировал. Когда сообщение отправлено на эту тему, функция Onessage() будет выведена.

просто решите мою проблему. Возможно, вам лучше ответить. Спасибо Тиму.

0

Сообщения должны были быть отправлены после создания потребителя темы. Тема - это огонь и забыть, если нет потребителей, тогда сообщение отбрасывается. Любой потребитель, который приходит в Интернет, будет получать только сообщение, отправленное после этого времени, если оно не является потребителем надежной темы или потребителем очереди.

В случае длительного потребителя вы должны создать экземпляр, чтобы была запись подписки до того, как это сообщение было отправлено в тему. Поэтому я бы предположил, что ваша проблема заключается в том, что вы не подписали этого пользователя раньше, и поэтому Брокер не хранил никаких сообщений для него.

+0

У меня есть немного. Сначала мне нужно создать прочного consuemer для темы. Затем отправьте сообщение на тему. Сообщения будут получены прочным потребителем, не зависимым от онлайн или офлайн? Я также хочу задать разницу между методом «Receive()» и «consumer.Listener». – Yolanda

+0

Я тестирую два метода. Программа читает только одно сообщение из очереди или темы. Затем пропустите программу. Абоненты прочной темы не могут получать сообщение в автономном режиме. Только получать сообщение в режиме онлайн (только одно сообщение). Я плохо разбираюсь в английском. Я стараюсь объяснить свой вопрос и понять ваш ответ. Большое спасибо. – Yolanda

Смежные вопросы