Let me try and understand the timeline of these events. I will call a
logical grouping of events "event batch".
If you don't mind answering the following questions, I can assist better:

   - How many batches per day will you receive per customer?
   - Can the event batches interleave?
   - What identifies a concrete batch of events?
   - Do you have a finite list of customers? (and customer ids?)
   - What is the payload of the fourth event? Am I right asserting that you
   receive 3 raw events, and you build some sort of composite or merged
   message and release it as the 4th event?

Regards,

*Raúl Kripalani*
Enterprise Architect, Open Source Integration specialist, Program
Manager | Apache
Camel Committer
http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
http://blog.raulkr.net | twitter: @raulvk

On Wed, May 15, 2013 at 9:30 PM, Chris Wolf <cwolf.a...@gmail.com> wrote:

> Raúl,
>
> Thanks for your ideas.  Now it's 3 events without guaranteed order to
> arrive before triggering the fourth event.  As for correlation key, I
> guess it would be customer-id plus a timestamp
> that shows the event happened in the last several hours.
>
> The more I look into it, the more it seems like the Camel resequencer
> process may apply
> here:  http://camel.apache.org/resequencer.html
>
> The thing is, I'm not sure about setting batch size and/or timeout.
> The documentation
> states:
>
> "...messages are collected into a batch, either by a maximum number of
> messages per batch or using a timeout..."
>
> So it seems I would set batch size to 3 in my case, but our process is
> supporting
> multiple customers, so really, it's 3 predecessor events *per customer*.
>  Also,
> I think I would need persistent state in the even of a crash.
> Although I'd like to
> avoid it, I can't help thinking I may have to implement yet another custom
> Processor to support this use case.  (I already had to implement a custom
> SFTP Processor to handle dynamic endpoint settings based on the
> customer-id).
>
> I know that Camel is intended for ETL-ish sorts of problems, but I
> think the Camel
> approach is also appropriate for interactive, online processing, but
> in that case,
> it would be really helpful if endpoint configurations had the
> additional dimension
> of settings/configs indexed by id (such as customer-id, user-id,
> account-id, etc.)
>
> I could be wrong, but it seems that the static URI way of configuring
> endpoints
> doesn't scale to process-flow/per-identity.  Those endpoints that do take
> expressions help in this regard, but not all of them work with
> expression-language
> configuration, e.g. SFTP Consumer.
>
> Thanks,
>
> Chris
>
> On Wed, May 15, 2013 at 3:46 PM, Raul Kripalani <r...@evosent.com> wrote:
> > Hi Chris,
> >
> > I like this kind of problems ;-) Do these two messages share a
> correlation
> > key?
> >
> > If yes, you can create a bean which acts like a Repository, accumulating
> > message bodies or Exchanges under the correlation key. Could be
> implemented
> > using Guava's MultiMap, or a DB if you need durable persistence, or a
> > distributed cache if you require clustering without persistence.
> >
> > When a message arrives, you query the Repository for a previous message
> > with the same correlation key. If it exists, you pick it up, do whatever
> > manipulation is needed, and release the 3rd event. Kind of like a
> > CyclicBarrier that stores the messages for later usage.
> >
> > P.S.: You could consider using the Aggregator EIP, but it'll block a
> thread
> > until the 2nd event comes through.
> >
> > Regards,
> >
> > *Raúl Kripalani*
> > Enterprise Architect, Open Source Integration specialist, Program
> > Manager | Apache
> > Camel Committer
> > http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
> > http://blog.raulkr.net | twitter: @raulvk
> >
> > On Wed, May 15, 2013 at 6:56 PM, Chris Wolf <cwolf.a...@gmail.com>
> wrote:
> >
> >> In my process, I have two events that must be completed before the
> >> third can proceed.
> >> One event is the arrival of a certain JMS message and the other is the
> >> arrival of
> >> a certain file type.  The problem is, I cannot represent this in a
> >> route pipeline because
> >> one event may occur before the other and it's totally random from one
> >> run to another.
> >>
> >> In the abstract, I'm thinking one of the EIP patterns, either
> >> "resequencer" or "scatter-gather"
> >> applies, but I'm not certain how to do this in a concrete way with
> >> Camel.  If anyone has
> >> ideas, that would be great...
> >>
> >> Thanks,
> >>
> >>
> >> Chris
> >>
>

Reply via email to