2016-11-10 2 views
0

//이 (나는 그것의 잘

공공 무효 sendMessage 첨부를 작업 서버로 메시지를 보내고 곳에서 메시지를 보낼 것입니다 com.google.protobuf.Message 차단됩니다 sendMessage 첨부) {

try { 
    createJmsTemplate(); 
    createJmsTemplateReciever(); 
    JmsMessageCreator jmsMessageCreator = new JmsMessageCreator() { 
    @Override 
    public Message createMessage(Session session) throws JMSException { 
     BytesMessage msg = session.createBytesMessage(); 
     msg.writeBytes(sendmessage.toByteArray()); 
     return msg; 
    } 
    }; 

    MessageCreator messageCreator = new MessageCreator() { 
    public Message createMessage(Session session) throws JMSException { 
     Message msg = jmsMessageCreator.createMessage(session); 
     msg.setJMSCorrelationID("2708"); 
     return msg; 
    } 
    }; 

    jmsTemplate.send(messageCreator); 
    System.out.println("Message sent... "); 

} catch (Exception e) { 
    e.printStackTrace(); 
    System.exit(0); 
} 

}

//하지만이 메소드를 호출하고 때, 그것을 차단됩니다 전화를받을 ...

절에서 설명한 바와 같이

공공 무효 recieveMessage() { 시도 {

byteMessage = (BytesMessage) jmsTemplateReciever.receive(); 
    try { 
    if (byteMessage != null) { 
     byte[] byteArr = new byte[(int) byteMessage.getBodyLength()]; 
     for (int i = 0; i < (int) byteMessage.getBodyLength(); i++) { 
     byteArr[i] = byteMessage.readByte(); 
     String s = new String(byteArr); 
     System.out.println(s); 
     } 
     String s = new String(byteArr); 
     System.out.println(s); 

     byteMessage.acknowledge(); 
    } 

    } catch (JMSException e) { 

    } 

} catch (Exception e) { 
    e.printStackTrace(); 
    System.exit(0); 
} 

} }

답변

0

JMS 1.1의 9.2.2 사양, 메시지가 큐에 도착 무기한 receive() 호출 블록까지 . 따라서 응용 프로그램에서 호출이 차단되고 있습니다.

하나의 옵션은 대기 시간을 지정하는 것입니다. 예를 들어 receive(3000)은 3 초 동안 대기하고 3 초 이내에 메시지가 도착하지 않으면 나옵니다. JMS 구현자는 receive 메소드의 또 다른 형식을 제공 할 수 있습니다. 여기서 메소드는 큐에 메시지가없는 경우 즉시 리턴합니다.

다른 옵션은 JMS 1.1 사양 섹션 9.3.1에서 설명한대로 비동기 적으로 메시지를 수신하기 위해 메시지 수신기를 사용하는 것입니다. 메시지가 큐에 도착할 때마다 JMS 공급자가 응용 프로그램에 알림을받습니다.