Hi

Sent you an email directly with a sample app to reproduce.

Hope you can help!

Thanks.

On Apr 8, 8:16 pm, crowley_mark <[email protected]> wrote:
> On my way home now, what I will do is try the project on another
> machine to ensure it is not a machine specific issue.
>
> I modified the starbucks example to instantiate 3 baristas, and they
> all got the same  preparedrink message, I then ran the unit tests and
> got failures, so I suspect a deeper rooted problem with my msmq
> install than esb itself.
>
> However, your offer of a skype call is much appreciated, and if the
> above doesn't shed some light I will be sure to rake you up on it.
>
> On Apr 8, 7:26 pm, Ayende Rahien <[email protected]> wrote:
>
> > That is really strange, do you have skype, by any chance? We can go online
> > and try to figure out what is going on live
>
> > On Thu, Apr 8, 2010 at 9:19 PM, crowley_mark <[email protected]> wrote:
> > > Hi
>
> > > Finally got around to playing with this.
>
> > > I am clearly doing somethign wrong, as no matter how I configure
> > > things, each instance of the consumer get the same message so I just
> > > end up doing the same work multiple times.
>
> > > I have a console app "Distributor", this starts a bus and a
> > > loadbalancer with the following config:
>
> > >    <facilities>
> > >      <facility id="rhino.esb" >
> > >        <bus threadCount="1"
> > >             numberOfRetries="5"
> > >             loadBalancerEndpoint="msmq://localhost/ESBTests.balancer"
> > >             endpoint="msmq://localhost/ESBTests.queue"
> > >             />
> > >        <messages>
> > >        </messages>
> > >      </facility>
> > >      <facility id="rhino.esb.loadbalancer" >
> > >        <loadBalancer threadCount="1"
> > >             endpoint="msmq://localhost/ESBTests.balancer"
> > >             />
> > >      </facility>
> > >    </facilities>
> > >  </castle>
>
> > > The distributor will send a message to the bus every time you press a
> > > key like so:
>
> > >            var container = new WindsorContainer(new
> > > XmlInterpreter());
> > >            container.Kernel.AddFacility("rhino.esb", new
> > > RhinoServiceBusFacility());
>
> > >            var container2 = new WindsorContainer(new
> > > XmlInterpreter());
> > >            container2.Kernel.AddFacility("rhino.esb.loadbalancer",
> > > new LoadBalancerFacility());
>
> > >            using (var loadBalancer =
> > > container2.Resolve<MsmqLoadBalancer>())
> > >            using (var bus =
> > > container.Resolve<IStartableServiceBus>())
> > >            {
> > >                MsmqUtil.GetQueuePath(loadBalancer.Endpoint).Create();
>
> > >                loadBalancer.Start();
> > >                bus.Start();
>
> > >                while (true)
> > >                {
> > >                    var message = new ActivityCreated() { ActivityID =
> > > Guid.NewGuid() };
> > >                    //bus.Send(message);
> > >                    bus.Notify(message);
>
> > >                    Console.WriteLine("Activity Created: {0}",
> > > message.ActivityID);
> > >                    Console.ReadLine();
> > >                }
> > >            }
>
> > > Note: bus.Send is commented out as it errors complaining about no
> > > message owners could be found (probably the key to the issue), so I am
> > > using Notify instead.
>
> > > I then have another console app "Consumer", this starts a bus with the
> > > following config
>
> > >  <castle>
> > >    <facilities>
> > >      <facility id="rhino.esb" >
> > >        <bus threadCount="1"
> > >             numberOfRetries="5"
> > >             endpoint="msmq://localhost/ESBTests.consumer"
> > >             />
> > >        <messages>
> > >          <add name="Common" endpoint="msmq://localhost/
> > > ESBTests.balancer"/>
> > >        </messages>
> > >      </facility>
> > >    </facilities>
> > >  </castle>
>
> > > And listens for messages
>
> > >    public class ActivityListener : ConsumerOf<ActivityCreated>
> > >    {
> > >        #region ConsumerOf<ActivityCreated> Members
>
> > >        public void Consume(ActivityCreated message)
> > >        {
> > >            Console.WriteLine("ActivityListener - Activity Created:
> > > {0}", message.ActivityID);
> > >        }
>
> > >        #endregion
> > >    }
>
> > > If you start up both apps whenever you hit return in the distributor
> > > you see a Activity Created message in the consumer.
>
> > > Now if I start up a second instance of the consumer app having
> > > modified the endpoint in the bus config to be
> > > msmq://localhost/ESBTests.consumer2,
> > > because a load balancer is in place I would expect one instance of the
> > > consumer app to take on the work i.e. only see a Activity Created
> > > message in one consumer console window. What I am actually seeing is
> > > no different to pub/sub, i.e both instances of the consumer app are
> > > recieving the message and displaying the Activty Created message.
>
> > > Any ideas?
>
> > > On Apr 1, 6:57 pm, Ayende Rahien <[email protected]> wrote:
> > > > Crowley,
> > > > RSB comes with Load Balancer, which is how you would handle this
> > > scenario,
> > > > take a look at the tests to see how this works.
>
> > > > On Tue, Mar 30, 2010 at 12:08 AM, crowley_mark <[email protected]
> > > >wrote:
>
> > > > > I have a consumer that processes a file. The activity of the consumer
> > > > > process is resource intensive; therefore I have set the bus thread
> > > > > count to 1 (effectively creating a queue).
>
> > > > > In times of load I would like to start 1 or more new instances of the
> > > > > consumer on new machines. We are using Amazons EC2 infrastructure so
> > > > > creating new machine instances involves minimum effort.
>
> > > > > My question is how to utilise ESB to the best advantage in such a
> > > > > scenario.
>
> > > > > My thoughts are...
>
> > > > > I don’t think I can utilise the Publish/Subscribe functionality, as
> > > > > each subscriber will just get the same message, so I will just end up
> > > > > processing the same file multiple times on different machines.
>
> > > > > As the process that sends the messages will not know of the location/
> > > > > name/ip of the consumer machines, it could  just send the messages to
> > > > > a predefined local queue. Having this local queue will ensure that
> > > > > messages are persisted, even if no consumers are in existence (unlike
> > > > > pub/sub model).
>
> > > > > Consumers on remote machines are configured to recieve messages from
> > > > > the predefined queue, and use the reply semantics to send any response
> > > > > message back to the sender. Any errors are persisted back to the
> > > > > queues error subqueue.
>
> > > > > New machines that come up will just pick off the next message,
> > > > > process, and reply.
>
> > > > > When a consumer machine is dropped (load reduced), because there are
> > > > > no subscribers etc. it simply disappears.
>
> > > > > Does this make sense. I believe this is possible, is there a better
> > > > > way? Any obvious disadvantages, other thoughts?
>
> > > > > Thanks.
>
> > > > > --
> > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > "Rhino Tools Dev" group.
> > > > > To post to this group, send email to [email protected].
> > > > > To unsubscribe from this group, send email to
> > > > > [email protected]<rhino-tools-dev%2Bunsubscribe@
> > > > >  googlegroups.com>
> > > <rhino-tools-dev%[email protected]<rhino-tools-dev%252Bunsubsc
> > >  [email protected]>
>
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/rhino-tools-dev?hl=en.
>
> > > --
> > > You received this message because you are subscribed to the Google Groups
> > > "Rhino Tools Dev" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<rhino-tools-dev%2Bunsubscribe@
> > >  googlegroups.com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/rhino-tools-dev?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rhino-tools-dev?hl=en.

Reply via email to