如果您使用的是servlet容器只(Tomcat)的,你可以創建一個非託管線程這樣的:
@WebListener
public class MyServletContextListener implements ServletContextListener {
public void contextInitialized(final ServletContextEvent sce) {
final java.util.Timer timer = new Timer();
// Executes repeatedly (delay = 4000, period = 5000)
timer.schedule(new ReplyTask(), 4000, 5000);
sce.getServletContext().setAttribute("replyTaskTimer", timer);
}
public void contextDestroyed(final ServletContextEvent sce) {
final java.util.Timer timer =
(Timer) sce.getServletContext().getAttribute("replyTaskTimer");
timer.cancel();
}
}
在ReplyTask
剛讀輸入隊列,並在傳出隊列送東西(我建議使用兩個不同的隊列來乒乓球)。您的必須取消計時器,該線程將以其他方式存活未部署和重新部署。
注意:如果您使用的是應用程序服務器(例如JBoss),則可以使用消息驅動Bean(MDB)來實現。更優雅和簡潔,線程由應用程序服務器管理。使用像JBoss這樣的應用服務器的額外好處是集成的HornetQ JMS提供程序。
「直到在線」或「直到離線」?你的問題太廣泛了:你到目前爲止嘗試過什麼? – Beryllium
謝謝Beyllium,我的意思是,直到我的服務器下線。 直到現在我已經做了2個程序(在控制檯上)1發送消息到隊列和其他從它讀取。我想要像listner這樣的東西,如果它在服務器端是活動的,那麼它會發送回復到每一條消息... –