转载 :https://blog.csdn.net/zengdongwen/article/details/93486257
Service Comb :
1、Service Center是一个具有微服务实例注册/发现能力的微服务组件,服务者可将自身实例信息注册到Service Center 以便消费者发现 使用它。 Service Center除了解决服务的注册/发现外,Service Center还拓展了依赖关系、黑白名单、依赖管理等特性。 下载Service Center注册中心,启动frontend.exe 和 service-center.exe。默认服务中心前台地址为http://127.0.0.1:30103/、后台地址为http://127.0.0.1:30100/ 启动后即可访问查看服务中心实例。 2、java Chassis 是java微服务框架,支持多种开发方式,REST(JAX-RS、Spring MVC)和RPC。拥有高性能、开箱即用的服务治理能力,包括(服务发现、熔断容错、负载均衡等)。 java Chassis: //在消费者和提供者中分别增加 Pom:
<!--hibernate校验规则--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <!--rest支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <!--ServiceComb提供的支持--> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>spring-boot-starter-provider</artifactId> </dependency> <!--流量控制策略 支持--> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>handler-flowcontrol-qps</artifactId> <version>1.0.0-m1</version> </dependency>Spring Boot启动类 //启动类增加@EnableServiceComb注解,该注解表明这是一个service Comb应用 //启用java.chassis核心功能。
@SpringBootApplication @EnableServiceComb //@EnableZuulProxy public class ApplicationConsumer { public static void main(String[] args) { SpringApplication.run(ApplicationConsumer.class,args); } }java Chassis配置: //在resources目录下面创建microservice.yaml配置文件,里面的内容如下
APPLICATION_ID: demo service_description: name: demo-provider #名字每个服务自己定义 version: 1.0.0 servicecomb: rest: address: 0.0.0.0:9000 #该端口不可被占用 service: registry: address: http://127.0.0.1:30100调用方式: 一、 Rest协议调用服务
@RestSchema(schemaId = "serviceCombDemoRest") //ID不要重复 @RequestMapping("/") public class ConsumerController implements HelloWorldInterfaces { //定义远程访问的RestTemplate private final RestTemplate restTemplate = RestTemplateBuilder.create(); @GetMapping("request") @Override public String sayHello(String name) { //service url is : cse://serviceName/operation // provider是 serviceprovider项目中的microservice.yaml 里面的 name 微服务名称 String serviceName = "demoProvider"; String result = restTemplate.getForObject ("cse://" + serviceName + "/hello?name=" + name, String.class); return result; } }二、 Rpc协议调用
@RpcSchema(schemaId = "testCalculateRpc") //注解不同 @RequestMapping("/testCalculate") public class TestCalculateController { //通过Rpc协议远程调用rest协议的接口, // microserviceName是微服务提供者的名称,在服务提供者的microservice.yaml文件中配置的service_description:name 、schemaId是微服务提供者的schemaId,在服务提供者的controller定义的时候@RpcSchema(schemaId = "sum") @RpcReference(microserviceName = "demoProvider",schemaId = "sum") //特别注意此处的microserviceName 和 schemaId TestCalculateInterface testCalculateInterface; @GetMapping("/testSum") public String testSum(Double a,Double b){ Double testSum = testCalculateInterface.testSum(a, b); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(new Date()) + ":::::::" + testSum.toString(); } }服务提供者样例:
//注意此处注解中schemaId参数,在消费者使用Rpc协议调用时需要该参数。 @RpcSchema(schemaId = "sum") //@RequestMapping(value = "/calculate") public class CalculateController implements TestCalculateInterface { @Autowired private ISumService sumService; @Override public Double testSum(Double testA, Double testB){ return sumService.calculateSum(testA, testB); } }Java Chassis 相关配置(负载均衡、流量控制、服务治理等) 参考:http://servicecomb.apache.org/cn/docs/products/java-chassis/distributed-tracing/ ---------------------------这里自己去参考链接的官方文档。我没试-------------------
APPLICATION_ID: serviceCombDemo service_description: name: demoProvider version: 1.0.0 environment: development #隔离的能力(当前支持development和production),允许处于development环境的微服务在不升级版本的情况下,仅需重启服务即可重新注册契约到服务中心。 servicecomb: rest: address: 0.0.0.0:9000 service: registry: address: http://127.0.0.1:30100 handler: chain: #配置负载均衡 # Consumer: # default: loadbalance,qps-flowcontrol-consumer #,fault-injection-consumer,bizkeeper-consumer #配置负载均衡 Provider: default: qps-flowcontrol-provider, #流量控制 tracing: enabled: true samplingRate: 0.5 loadbalance: #负载均衡策略 userDefinedEndpoint.enabled: true strategy: name: RoundRobin #Support RoundRobin Random WeigthedResponse SessionStickiness retryEnabled: true #支持配置失败重试策略 retryOnSame: 1 retryOnNext: 1 filter.status.enabled: false #限流相关配置 flowcontrol: Provider: #服务端限流 qps: enabled: true global: limit: 0 #全局限流,默认是最大值 limit: demoConsumer: 1 #对单个consuer服务进行限流,默认无,如果有要求需要添加(此处对名为demoConsumer 的消费者进行限流)