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.