kookster/activemessaging

New processor instantiated on every message?

psharpNumerex opened this issue · 6 comments

Am I reading this chunk of _dispatch in gateway.rb correctly?

          execute_filter_chain(:incoming, message, routing) do |m|
            result = subscription.processor_class.new.process!(m)
          end

A new processor object is created for each message? Would it not be better cache the processor object in subscribe_to?

It is following the same pattern as a controller. By making a new one, I can be sure there is no state left over for the instance.

hmm, I can see the point of that, but I might think of it more as a processor implementation issue. Thanks for the quick response!

Is there some need this is not meeting?

I heard some years ago from someone who wanted to be able to keep state in a processor (like a counter), and so didn't want a new instance per call. Are you looking for something similar?

yes, something fairly similar to that. But mostly we'd like to support being a multi-threaded processor.

You want your processor to start multiple threads? Hmm, that should work. I don't think I have done it before though.

On the other hand, I did make a new threaded poller that will have a single poller instance run many threads/processors in one OS process (a la sidekiq).

I haven't doc'd as such, as I am just now putting finishing touches on it, but it's pretty self explanatory.

https://github.com/kookster/activemessaging/blob/master/lib/generators/active_messaging/install/templates/threaded_poller
https://github.com/kookster/activemessaging/blob/master/lib/activemessaging/threaded_poller.rb

Nice work, is it ready for primetime?