I did had a look but as it does not use KubernetesDnsServiceCallExpression I'm having hard times to figure out how it works, shouldn't KubernetesDnsServiceCallExpression be used instead of KubernetesServiceCallExpression ?
--- Luca Burgazzoli On Wed, Jun 1, 2016 at 2:54 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > 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