转载 :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 的消费者进行限流)