So it seems we may return DTO for better ? like : RegistryMetric metric(); Then user can call toMap() method in RegistryMetric convert to map if necessary. In order to let metrics consumer import this DTO we must create a new Module named "metrics-common" and move it into ? Best Regards and Thanks! ------------------ ???????? ------------------ ??????: "bismy";<bi...@qq.com>; ????????: 2017??12??22??(??????) ????2:18 ??????: "dev"<dev@servicecomb.apache.org>;"dev"<dev@servicecomb.apache.org>; ????: Re: Desgin of Java Chassis Metrics Publish Interface
From the point of view of the end user, any update is an schema change, and we need to inform them with the formal schema. I think use String will not reduce user??s work, but more uncertainties. ------------------ Original ------------------ From: ?????? <yangyong.zh...@qq.com> Date: ????,12?? 22,2017 11:31 ???? To: dev <dev@servicecomb.apache.org> Subject: Re: Desgin of Java Chassis Metrics Publish Interface Dear All: In our desgin,If user include metrics in dependency,the metrics service would auto publish with Java Chassis Producer,also use same transport and endpoint config.For example if user config rest address 0.0.0.0:8080 in microservice.yaml,then the metrics service will available at http://:8080/metrics/{pollerIndex}. And in current architecture, the publish interface is : String metrics(int pollerIndex); the return type is String not RegistryMetric Entity,PR is here : https://github.com/apache/incubator-servicecomb-java-chassis/pull/453 WillemJiang had point out "It??s not a good way to just return the string here.", indeed use Class would get more clear code,but I think use String can also get some advantage. First we can extend more metrics result return style via config,like : 1.DTO style (Entity): {"instanceMetric":{"waitInQueue":0,"lifeTimeInQueue":{"total":0,"count":0,"average":0.0,"min":0,"max":0},"executionTime":{"total":0,"count":0,"average":0.0,"min":0,"max":0},"consumerLatency":{"total":0,"count":0,"average":0.0,"min":0,"max":0},"producerLatency":{"total":0,"count":0,"average":0.0,"min":0,"max":0}},"invocationMetrics":{}} ... 2.Map style (Map<String,Number>): {"servicecomb.instance.producer.producerLatency.average":5.0,"servicecomb.fun1.producer.lifeTimeInQueue.total":400000000,"servicecomb.fun3.producer.producerLatency.average":0.0, "servicecomb.fun1.producer.lifeTimeInQueue.min":100000000,"servicecomb.fun1.producer.producerLatency.average":5.0,"servicecomb.fun2.consumer.consumerLatency.average":3.0, "servicecomb.fun1.producer.executionTime.max":400000000,"servicecomb.fun1.producer.producerCall.tps":1.0,"servicecomb.instance.producer.producerLatency.count":2, "servicecomb.fun3.producer.producerLatency.count":0,"servicecomb.instance.consumer.consumerCall.tps":0.5,"servicecomb.fun3.producer.executionTime.count":0,"servicecom... 3.Plain Line style (Properties): servicecomb.instance.producer.producerLatency.average=5.0 servicecomb.fun1.producer.lifeTimeInQueue.total=400000 servicecomb.fun3.producer.producerLatency.average=0.0 ... Also when RegistryMetric updated , we don't need update contract yaml file,is a trouble work ... Last we can control output of RegistryMetric in order to hide some field user don't care. More information is here : https://issues.apache.org/jira/browse/SCB-11 and any suggestion is wellcome~ Best Regards and Thanks!