Как работает асинхронная JMS?Ниже приведен пример кода:
public class JmsAdapter implements MessageListener, ExceptionListener
{
private ConnectionFactory connFactory = null;
private Connection conn = null;
private Session session = null;
public void receiveMessages()
{
try
{
this.session = this.conn.createSession(true, Session.SESSION_TRANSACTED);
this.conn.setExceptionListener(this);
Destination destination = this.session.createQueue("SOME_QUEUE_NAME");
this.consumer = this.session.createConsumer(destination);
this.consumer.setMessageListener(this);
this.conn.start();
}
catch (JMSException e)
{
//Handle JMS Exceptions Here
}
}
@Override
public void onMessage(Message message)
{
try
{
//Do Message Processing Here
//Message sucessfully processed... Go ahead and commit the transaction.
this.session.commit();
}
catch(SomeApplicationException e)
{
//Message processing failed.
//Do whatever you need to do here for the exception.
//NOTE: You may need to check the redelivery count of this message first
//and just commit it after it fails a predefined number of times (Make sure you
//store it somewhere if you don't want to lose it). This way you're process isn't
//handling the same failed message over and over again.
this.session.rollback()
}
}
}
Но я новичок в Java и JMS.Я, вероятно, буду использовать сообщения в методе onMessage.Но я не знаю, как это работает точно.
Нужно ли добавить метод main в классе JmsAdapter?После добавления основного метода, мне нужно создать jar и затем запустить jar как «java -jar abc.jar»?
Любая помощь очень ценится.
ОБНОВЛЕНИЕ: Что я хочузнать, что если я добавлю метод main, я должен просто вызвать receiveMessages () в main?И потом, после запуска, продолжит ли слушатель бежать?И если есть сообщения, будет ли он извлекаться автоматически в методе onMessage?
Кроме того, если слушатель постоянно слушает, не требует ли он загрузки процессора ???В случае потоков, когда мы создаем поток и переводим его в спящий режим, загрузка ЦП равна нулю, как это работает в случае прослушивателя?
Примечание: у меня только сервер Tomcat, и я не будуиспользовать любой JMS-сервер.Я не уверен, что слушателю нужен какой-то конкретный jms-сервер, такой как JBoss?Но в любом случае, пожалуйста, предположите, что у меня не будет ничего, кроме кота.Спасибо!