最近我发现我的Clojure/Ring/Jetty服务器反复进入NoClassDefFoundError
,当我cider-connect
进入它并做一些事情。我想这是因为线程池被一些死线程耗尽。我可以在重复运行的计划任务中执行“阻止订阅”吗?
然后我发现其中一个定义clojurewerkz.quartzite.scheduler
工作在每天一次的服务器这一功能:
(defn consumer-msgs-announcement
[rabbitmq queue-name & args]
(with-open [conn (lc/connect rabbitmq)]
(let [ch (lch/open conn)]
(lq/declare ch queue-name {:durable false :auto-delete false})
(println " [*] Waiting for messages. To exit press CTRL+C")
;; (lcons/blocking-subscribe ch queue-name msg-queue/post-wxmsg-handle-delivery {:auto-ack true})
(lcons/blocking-subscribe ch queue-name handle-delivery-announcement {:auto-ack true})
)))
其中包含的包被定义为:
[langohr.core :as lc]
[langohr.channel :as lch]
[clojure.string :as str]
[langohr.queue :as lq]
[langohr.consumers :as lcons]
我怀疑blocking-subscribe
将导致它永远被阻塞的线程耗尽JVM的线程池并最终导致NoClassDefFoundError
错误。
我不确定这个问题,但是我可以在重复运行的计划任务中执行blocking-subscribe
吗?
我上面描述的事情可能吗?或者我的演绎有什么问题吗?
谢谢。
这里有什么问题吗? – theMayer
是的,我不知道我的演绎。你能帮助我吗?我更新了这个问题。谢谢。 – cmal