/** * 动态注册指定目录下的schema契约到指定服务 * @param microserviceName name of microservice * @param schemaLocation eg. "classpath*:schemas/*.yaml" */ public void registerSchemas(String microserviceName, String schemaLocation) { LOGGER.info("dynamic register schemas for {} in {}", microserviceName, schemaLocation); List<SchemaMeta> schemaMetaList = new ArrayList<>(); Resource[] resArr = PaaSResourceUtils.getResources(schemaLocation); for (Resource resource : resArr) { SchemaMeta schemaMeta = CseContext.getInstance().getSchemaLoader().registerSchema(microserviceName, resource); schemaMetaList.add(schemaMeta); } CseContext.getInstance().getSchemaListenerManager().notifySchemaListener(schemaMetaList); } }
public static ReferenceConfig getForInvoke(String microserviceName) { assertIsReady(); return CseContext.getInstance().getConsumerProviderManager().getReferenceConfig(microserviceName); }
@Override protected Object createEndpoint(String transportName, String endpoint, MicroserviceInstance instance) { Transport transport = CseContext.getInstance().getTransportManager().findTransport(transportName); if (transport == null) { return null; } return new Endpoint(transport, endpoint, instance); } }
public static ReferenceConfig getForInvoke(String microserviceName, String microserviceVersion, String transport) { assertIsReady(); return CseContext.getInstance().getConsumerProviderManager().createReferenceConfig(microserviceName, microserviceVersion, transport); } }
@SuppressWarnings("unchecked") public static synchronized void init() { if (inited) { return; } ConsumerProviderManager consumerProviderManager = new ConsumerProviderManager(); ConsumerSchemaFactory consumerSchemaFactory = new ConsumerSchemaFactory() { @Override protected Microservice findMicroservice(MicroserviceMeta microserviceMeta, String microserviceVersionRule) { return null; } }; consumerSchemaFactory.setMicroserviceMetaManager(microserviceMetaManager); consumerSchemaFactory.setSchemaListenerManager(schemaListenerManager); consumerProviderManager.setConsumerSchemaFactory(consumerSchemaFactory); CseContext.getInstance().setConsumerProviderManager(consumerProviderManager); CseContext.getInstance().setConsumerSchemaFactory(consumerSchemaFactory); CseContext.getInstance().setSchemaListenerManager(schemaListenerManager); Config config = new Config(); Class<?> cls = SimpleLoadBalanceHandler.class; config.getHandlerClassMap().put("simpleLB", (Class<Handler>) cls); ProducerHandlerManager.INSTANCE.init(config); ConsumerHandlerManager.INSTANCE.init(config); ApplicationContext applicationContext = Mockito.mock(ApplicationContext.class); Mockito.when(applicationContext.getBean(Mockito.anyString())).thenReturn(null); BeanUtils.setContext(applicationContext); inited = true; }
public MicroserviceVersionMeta(String microserviceName, String microserviceId, MicroserviceClassLoaderFactory classLoaderFactory) { super(microserviceId); this.microserviceMeta = new MicroserviceMeta(microserviceName); this.microserviceMeta.setClassLoader( classLoaderFactory.create(microservice.getAppId(), microserviceName, microservice.getVersion())); CseContext.getInstance().getConsumerSchemaFactory().getOrCreateConsumerSchema(microserviceMeta, microservice); CseContext.getInstance().getSchemaListenerManager().notifySchemaListener(microserviceMeta); }
@Override protected Object createEndpoint(String transportName, String endpoint, MicroserviceInstance instance) { Transport transport = CseContext.getInstance().getTransportManager().findTransport(transportName); if (transport == null) { return null; } return new CseServer(transport, new CacheEndpoint(endpoint, instance)); } }
protected void prepare() { referenceConfig = ReferenceConfigUtils.getForInvoke(microserviceName); MicroserviceMeta microserviceMeta = referenceConfig.getMicroserviceMeta(); if (StringUtils.isEmpty(schemaId)) { // 未指定schemaId,看看consumer接口是否等于契约接口 schemaMeta = microserviceMeta.findSchemaMeta(consumerIntf); if (schemaMeta == null) { // 尝试用consumer接口名作为schemaId schemaId = consumerIntf.getName(); schemaMeta = microserviceMeta.ensureFindSchemaMeta(schemaId); } } else { schemaMeta = microserviceMeta.ensureFindSchemaMeta(schemaId); } this.swaggerConsumer = CseContext.getInstance().getSwaggerEnvironment().createConsumer(consumerIntf, schemaMeta.getSwaggerIntf()); }
protected void findRestOperation() { String targetMicroserviceName = requestEx.getHeader(Const.TARGET_MICROSERVICE); if (targetMicroserviceName == null) { // for compatible targetMicroserviceName = RegistryUtils.getMicroservice().getServiceName(); } MicroserviceMeta selfMicroserviceMeta = CseContext.getInstance().getMicroserviceMetaManager().ensureFindValue(targetMicroserviceName); findRestOperation(selfMicroserviceMeta); }
private void onRequest(RoutingContext context) { if (transport == null) { transport = CseContext.getInstance().getTransportManager().findTransport(Const.RESTFUL); } HttpServletRequestEx requestEx = new VertxServerRequestToHttpServletRequest(context); HttpServletResponseEx responseEx = new VertxServerResponseToHttpServletResponse(context.response()); RestProducerInvocation restProducerInvocation = new RestProducerInvocation(); context.put(RestConst.REST_PRODUCER_INVOCATION, restProducerInvocation); restProducerInvocation.invoke(transport, requestEx, responseEx, httpServerFilters); } }