2012-07-26 5 views
0

스프링 2.5, Flex 3.5, BlazeDS 3 및 Java 6에서 Spring 3.1, Flex 4.5, BlazeDS 4 및 Java 7로 마이그레이션 한 후 문제가 발생합니다. 보내기 위해 ClientFeed를 선언했습니다. 플렉스 클라이언트에 일종의 "알람"메시지. 이러한 경보는 세 가지 방법으로 전송됩니다. 첫 번째 것은 SNMP 트랩을 통해 이루어지며, 스레드가 시작되고 트랩을 기다리는 중 하나가 수신되면 경보가 전송됩니다. 두 번째 방법은 폴링 메커니즘을 사용하여 웹 응용 프로그램의 시작 부분에서 스레드가 시작되고 일정 시간 후 경보를 폴링하여 클라이언트에 보냅니다. 세 번째 방법은 사용자의 명시적인 폴링 명령으로, 전용 서비스에서 특정 기능을 호출합니다. 이 함수는 두 번째 메소드에서 사용 된 동일한 알고리즘을 사용하여 폴링을 수행하고 이러한 알람을 클라이언트에 전송합니다.스프링 메시지 템플릿 문제

문제는 마이그레이션 후 첫 번째 두 가지 방법이 문제없이 작동하지만 세 번째 방법은 문제가되지 않는다는 것입니다. 나는 그 실과의 관계가 의심 스럽다. messagetemplate과 새로운 프레임 워크가있는 스레드 사이에 알려진 문제가 있습니까?

@Component 
public class ClientFeed { 

private MessageTemplate messageTemplate; 

@Autowired 
public void setTemplate(MessageTemplate messageTemplate) { 
    this.messageTemplate = messageTemplate; 
} 

public void sendAlarmUpdate(final Alarm myAlarm) { 

    if (messageTemplate != null) { 
     System.out.println("Debug Thread: " + Thread.currentThread().getName()); 
     messageTemplate.send(new AsyncMessageCreator() { 

      public AsyncMessage createMessage() { 
       AsyncMessage msg = messageTemplate.createMessageForDestination("flexClientFeed"); 
       msg.setHeader("DSSubtopic", "Alarm"); 
       msg.setBody(myAlarm); 

       return msg; 
      } 
     });  
    } 
} 

} I가 각각있는이 코드 조각 표시된 스레드 이름에 도달 세 가지 방법으로

:

여기에 사용 된 클라이언트 공급의 스냅 샷입니다 "스레드-14", "Thread-24"및 "http-bio-80-exec-10".

+0

제목 질문을 * 해결 된 *으로 표시하면 안됩니다. 대답을 게시하고 (당신처럼) 그것을 받아들입니다. – j0k

답변

0

작업을 수행하기 위해 서버에 로컬 스레드를 생성하여 문제를 해결했습니다. 클라이언트 피드는 http 스레드 대신이 새로 만들어진 스레드를 통해 호출됩니다.