On Tue, Jun 7, 2016 at 11:53 AM, Luca Burgazzoli <lburgazz...@gmail.com> wrote:
> 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.
>

Awesome work Luca. Thanks for taking a 2nd set of eyes on this.
Welcome to merge the code.


> 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
>

Yeah you may want to LB among servers that are in the same zone as
you, or closer to you etc.
Maybe you can log a JIRA with some of these ideas.

And sure after the merge, you are welcome to look at this as well.


>
>
> ---
> 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



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to