FYI, I've pushed the camel-hystrix component to master. Currently it doesn't support request collapsing and the threading aspects needs more testing and possibly improving.
Here is a small example how the new component can be used: https://github.com/bibryam/camel-hystrix-demo/blob/master/src/main/resources/OSGI-INF/blueprint/hystrix-producer.xml Cheers, On 29 January 2016 at 14:09, Bilgin Ibryam <bibr...@gmail.com> wrote: > Thanks Raul, I will go further and merge my implementation to master. > Before that I will see what ideas I can take from your branch. > Going forward, we may have to consdier what new versions of Java is > bringing to the table for Camel Java DSL in general anyway. > > Cheers, > > > On 28 January 2016 at 14:12, Raul Kripalani <ra...@apache.org> wrote: >> Hey Bilgin, >> >> I agree with you. My implementation started as a experiment, to be honest. >> >> My vision was deep and fluent integration between Camel and Hystrix, that's >> why I started experimenting with a fluent DSL. To me, Hystrix is not just >> an external thing to integrate in Camel, but it should play a larger role >> in changing how Camel fundamentally deals with exceptions in endpoints, >> processors and routing. >> >> However, I do agree that ultimately we would need to offer URI >> configuration (especially for Spring/Blueprint DSL users) before merging >> the component into master. But I wanted to get the enginery working first >> and the right level of fluency, to then add the URI logic because the >> latter is simpler. The "hardcore" part is actually supporting all of the >> magic that Hystrix offers. >> >> I agree that my implementation may be more complex to use in some >> scenarios. But I was focusing on not having to register objects in the >> Registry, because I particularly hate that amount of indirection ;-) Having >> to register endpoints and processors in the Registry just to be able to use >> them from the Hystrix endpoint seems a bit too much, and I wanted to >> achieve this level of fluency with JDK8: >> >> hystrix.wrapper() >> .forProcessor((exchange) -> throw new >> DummyException("Bang!")), setter) >> .withFallbackProcessor((exchange) -> >> exchange.getOut().setBody("Sorry, something happened")) >> .suppressFallbackForExceptions(DummyException.class) >> .build(); >> >> Or to be able to specify endpoint URIs inline, rather than having to >> register them in the registry to then reference them via # pound notation: >> >> hystrix.wrapper() >> .forStaticEndpoint("http://google.com", setter) >> .withFallbackProcessor((exchange) -> >> exchange.getOut().setBody("Could not reach Google. Is it the end of the >> world?")) >> .build(); >> >> Setters should be optional, BTW. And we should offer convenience methods to >> set typical Setter parameters (command name, group key, etc.). And I think >> my starting of services in Processors in a test was actually redundant. >> >> If you are actively working on the Hystrix component, go ahead! I can then >> enhance your implementation with a DSL, and you can take stuff from my >> implementation so far. The point where I got stuck was bridging Archaius >> (Hystrix configuration library) with our Camel Property Placeholders, >> Spring and Blueprint. Ideally Hystrix commands would be able to configure >> themselves by introspecting our existing properties in the context... :-( >> >> WDYT? >> >> Regards, >> >> *Raúl Kripalani* >> PMC & Committer @ Apache Ignite, Apache Camel | Integration, Big Data and >> Messaging Engineer >> http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani >> Blog: raul.io | twitter: @raulvk <https://twitter.com/raulvk> >> >> On Thu, Jan 28, 2016 at 1:43 PM, Bilgin Ibryam <bibr...@gmail.com> wrote: >> >>> Hi Raul, >>> >>> More or less the same time you published the first email about >>> camel-hystrix component, I also created camel-hystrix component [1] >>> (it is not finished yet!). But I took the typical (boring ;-)) >>> approach where the hystix support can be used as a regular component >>> through URI configuration. Since you announced first and started the >>> effort more visibly on jira/git/list I decided not to duplicate effort >>> and wait for your progress. >>> >>> Now looking at your implementation, I see it is quite advance and >>> offers many intersting features, great work. But my concernds are >>> primarily around using the fluent API rather than Camel URIs. In my >>> opinion Camel URI is a nice abstraction and using it should be default >>> option for any component. It makes easy for existing Camel users to >>> strat using a component. >>> Also not sure how the fluent API can be used from XML based DSL, may >>> be I'm missing something. >>> >>> IMHO, your implementation is more advanced, but also more complicated >>> to use. Using a builder, then setting some Histryx specific objects (I >>> think it was the HystrixObservableCommand.Setter), starting services >>> manually, seems too much work to me. I believe all that can be >>> expressed through a regular component. >>> >>> Not sure way would be the better approach going forward. May be we can >>> merge both approaches and offer the regular URI based component usage >>> and also the additional fluent API. >>> >>> WDYT? >>> >>> >>> [1] https://github.com/bibryam/camel-hystrix >>> >>> Bilgin >>> >>> >>> On 25 August 2015 at 02:13, Raul Kripalani <r...@evosent.com> wrote: >>> > Hi team, >>> > >>> > Hystrix [1] is a powerful toolbox framework based on RxJava for building >>> > JVM-based fault-tolerant distributed systems, made OSS by Netflix. >>> > >>> > Due to the nature of Camel, our users inherently deal with distributed >>> > systems and therefore I thought integrating this framework into Camel >>> would >>> > be useful. >>> > >>> > I wanted to go beyond the typical (boring ;-)) URI-based component. >>> Hystrix >>> > has lots of features, some of which can take predicates (which in our >>> world >>> > translate to Processors and Expressions), so a fluent DSL is especially >>> > appealing here. >>> > >>> > I'm doing this work in the feature/camel-hystrix branch at the ASF Git >>> [2]. >>> > I created a ticket with my functionality roadmap [3], and ticked out what >>> > has already been implemented. >>> > >>> > I foresee some difficulty with integrating Archaius (Netflix' config >>> > framework) with our Camel property placeholders and OSGi Config Admin. >>> I'd >>> > also like to achieve Turbine integration to enable the awesome Hystrix >>> > dashboard across clusters [4]. >>> > >>> > If you have ideas, feel free to post them. If you have spare cycles, feel >>> > free to contact me if you'd like to participate in the development so we >>> > can coordinate. >>> > >>> > [1] https://github.com/Netflix/Hystrix >>> > [2] https://github.com/apache/camel/tree/feature/camel-hystrix >>> > [3] https://issues.apache.org/jira/browse/CAMEL-9098 >>> > [4] https://github.com/Netflix/Hystrix/tree/master/hystrix-dashboard >>> > >>> > Regards, >>> > >>> > *Raúl Kripalani* >>> > Apache Camel PMC Member & Committer | Enterprise Architect, Open Source >>> > Integration specialist >>> > http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani >>> > http://blog.raulkr.net | twitter: @raulvk >>> >>> >>> >>> -- >>> Bilgin Ibryam >>> Camel Committer at ASF & Integration Architect at Red Hat >>> Blog: http://ofbizian.com | Twitter: @bibryam >>> >>> Camel Design Patterns https://leanpub.com/camel-design-patterns >>> Instant Apache Camel Message Routing http://www.amazon.com/dp/1783283475 >>> > > > > -- > Bilgin Ibryam > Camel Committer at ASF & Integration Architect at Red Hat > Blog: http://ofbizian.com | Twitter: @bibryam > > Camel Design Patterns https://leanpub.com/camel-design-patterns > Instant Apache Camel Message Routing http://www.amazon.com/dp/1783283475 -- Bilgin Ibryam Camel Committer at ASF & Integration Architect at Red Hat Blog: http://ofbizian.com | Twitter: @bibryam Camel Design Patterns https://leanpub.com/camel-design-patterns Instant Apache Camel Message Routing http://www.amazon.com/dp/1783283475