메시지 기반 EJB에 문제가 있습니다. MessageDrivenBean을 포함하고있는 웹 서비스와 EJB 애플리케이션이 너무 있습니다. 여기 을 내 코드는 다음과 같습니다 : JMS 및 MessageDriven EJB Bean
은 ObjectMessage에 사용하고 JMS I에 메시지를 보내려면 Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, 1);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage outMessage = session.createObjectMessage();
outMessage.setObject(((Serializable) operation));
LOGGER.debug("Sending message...");
messageProducer.send(outMessage);
LOGGER.debug("Sending message: done.");
messageProducer.close();
session.close();
connection.close();
나는뿐만 아니라이 메서드를 호출하고 내 웹 서비스 호출
. 이 메시지는 MDB에서 시작하여 처리를 시작합니다. MDB 코드는 다음과 같습니다.@MessageDriven(mappedName = "jms/cbsDestination", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class OperationsBackgroundService implements MessageListener {
//Some code....
public void onMessage(Message message) {
LOGGER.debug("Got message: " + message.toString());
if (message instanceof ObjectMessage) {
ObjectMessage objectMessage = (ObjectMessage) message;
Operation operation = null;
}
모두 괜찮습니다. 메시지가 표시되면 처리가 시작되고 예상대로 종료됩니다.
그러나 문제는 다음과 같습니다. MDB에 첫 번째 메시지를 보내면 처리가 시작되고 (확인), 첫 번째 메시지가 처리 될 때 두 번째 메시지를 내 MDB로 보내고 프로세스도 시작합니다. 엉덩이 나는 하나의 메시지를 보내고 하나가 처리중인 경우 다른 메시지는 첫 번째 메시지가 처리 될 때까지 대기한다는 것을 JMS가 특징으로한다는 것을 알고 있습니다. 아니면 여기에 뭔가 빠졌나요? 도와주세요. 어쩌면 내가 설정하는 것을 잊었던 속성이 있을까요?
감사 ID는 전진했습니다.
글래스 피쉬 2.1.1을 사용하고 있지만 MDB 당 하나의 소비자를 만드는 방법에 대한 정보는 찾을 수 없습니다. 누군가 날 보여줄 수 있을까요? 감사합니다. –
@PauliusMatulionis : [Message-Driven Bean 조정] (http://docs.oracle.com/cd/E18930_01/html/821-2431/abebw.html#abedi) - Glassfish 3, 그러나 그것은 당신에게 올바른 방향을 지적해야합니다. 힌트 : * 풀 크기 * –
정확히 한 번에 하나의 메시지 만 처리하려는 경우 MDB 풀을 단일 인스턴스 (이상한 사용 사례 일 수도 있지만 가능)로 제한해야합니다. – Kris