当前,我们有四个JMS侦听器容器,它们在应用程序启动期间启动。它们都通过Apache ZooKeeper连接并手动启动。当无法建立与ZooKeeper的连接时,这将成为问题。 (Wicket)应用程序无法启动,即使不必激活JMS侦听器即可使用该应用程序。他们只需要在后台收听,保存消息,然后执行cron作业就可以批量处理它们。
目标:
当前设置:
到目前为止已完成的工作:
ApplicationListener<ApplicationReadyEvent>
的类。autoStart
的{{1}}属性设置为false,并在单独的线程中启动DefaultMessageListenerContainer
中的每个容器。问题:
当然,对我是否走上正确道路的任何评论都会有所帮助。
答案 0 :(得分:0)
如果不在自定义线程中启动它们,则无法完全启动整个应用程序。这不仅是Wicket,而且由于对ZooKeeper的阻止请求,Servlet容器也不会将应用程序状态从STARTING更改为STARTED。
另一种选择是使用对ZooKeeper的非阻塞请求,但这是由JMS客户端(ActiveMQ)完成的,因此您需要检查其文档(ActiveMQ和ZooKeeper)是否都支持此请求。几年来我都没有用过这些,所以我不能为您提供更多帮助。