2012-07-26 69 views
0

從Spring 2.5,Flex 3.5,BlazeDS 3和Java 6遷移到Spring 3.1,Flex 4.5,BlazeDS 4和Java 7後,我遇到了一個問題。我已經聲明一個ClientFeed以發送向Flex客戶端發送一種「警報」消息。這些警報發送有三種方法。第一個是通過snmp陷阱,一個線程啓動並等待任何陷阱,因爲收到一個警報將被髮送。第二種方法是通過輪詢機制,在web應用程序的開始,一個線程被啓動,並在一段時間後輪詢警報併發送給客戶端。第三種方法是來自用戶的顯式輪詢命令,這將調用專用服務上的特定功能。然後該函數使用第二種方法中使用的相同算法來執行輪詢,並將這些警報發送給客戶端。Spring MessageTemplate問題

問題是遷移後的前兩種方法沒有問題,但第三種方法沒有問題。我懷疑與線程有關係。 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; 
      } 
     });  
    } 
} 

}

通過三種方法我達到這個一段代碼和所顯示的線程名稱分別是:「線程14」, 「Thread-24」和「http-bio-80-exec-10」。

+0

您不應該將您的標題問題標記爲*已解決*。發表一個答案(就像你做的)並接受它。 – j0k 2012-08-07 13:01:49

回答

0

我解決了這個問題,在服務器上創建一個本地線程來執行這個工作。因此,通過這個新創建的線程而不是http線程來調用客戶端饋送。