从 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”。