0

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」です。

4

1 に答える 1

0

サーバー上にローカルスレッドを作成してジョブを実行することで問題を解決しました。これにより、クライアント フィードは、http スレッドではなく、この新しく作成されたスレッドを介して呼び出されます。

于 2012-08-07T12:51:16.030 に答える