I've pushed some new code and polished the old one to my branch so now
we have service calls for:

- camel-kubernetes
- camel-consul
- camel-etcd
- camel-dns
- camel-ribbon

Ribbon work a little bit differently from the others so it does make
use of only a small subset of common base classes.
Base classes may need a little bit more love and clean-up but I would
like to merge them if you agree.

A questions: would it make sense to add more stuffs like attributes,
tags and priority to ServiceCallServer ?

Rationale is:
- add more options to the final processor through attributes in
addition to ip and port
- capability to have a generic filter to be used in server list filtering
- create a "load balancer" that can choose the server based on the priority



---
Luca Burgazzoli


On Wed, Jun 1, 2016 at 3:34 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Ah yeah it should, you are welcome to fix that.
>
> On Wed, Jun 1, 2016 at 3:11 PM, Luca Burgazzoli <lburgazz...@gmail.com> wrote:
>> 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
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to