안녕하세요, 대기열을 계속 수신하고 onMessage 함수를 통해 새 메시지를 전달해야하는 MQ 대기열의 수신기를 설정하려고합니다. 프로그램을 종료해서는 안됩니다. 다음은 내 프로그램 스 니펫입니다. MQQueueConnection.start에서 onMessage 함수에서 히트를 얻지 만 MQ에서 1 개의 메시지를 소비 한 후 프로그램이 중지됩니다. 나는 프로그램이 영원히 계속 실행되도록하고 onMessage 함수를 통해 대기열에 새 메시지를 전달하기를 원합니다. 내가 뭘 잘못하고 있는거야? spring jms 클래스를 사용하면 필요에 따라 작동하지만 여기서는 봄을 사용하고 싶지 않습니다.MQQueueConnection.start가 새 메시지를 지속적으로 수신하지 않습니다.
public class MyListener implements MessageListener {
@Override
public void onMessage(Message message)
{
try
{
handleMessage(message,session);
}
catch (Exception exx)
{
onHandleMessageException(message, exx);
}
}
}
public class TestListener
{
public static void main(String[] args) {
MyListener myListener = new MyListener();
MQQueueConnectionFactory connFactory = new MQQueueConnectionFactory();
//MyApplicationContext - custom class for loading MQ params
MyApplicationContext obj=MyApplicationContext.getInstance();
connFactory.setHostName(obj.getHost());
connFactory.setPort(obj.getPort());
connFactory.setQueueManager(obj.getQueueManagerName());
connFactory.setChannel(obj.getChannel());
connFactory.setTransportType(obj.getTransportType());
MQQueueConnection connection=(MQQueueConnection) connFactory.createQueueConnection(obj.getMqUser(), obj.getMqPWD()) ;
MQQueueSession session=(MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("TEST.QUEUE");
MQQueueReceiver qReceiver = (MQQueueReceiver) session.createReceiver(queue);
qReceiver.setMessageListener(myListener);
// expect to start a new thread, which will constantly listen for new messages
//on the queue and deliver it in onMessage function.
//instead after receiving one message in onMessage, program exits
connection.start();
}
}
util.Timer, executor, .... 합리적인 기간, 관리 가능하지만 끝없는 루프 생성, main의 모든 코드 행은 생성자에 있어야합니다. – mKorbel
main 함수에서 전체 코드를 반복적으로 실행하려면 시간제 노동자? 필요한 것을 성취 할 수있는 더 좋은 방법이 있습니까? – N3Xg3N
주 스레드가 메시지 수신기를 시작하는 것 외에 다른 작업을 수행하지 않으면 주 스레드는 자체적으로 Queue.Receive() 메서드를 호출하여 메시지를받을 수 있습니다. – Shashi