@Udi I am not sure I understand. I am using event sourcing, so I persist events on the domain side for rehydration of Aggregates, etc (domain-side). The bus publishes these events, which are subscribed to by interested query-side denormalizers.
On Thu, Aug 5, 2010 at 12:40 AM, Udi Dahan <thesoftwaresimpl...@udidahan.com > wrote: > I think that the reason you're running into difficulty is that your > persisting data on the command side that should have only been persisted on > the query side. > > Cheers, > > -- Udi Dahan > > > -----Original Message----- > From: rhino-tools-dev@googlegroups.com > [mailto:rhino-tools-...@googlegroups.com] On Behalf Of Mike Nichols > Sent: Thursday, August 05, 2010 1:09 AM > To: Rhino Tools Dev > Subject: [rhino-tools-dev] Re: rhino rsb subscription harvesting > > @Udi > I am persisting the events. After the events have been persisted they > are put on the bus for publication. > My initial concern here though was about the assumption that the first > message in a batch is the sole provider of subscription details for an > entire batch of messages. It seems like a user should just Publish a > batch of messages on a bus and not be concerned about who is > subscribed to them. > > To be clear this code from the PublishInternal method in the > defaultservicebus is what I am discussing.What this code is saying is > that if you have two messages in a batch being Published, and each one > is subscribed to by different endpoints, then the second message in > the batch will not get published. That seems unpredictable to me: > private bool PublishInternal(object[] messages) > { > if (messages == null) > throw new ArgumentNullException("messages"); > > bool sentMsg = false; > if (messages.Length == 0) > throw new MessagePublicationException("Cannot publish > an empty message batch"); > object msg = messages[0]; > IEnumerable<Uri> subscriptions = > subscriptionStorage.GetSubscriptionsFor(msg.GetType()); > foreach (Uri subscription in subscriptions) > { > > transport.Send(endpointRouter.GetRoutedEndpoint(subscription), > messages); > sentMsg = true; > } > return sentMsg; > } > > > > m > > > On Aug 4, 9:51 am, Udi Dahan <thesoftwaresimpl...@udidahan.com> wrote: > > Mike, > > > > The case of CQRS usually has the service layer publishing the events in > > response to commands, domain events has nothing to do with it. If you're > > talking about event-based persistence on the command-side, again, domain > > events have nothing to do with the bus. > > > > Cheers, > > > > -- Udi Dahan > > > > -----Original Message----- > > From: rhino-tools-dev@googlegroups.com > > > > [mailto:rhino-tools-...@googlegroups.com] On Behalf Of Mike Nichols > > Sent: Wednesday, August 04, 2010 4:46 PM > > To: Rhino Tools Dev > > Subject: [rhino-tools-dev] Re: rhino rsb subscription harvesting > > > > If I have 5 events that took place on my aggregate root during the > > course of a unit of work. My understanding is that the root represents > > a transactional boundary. So I publish the events on the bus as a > > batch. The subscriber (in this case, denormalizers for events that > > write to a database) will go through each event and update the > > database, ideally in a single transaction so that if one of the > > handlers fails, then they all fail. > > As I think about it, I am not sure why that is so important other than > > the convenience of having NHib in a single session and cut down on the > > number of roundtrips. But I realize this is an impl detail that > > shouldn't be the driver. > > > > @Udi - I actually went back and forth on whether to publish these > > individually or not, so it is helpful to hear from you on this. Can > > you see why I would consider the batch a single unit though? If you > > are using a denormalizer you always only send one event at a time to > > that endpoint? > > > > On Aug 4, 6:35 am, Udi Dahan <thesoftwaresimpl...@udidahan.com> wrote: > > > Then I'm afraid it sounds like you're not using DomainEvents the right > way > > - > > > each event from the domain should be a discrete domain occurrence. > > > > > -- Udi Dahan > > > > > -----Original Message----- > > > From: rhino-tools-dev@googlegroups.com > > > > > [mailto:rhino-tools-...@googlegroups.com] On Behalf Of Mike Nichols > > > Sent: Wednesday, August 04, 2010 3:45 PM > > > To: Rhino Tools Dev > > > Subject: [rhino-tools-dev] Re: rhino rsb subscription harvesting > > > > > I am publishing the DomainEvents from my domain. These events are > > > subscribed to by 1 (or more report) services that update the db state > > > from those events. > > > @Udi - I could publish them one at a time, yes, but I'd rather the > > > whole batch fail since they represent a unit of work from my > > > domain...I don't want some messages to succeed and others to fail > > > leaving the db in an odd state. > > > > > On Aug 4, 5:39 am, Ayende Rahien <aye...@ayende.com> wrote: > > > > What is the scenario in which you would want to publish a message > batch? > > > > And publishing doesn't use the owners, it uses the subscriptions > list. > > > > I think that I had the wrong idea in mind about what we are talking > > about, > > > > yes, for publish, that would make sense, but I still want to know > what > > > your > > > > scenario is. > > > > > > On Wed, Aug 4, 2010 at 3:33 PM, Mike Nichols > > > <nichols.mik...@gmail.com>wrote: > > > > > > > Isn't that the difference between Publish and Send though? > > > > > 'Publishing' an event in my mind doesn't carry any assumption about > > > > > who is dealing with its payload. 'Sending' on the other hand does > > > > > carry those transactional assumptions. > > > > > > > On Aug 4, 5:26 am, Ayende Rahien <aye...@ayende.com> wrote: > > > > > > Mike, > > > > > > The problem is that there is a difference between the > expectations. > > > > > > You should be aware which messages goes to which endpoints. > > > > > > By splitting a batch you may be violating the assumption of the > user > > > that > > > > > > they are sending one unit of work to the server. > > > > > > > > I don't have an issue with throwing if you are sending a batch to > > > mixed > > > > > > endpoints, though. > > > > > > > > On Wed, Aug 4, 2010 at 3:22 PM, Mike Nichols > > <nichols.mik...@gmail.com > > > > > >wrote: > > > > > > > > > Yes, but each endpoint _will_ treat the batch as a single unit > for > > > the > > > > > > > batch though only in its own context. Otherwise the publisher > is > > > > > required to > > > > > > > have some knowledge of its subscribers right? To be clear > (sorry > > if > > > I > > > > > am > > > > > > > thick), how do you handle this scenario: > > > > > > > 1. There are two messages in a batch > > > > > > > 2. Message1 is subscribed to by Endpoint1 > > > > > > > 3. Message2 is subscribed to by Endpoint2 > > > > > > > 4. You Publish(new[]{ message1,message2}); > > > > > > > > > With the current codebase, only Endpoint1 will receive the > batch > > of > > > > > > > messages...(it looks at 'messages[0]' to GetSubscriptions). > That > > > > > doesn't > > > > > > > seem predictable. > > > > > > > > > Another option is to have the publisher somehow split up the > > > messages > > > > > so > > > > > > > that they will be published to the correct endpoint. That seems > to > > > > > turns > > > > > > > things upside down though. > > > > > > > > > Other than feeding messages one by one is there some better > > > > > alternative? > > > > > > > > > On Wed, Aug 4, 2010 at 12:45 AM, Ayende Rahien > <aye...@ayende.com> > > > > > wrote: > > > > > > > > >> Mike, > > > > > > >> Perf isn't what worries me. > > > > > > >> Message batches are treated as a single transactional unit. > > > > > > >> If you send them to different endpoints, you break that > > assumption. > > > > > > > > >> On Wed, Aug 4, 2010 at 6:29 AM, Mike Nichols < > > > > > nichols.mik...@gmail.com>wrote: > > > > > > > > >>> I have (clumsily) fixing an issue in rsb where it currently > > simply > > > > > > >>> looks at the first message in batch being Published for its > > > > > > >>> subscription info. > > > > > > >>> I am publishing a number of messages that may or may not be > > > > > subscribed > > > > > > >>> to (these are events from a store) and which are subscribed > to > > at > > > > > > >>> different endpoints. Under the current setup > (PublishInternal), > > if > > > a > > > > > > >>> message doesn't happen to be subscribed to in the same > endpoint > > > the > > > > > > >>> first message in the batch it will not get sent to get > handled. > > > > > > > > >>> The initial fix is to GetSubscriptions for each message in > the > > > batch > > > > > > >>> to make sure all subscriptions have been harvested that are > > > > > > >>> interested. > > > > > > > > >>> My question is about the performance of something like this > on > a > > > > > > >>> massive batch of messages where I am iterating on the > collection > > > > > > >>> (please see my pull request). > > > > > > > > >>> This scenario doesn't seem far fetched to me, but if there is > a > > > > > better > > > > > > >>> way of implementing it I'd like to hear it. > > > > > > > > >>> -- > > > > > > >>> You received this message because you are subscribed to the > > Google > > > > > Groups > > > > > > >>> "Rhino Tools Dev" group. > > > > > > >>> To post to this group, send email to > > > > > rhino-tools-...@googlegroups.com. > > > > > > >>> To unsubscribe from this group, send email to > > > > > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@googlegroups.com> > <rhino-tools-dev%2bunsubscr...@g > > > ooglegroups.com> > > > > > <rhino-tools-dev%2bunsubscr...@googlegroups.com<rhino-tools-dev%252bunsubscr...@googlegroups.com> > <rhino-tools-dev%252Bunsubscr > > > i...@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 > > > rhino-tools-dev@googlegroups.com > > > > > . > > > > > > >> To unsubscribe from this group, send email to > > > > > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@googlegroups.com> > <rhino-tools-dev%2bunsubscr...@g > > > ooglegroups.com> > > > > > <rhino-tools-dev%2bunsubscr...@googlegroups.com<rhino-tools-dev%252bunsubscr...@googlegroups.com> > <rhino-tools-dev%252Bunsubscr > > > i...@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 > > > rhino-tools-...@googlegroups.com. > > > > > > > To unsubscribe from this group, send email to > > > > > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@googlegroups.com> > <rhino-tools-dev%2bunsubscr...@g > > > ooglegroups.com> > > > > > <rhino-tools-dev%2bunsubscr...@googlegroups.com<rhino-tools-dev%252bunsubscr...@googlegroups.com> > <rhino-tools-dev%252Bunsubscr > > > i...@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 > rhino-tools-...@googlegroups.com. > > > > > To unsubscribe from this group, send email to > > > > > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@googlegroups.com> > <rhino-tools-dev%2bunsubscr...@g > > > ooglegroups.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 rhino-tools-...@googlegroups.com. > > > To unsubscribe from this group, send email to > > > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@googlegroups.com> > . > > > For more options, visit this group > > athttp://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 rhino-tools-...@googlegroups.com. > > To unsubscribe from this group, send email to > > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@googlegroups.com> > . > > For more options, visit this group > athttp://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 rhino-tools-...@googlegroups.com. > To unsubscribe from this group, send email to > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@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 rhino-tools-...@googlegroups.com. > To unsubscribe from this group, send email to > rhino-tools-dev+unsubscr...@googlegroups.com<rhino-tools-dev%2bunsubscr...@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 rhino-tools-...@googlegroups.com. To unsubscribe from this group, send email to rhino-tools-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en.