2014-11-17 7 views
2

대기열에서 n 개의 메시지를 가져 오려고합니다 (langohr 사용). 나는 작업 버전이 있지만, 나는이 일을 더 나은 clojurist 방법이 있는지 알고 싶습니다 :캡쳐 및 테이크 업

(def not-nil? (complement nil?)) 

(defn get_message [queue] 
    (let [[_ payload] (lb/get ch queue)] 
     (if (not-nil? payload) 
     (String. payload "UTF-8")))) 


(take 4 (take-while not-nil? (repeatedly (partial get_message "my_queue")))) 

그래서 내가 한 큐에 메시지가있는 한 N 메시지까지 가져가.

이렇게하는 더 나은 방법론이 있습니까? Clojure의 1.6 관용구 Clojure의 바인딩 이름에 _에 우선 -를 사용하는

함수 some? 내장으로

답변

4

not-nil?는 동일하다. 당신이 명확하게

(if (some? payload) (String. payload "UTF-8"))

(some-> payload (String. "UTF-8"))으로 표현 될 수있는 추가 인수의 의도,

이 없기 때문에

(partial get_message "my_queue")#(get-message "my_queue")으로 더 나은 당신은 이상 some->을 예약 할 수 있지만 이 경우에는 여전히 더 간결합니다.

그래서, 모두 함께 이러는 :

(defn get-message [queue] 
    (let [[_ payload] (lb/get ch queue)] 
    (some-> payload (String. "UTF-8")))) 

(take 4 (take-while some? (repeatedly #(get-message "my_queue")))) 
+0

와우 감사합니다! 거기에서 배워야 할 것이 많습니다! –

+0

localhost에서 RabbitMQ를 사용하려고하는데 어려움을 겪고 있는데 그 점에 관해 어떤 조언을 해 줄 수 있습니까? –

+0

@ PankajNimgade 더 많은 문제를 설명해 주시겠습니까? –