最近我发现我的 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
在重复运行的计划任务中执行吗?
我上面描述的事情可能吗?还是我的扣法有问题?
谢谢。