Got it. I think we'll go with you suggestion and never mind about the issue. Thanks for looking at these in your busy week!
-Tap On Thursday, July 23, 2015 at 8:58:24 AM UTC+7, Michael Klishin wrote: > > On Wednesday, July 22, 2015 at 12:14:36 PM UTC+3, Nuttanart > Pornprasitsakul wrote: >> >> Hi, >> >> This question is related to blocking issue that I'm asking >> <https://github.com/michaelklishin/langohr/issues/74>, but I think >> better separating this to prevent putting more noises in that issue. I >> started to think that the issue that happens to me causes by opening and >> closing channel to often in the subscribe handler function (the snippet >> below extracted from here >> <https://github.com/michaelklishin/langohr/issues/74#issuecomment-123536849> >> ) >> >> (lc/subscribe channel "source" (fn [ch meta message] >> (let [pub-ch (lch/open conn)] >> (lb/publish pub-ch "" "destination" >> (str message)) >> (lch/close pub-ch)) >> (lb/ack ch (:delivery-tag meta)))) >> >> The reason I keep doing it this way is because in the Java RabbitMQ >> client Channel documentation >> <https://www.rabbitmq.com/releases/rabbitmq-java-client/current-javadoc/com/rabbitmq/client/Channel.html> >> >> says that a channel shouldn't be shared between threads. As my >> understanding, message handler function can be executed in multiple threads >> that's why I create a new channel and close it within the handler function. >> But from my other test results, it seems like sharing channel between >> threads making handler function run a lot faster and importantly, blocking >> issue doesn't happen. >> > > You can reuse the channel in this particular case. Yes, consumer methods > will be executed in a thread pool but > per-channel ordering is guaranteed by the Java client > (ConsumerWorkService, in case you wonder). I didn't > realise you were closing and opening channels inside a delivery handler. > That should not be necessary and sounds > more dangerous than technically having channel sharing ;) > > Thread sharing is a no-go if you intend to publish on a channel > concurrently. As I explained in above, > Java client will effectively make publishing sequential in your case. > > If this solves the blocking issue for you, I'd simply recommend you > publish responses on the same > channel your deliveries are on (this is why the callback has `ch` as the > first argument!) and move on :) > > MK > -- You received this message because you are subscribed to the Google Groups "clojure-rabbitmq" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure-rabbitmq+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.