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 应用程序开始时启动一个线程,并在一定时间后轮询警报并将它们发送到客户端。第三种方法是来自用户的显式轮询命令,这将调用专用服务上的特定函数。然后,此函数使用第二种方法中使用的相同算法来执行轮询,并将这些警报发送到客户端。

问题是迁移后前两种方法都可以正常工作,但第三种方法没有。我怀疑与线程有关系。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;
            }
        });    
    }
}

}

通过三种方法我到达这段代码,显示的线程名称分别是:“Thread-14”、“Thread-24”和“http-bio-80-exec-10”。

4

1 回答 1

0

我通过在服务器上创建一个本地线程来执行该工作解决了这个问题。因此,客户端提要通过这个新创建的线程而不是 http 线程调用。

于 2012-08-07T12:51:16.030 回答