We may do something like this:
Keep a copy of the instance/metadata information in clientside, and when
the SC is down, the client can still use the local information to visit
services.

On Wed, May 16, 2018 at 11:01 AM, Willem Jiang <willem.ji...@gmail.com>
wrote:

> Hi Wujimin
>
> Could you write some code snippet for using the lambda in the EventBus?
> As you said earlier, the EventBus uses reflection which may cause some
> performance issue.
> But I don't know how the lambda can to the same thing in EventBus.
>
>
> Willem Jiang
>
> Blog: http://willemjiang.blogspot.com (English)
>           http://jnn.iteye.com  (Chinese)
> Twitter: willemjiang
> Weibo: 姜宁willem
>
> On Wed, May 16, 2018 at 8:49 AM, wjm wjm <zzz...@gmail.com> wrote:
>
> >  i have tested dynamic lambda, very fast, almost equals direct call
> > so abandon interface solution  at last
> > still use guava EventBus
> > if cause performance problem, then rewrite a compatible EventBus
> >
> > static <T> T createLambda(Object instance, Method instanceMethod,
> > Class<?> functionalIntfCls)
> >     throws Throwable {
> >   Method intfMethod = findAbstractMethod(functionalIntfCls);
> >
> >   MethodType invokedType = MethodType.methodType(functionalIntfCls,
> > instance.getClass());
> >   MethodType intfMethodType =
> > MethodType.methodType(intfMethod.getReturnType(),
> > intfMethod.getParameterTypes());
> >   MethodHandle methodHandle = lookup.unreflect(instanceMethod);
> >   MethodType instanceMethodType = MethodType
> >       .methodType(instanceMethod.getReturnType(),
> > instanceMethod.getParameterTypes());
> >
> >   CallSite callSite = LambdaMetafactory.metafactory(
> >       lookup,
> >       intfMethod.getName(),
> >       invokedType,
> >       intfMethodType,
> >       methodHandle,
> >       instanceMethodType
> >   );
> >   //noinspection unchecked
> >   return (T) callSite.getTarget().invoke(instance);
> > }
> >
> >
> >
> > Round 0:
> > direct:281
> > reflect:341
> > lambda:297
> >
> > Round 1:
> > direct:262
> > reflect:329
> > lambda:263
> >
> > Round 2:
> > direct:259
> > reflect:321
> > lambda:259
> >
> > Round 3:
> > direct:259
> > reflect:322
> > lambda:261
> >
> > Round 4:
> > direct:255
> > reflect:325
> > lambda:259
> >
> >
> > 2018-05-14 11:00 GMT+08:00 wjm wjm <zzz...@gmail.com>:
> >
> > > no instanceOf, no reflection during invoke
> > > only get all interfaces from class when register a listener instance
> > >
> > > 2018-05-14 10:43 GMT+08:00 Willem Jiang <willem.ji...@gmail.com>:
> > >
> > >> We need to limited the events types, otherwise it could cause some
> > trouble
> > >> if the listener interesting bunch of events.
> > >> BTW, can we set the event class type to the Listener?
> > >> I'm not sure how much efforts the instanceOf operation need.
> > >> If it is as heavy as the reflection, we may be back to the start
> point.
> > >>
> > >>
> > >> Willem Jiang
> > >>
> > >> Blog: http://willemjiang.blogspot.com (English)
> > >>           http://jnn.iteye.com  (Chinese)
> > >> Twitter: willemjiang
> > >> Weibo: 姜宁willem
> > >>
> > >> On Mon, May 14, 2018 at 9:25 AM, wjm wjm <zzz...@gmail.com> wrote:
> > >>
> > >> > class XxxListener implements AListener,BListener...{
> > >> > }
> > >> >
> > >> > All listener interfaces extends from a center type
> > >> > when we got a listener instance, then loop all it's interfaces and
> > cache
> > >> > them
> > >> > when publish event, get listener instance from cache and invoke
> > >> >
> > >> > 2018-05-13 10:07 GMT+08:00 Willem Jiang <willem.ji...@gmail.com>:
> > >> >
> > >> > > +1 for the performance enhancement.
> > >> > > If it make sense we could let the event listener to subscribe a
> > center
> > >> > type
> > >> > > of event.
> > >> > > My question is how can we describe the event that the listener is
> > >> > > interested?
> > >> > >
> > >> > >
> > >> > >
> > >> > > Willem Jiang
> > >> > >
> > >> > > Blog: http://willemjiang.blogspot.com (English)
> > >> > >           http://jnn.iteye.com  (Chinese)
> > >> > > Twitter: willemjiang
> > >> > > Weibo: 姜宁willem
> > >> > >
> > >> > > On Sat, May 12, 2018 at 4:31 PM, wjm wjm <zzz...@gmail.com>
> wrote:
> > >> > >
> > >> > > > currently we publish invocation start/startProcess/finish event
> > for
> > >> > every
> > >> > > > invocation
> > >> > > > now event based on guava EventBus
> > >> > > > it's easy to use.
> > >> > > >
> > >> > > > but EventBus based on reflection, performance is not the best.
> > >> > > > in the furture maybe we will add more invocaiton event, and more
> > >> module
> > >> > > > will subscribe invocation event.
> > >> > > >
> > >> > > > so i want to publish invocation event, change from EventBus
> event
> > to
> > >> > > event
> > >> > > > listener loaded by SPI.
> > >> > > >
> > >> > > > what's you suggestion?
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> > >
> >
>



-- 
Best Regards,
Yang.

Reply via email to