Sorry, replied to the wrong mail.
On Wed, May 16, 2018 at 11:35 AM, Yang Bo <oaky...@gmail.com> wrote: > 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. > -- Best Regards, Yang.