On Wed, Jun 1, 2016 at 2:53 PM, Luca Burgazzoli <lburgazz...@gmail.com> wrote: > --- > Luca Burgazzoli > > > On Wed, Jun 1, 2016 at 2:44 PM, Luca Burgazzoli <lburgazz...@gmail.com> wrote: >> --- >> Luca Burgazzoli >> >> >> On Wed, Jun 1, 2016 at 9:13 AM, Luca Burgazzoli <lburgazz...@gmail.com> >> wrote: >>> Will fix them today >>> --- >>> Luca Burgazzoli >>> >>> >>> On Wed, Jun 1, 2016 at 8:56 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: >>>> Hi >>>> >>>> Looks good there is only a few spots I have some comments. >>>> >>>> - There is some code that has not null check for load balancer / >>>> server list strategy. The kubernetes component can do without that >>>> when you use ENV or DNS as lookup. >> >> Can you point me out to such places ? >> > > Sorry found it, in fact now Env returns an immutable list which > contains a single server. > BTW, was DNS support complete in Kubernetes ServiceCall ? looking at > the code looks like ip/port are never set >
The DNS uses a domain name that includes the service name but without ip and port number. And then it has some convention for a prefix / suffix etc. But yeah it may need a bit more look and testing running on a k8s platform. >>>> >>>> - There was a place where you do some logging and it says Consul when >>>> its in fact generic >>>> >>>> - You have label("ServiceCall") but that label name seems wrong. eg >>>> notice that label is like a "tag" not a leading label in a UI form >>>> etc. Yeah we should maybe have named it "tag" or "group" instead. >>>> >>>> - In the Java DSL we often have it return Type so you do not change >>>> the type and makes the fluent easier to use. Only if you need to do >>>> some more advanced configuration then we have other methods that >>>> return the ServiceCallDefinition type so you can call specialized >>>> method on that in the Java DSL. >>>> >>>> >>>> >>>> serviceCall().name("foo").loadBalancer("random").end() >>>> // here you have the ServiceCallDefinition in the DSL to call >>>> specialized methods. But have to call end() to end it >>>> >>>> And then with short hand that just return type >>>> >>>> serviceCall("foo") >>>> // here the Type is not changed and you just want to call the >>>> service foo, and NOT do any other configuration. Then you do not need >>>> the end() >>>> >>>> >>>> >>>> >>>> >>>> On Tue, May 31, 2016 at 4:54 PM, Luca Burgazzoli <lburgazz...@gmail.com> >>>> wrote: >>>>> I've committed some more code to my branch [2], it is not yet complete >>>>> (i.e. I still have to make ribbon code to use the new common classes >>>>> and some APIs are not clean enough) but a feedback would be really >>>>> welcome. >>>>> >>>>> --- >>>>> Luca Burgazzoli >>>>> >>>>> >>>>> On Mon, May 30, 2016 at 10:55 AM, Claus Ibsen <claus.ib...@gmail.com> >>>>> wrote: >>>>>> On Mon, May 30, 2016 at 10:49 AM, Luca Burgazzoli >>>>>> <lburgazz...@gmail.com> wrote: >>>>>>> So like serviceCall("myServiceCall").configurationRef("myConf") ? >>>>>> >>>>>> Yeah there is already a DSL for that named >>>>>> serviceCallConfiguration("myConf") >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> --- >>>>>>> Luca Burgazzoli >>>>>>> >>>>>>> >>>>>>> On Mon, May 30, 2016 at 10:26 AM, Claus Ibsen <claus.ib...@gmail.com> >>>>>>> wrote: >>>>>>>> On Mon, May 30, 2016 at 10:16 AM, Luca Burgazzoli >>>>>>>> <lburgazz...@gmail.com> wrote: >>>>>>>>> do you mean something like serviceCallRef("myServiceCall") ? >>>>>>>>> --- >>>>>>>> >>>>>>>> No you need to provide >>>>>>>> >>>>>>>> - a) name of service to call >>>>>>>> - b) reference to configuration of service >>>>>>>> >>>>>>>> a = mandatory >>>>>>>> b = optional. As if there is only 1 configuration then use that. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> Luca Burgazzoli >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sun, May 29, 2016 at 9:42 AM, Claus Ibsen <claus.ib...@gmail.com> >>>>>>>>> wrote: >>>>>>>>>> On Thu, May 26, 2016 at 7:30 PM, Luca Burgazzoli >>>>>>>>>> <lburgazz...@gmail.com> wrote: >>>>>>>>>>> --- >>>>>>>>>>> Luca Burgazzoli >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Thu, May 26, 2016 at 7:06 PM, Claus Ibsen >>>>>>>>>>> <claus.ib...@gmail.com> wrote: >>>>>>>>>>>> Hi Luca >>>>>>>>>>>> >>>>>>>>>>>> Yeah its good to get more eyes on this new set of code. When I >>>>>>>>>>>> created >>>>>>>>>>>> kubernetes and ribbon there was sure some overlap of code that >>>>>>>>>>>> could >>>>>>>>>>>> be shared, but I didn't push for much default/abstract code in >>>>>>>>>>>> camel-core because there its new code and I also wanted to see what >>>>>>>>>>>> consul, etcd, zookeeper and other distributed systems may >>>>>>>>>>>> need/require. >>>>>>>>>>>> >>>>>>>>>>>> I like the idea of the impl.remote package to have some base >>>>>>>>>>>> implementation there. >>>>>>>>>>>> >>>>>>>>>>>> Your current branch [2] has a good set of reusable code although >>>>>>>>>>>> its >>>>>>>>>>>> tied to consul currently, so that would need to be made abstract >>>>>>>>>>>> so it >>>>>>>>>>>> can be reuse by kuernetes and maybe also ribbon as well (where it >>>>>>>>>>>> makes sense). >>>>>>>>>>> >>>>>>>>>>> I've removed some consul specific stuffs that I left by mistake, >>>>>>>>>>> should be >>>>>>>>>>> a little tidy now. >>>>>>>>>>> >>>>>>>>>>> An aspect to take into account is how to make it easy to configure >>>>>>>>>>> ServiceCallServerListStrategy in case we use >>>>>>>>>>> DefaultServiceCallProcessor >>>>>>>>>>> maybe something like: >>>>>>>>>>> >>>>>>>>>>> serviceCall() >>>>>>>>>>> .name("my-service") >>>>>>>>>>> .roundRobinLoadBalancer() >>>>>>>>>>> .consulServerListStrategy() >>>>>>>>>>> .type(Strategy.ON_DEMAND) >>>>>>>>>>> .url("http://consul-host:8500") >>>>>>>>>>> .dc("west") >>>>>>>>>>> .end() >>>>>>>>>>> >>>>>>>>>>> Too ugly ? >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Yeah possible - its always tricky to find the right balance. >>>>>>>>>> >>>>>>>>>> I wonder if you may want to do this in the configuration, and then in >>>>>>>>>> the routes with serviceCall you then just need to refer to the >>>>>>>>>> service >>>>>>>>>> name / url to be used - then all the round robin, service list, and >>>>>>>>>> so >>>>>>>>>> on are configured outside the route in the configuration. >>>>>>>>>> >>>>>>>>>> We could also leave those in the route DSLs as well so you can >>>>>>>>>> override the configuration, so you can use >>>>>>>>>> >>>>>>>>>> serviceCall().name("foo").consulConfiguraiton().dc("west").end() >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> But then on the other hand if you just want to call a single service >>>>>>>>>> you may want to do it all in the route without the configuration. >>>>>>>>>> But >>>>>>>>>> if we look at rest-dsl then it separates the configuration from the >>>>>>>>>> REST endpoint. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> An aspect we haven't added yet could be to find out if we can >>>>>>>>>>>> expose >>>>>>>>>>>> some JMX attributes and operations for thise service call EIP as >>>>>>>>>>>> well? >>>>>>>>>>>> And then maybe some Camel commands so you can manage/list it from >>>>>>>>>>>> karaf and other CLIs. But this part is more "nice to have" and a >>>>>>>>>>>> bit >>>>>>>>>>>> "eye candy" but still somewhat cool. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Thu, May 26, 2016 at 4:13 PM, Luca Burgazzoli >>>>>>>>>>>> <lburgazz...@gmail.com> wrote: >>>>>>>>>>>>> Hello, >>>>>>>>>>>>> >>>>>>>>>>>>> I'm playing a little bit with the new ServiceCall EIP by adding >>>>>>>>>>>>> support for >>>>>>>>>>>>> consul service discovery and I've committed some code in my own >>>>>>>>>>>>> branch [1]. >>>>>>>>>>>>> >>>>>>>>>>>>> I borrowed most of the code from camel-kubernetes and as it ended >>>>>>>>>>>>> up being >>>>>>>>>>>>> almost a clone, I've tried to make some base/default classes as >>>>>>>>>>>>> what really >>>>>>>>>>>>> make the difference is the implementation of >>>>>>>>>>>>> ServiceCallServerListStrategy >>>>>>>>>>>>> and ServiceCallLoadBalancer so to add a simple discovery engine >>>>>>>>>>>>> you only >>>>>>>>>>>>> need to implement your own ServiceCallServerListStrategy and >>>>>>>>>>>>> eventually your >>>>>>>>>>>>> own ServiceCallLoadBalancer (i.e. for ribbon). >>>>>>>>>>>>> >>>>>>>>>>>>> Does it make sense ? >>>>>>>>>>>>> >>>>>>>>>>>>> [1] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-9989 >>>>>>>>>>>>> [2] >>>>>>>>>>>>> https://github.com/apache/camel/compare/master...lburgazzoli:CAMEL-9989?expand=1 >>>>>>>>>>>>> >>>>>>>>>>>>> --- >>>>>>>>>>>>> Luca Burgazzoli >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> 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 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 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 >>>> >>>> >>>> >>>> -- >>>> 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