Spring 2.5、Flex 3.5、BlazeDS 3、および Java 6 から Spring 3.1、Flex 4.5、BlazeDS 4、および Java 7 に移行した後、問題に直面しています。一種の「アラーム」を送信するために ClientFeed を宣言しました。フレックス クライアントへのメッセージ。これらのアラームを送信する方法は 3 つあります。1 つ目は snmp トラップによるもので、スレッドが開始され、トラップが受信されるとアラームが送信されるのを待ちます。2 番目の方法は、ポーリング メカニズムを使用する方法です。Web アプリケーションの開始時にスレッドが開始され、一定時間後にアラームをポーリングしてクライアントに送信します。3 番目の方法は、ユーザーからの明示的な poll コマンドです。これにより、専用サービスで特定の関数が呼び出されます。この関数は、2 番目のメソッドで使用されたのと同じアルゴリズムを使用してポーリングを実行し、それらのアラームをクライアントに送信します。
問題は、移行後、最初の 2 つの方法は問題なく機能しますが、3 番目の方法は機能しないことです。スレッドとの関係が疑われます。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;
}
});
}
}
}
3 つの方法でこのコードに到達し、表示されるスレッド名はそれぞれ「Thread-14」、「Thread-24」、「http-bio-80-exec-10」です。