Hi, Claus. I have created a ticket to simplify the control channel messages for the Dynamic Router EIP component: https://issues.apache.org/jira/browse/CAMEL-17500
When you have a chance, please have a look and let me know if this is complete enough for the next update to the component. Thanks, Steve On Tue, Jan 11, 2022 at 8:04 AM Claus Ibsen <claus.ib...@gmail.com> wrote: > On Sat, Jan 8, 2022 at 4:09 PM Steve973 <steve...@gmail.com> wrote: > > > > Hello. I would like to add a little more to this conversation, since you > > mentioned my reason for contributing this code. My motivation to add > this > > EIP component was because a couple of years ago, I read about the dynamic > > router EIP within Camel, and I thought that it would be perfect for what > I > > needed to do in my project at work. It looked like my clients could > > register with the dynamic router processor, but further reading of the > docs > > and my own use of it revealed that this was not how it was implemented. > I > > was not able to use it for my use case, but I had to move on and > implement > > this behavior myself. > > > > Now that I had some time, I thought that I would contribute this idea to > > Camel so that others would be able to use this particular type of "glue" > > right out of the box that fits use cases that are like others in camel, > but > > expanded in certain areas that include, but are probably not limited to: > > > > - the content-based router (choice), but the choices are fully > > subscriber-initiated and do not need to be known at compile time > > - the dynamic router (processor in Camel core), and I outlined the > > differences in the previous email, so no need to re-hash here > > - the message filter, but instead of creating the filter at compile > > time, consumers provide their own filter at runtime > > - the selective consumer, but turned the other way around: instead of > > sending messages to (potentially a list of) recipients, and letting > them > > all determine which messages to process or discard, this component > allows a > > consumer to subscribe with its filter so that the router can handle > this > > (centrally) and only send messages to the (first) appropriate > subscriber. > > If we need a recipient list mode, that can easily be added so that it > sends > > to all matching recipients. > > - the "To Dynamic" EIP, but the sender does not need to know about > > dynamic recipients, and variables do not have to be set > > > > That is a good break-down and perspective > > > I hope this shows how this contribution is not only "glue", but that it > is > > useful glue that provides simplified routing for developers that have use > > cases that overlap in the list of features above. While you could > achieve > > anything in software by composing a solution of several different pieces, > > and implementing the glue that helps them to work together and, in this > > case, also implementing the runtime registration of recipients, this > > component ties these things together and makes it simple. It is not > > intended to be its own messaging system, but to facilitate messaging to, > > and from, other sources where the decision is truly runtime-based. > Indeed, > > you might have another messaging system that provides filtering, etc, but > > this component introduces a new feature to provide this in a way that is > > independent of other components/transports, and can, therefore, be used > as > > a dynamic integration point between completely different messaging > systems. > > > > Yes I can see the validation, when you accept that it's not a > messaging system with client/server actors. > So when you say that you can subscribe/unsubscribe then it's not on > the same page as it would be with a JMS/Kafka client that subscribes > to a broker system. > > I wonder if you could research if you can make the subscription > simpler, as I think it's a little bit of a "hurdle" that Camel users > would > need to construct a java object to subscribe for basic subscription. > > You could have sub context for the action and channel, so if you just > want to subscribe you can send an empty message to > > dynamic-router:control/subscribe/my-channel?id=123 > > You could also allow to auto-gen uuid for the subscription id, so if > id is omitted then one is returned > > String uid = requestBody(....) > > Anyway that is food for thoughts for improvements. > > What you have sent today as PR - lets review it. I can see its > usefulness and its potential if you continue to work on it. > > > > > > Thanks again, > > Steve > > > > On Fri, Jan 7, 2022 at 6:08 AM Claus Ibsen <claus.ib...@gmail.com> > wrote: > > > > > Hi Steve > > > > > > We can see from your work that you have put a lot of effort and > > > devotion into this, with an example and blog post as well. > > > > > > However you say that the reason you wanted this was due to the dynamic > > > pattern in the EIP book. > > > > > > The issue is that the EIP book is about messaging and integration > > > patterns and that these patterns > > > does not apply to all software projects. > > > > > > The dynamic pattern as in the EIP book is actuall a pattern in > > > messaging systems like ActiveMQ, Kafka, RabbitMQ, and all the many of > > > them out there. > > > They all offer a way for clients to subscribe and unsubscribe to > > > topics (and or queues) and very often have filtering as well so a > > > client can say they the only want message that matches X criteria. > > > > > > In other words its a domain that is for a messaging system, and this > > > gets quickly complex when you have distributed systems, and HA with > > > failover, and now also with "the cloud", and even across multiple > > > cloud vendors with hybrid cloud. > > > Your implementation in Camel would be very limited in use-case as its > > > a single context / in-memory only "queue". > > > > > > > > > If on the other hand there was a new messaging system (called foobar), > > > and it was a well used system, then it would be worthwhile to > > > implement a camel component for such system. > > > In other words Camel is the glue to systems, but its "not a "server" > > > system itself". > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Sat, Dec 25, 2021 at 4:44 PM Steve973 <steve...@gmail.com> wrote: > > > > > > > > Hello. I have sent a few messages here on this list about an > alternate > > > > Dynamic Router EIP component implementation that I have been working > on. > > > > If anyone has some time, I would like to get more community input and > > > > opinion on what I have done so far. You can see the ticket here: > > > > > > > > https://issues.apache.org/jira/browse/CAMEL-17154 > > > > > > > > It contains a link to the component module on my fork of the Camel > repo > > > (in > > > > the comments), and I have included a blog post draft ODT attachment > that > > > > introduces this component, why I wanted to implement it, and basic > > > > discussion on how to use it. > > > > > > > > If any of you would be kind enough to take a quick glance and let me > know > > > > what you think, I would be quite grateful. > > > > > > > > Happy holidays, if you are celebrating. Take care, and be well, > > > regardless. > > > > > > > > Thanks, > > > > Steve > > > > > > > > > > > > -- > > > Claus Ibsen > > > ----------------- > > > http://davsclaus.com @davsclaus > > > Camel in Action 2: https://www.manning.com/ibsen2 > > > > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 >