赞
踩
Dubbo Spring Cloud
是阿里为了将Dubbo
框架与SpringCloud
技术栈结合而开发出来的框架。可以与SpringCloud
生态下的各种微服务组件如Nacos
、Zookeeper
等无缝集成。
Dubbo Spring Cloud
相比OpenFeign
的特点是它可以使用TCP
协议来调用接口。
基于前面的sentinel-sample
项目复制一份修改,作为DubboSpringCloud
的模块基础。
public interface TestService { // 暴露出去的接口
String dubboTest(String message); // 测试方法
}
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
注意:
要把热部署的依赖给去掉,不然会因为类加载器的问题报加载不到类的错误。
bootstrap.yml
添加dubbo
配置项spring:
main:
allow-bean-definition-overriding: true # 新增 允许 bean 定义覆盖
# ...省略
dubbo: # 新增
scan: # 新增
base-packages: com.echoo.cloud.dubbo.provider.api.service.impl # 新增 dubbo 服务扫描基准包
protocol: # 新增 协议
name: dubbo # 新增 协议名称 dubbo
port: -1 # 新增 dubbo 协议端口( -1 表示自增,从 20880 开始)
registry: # 新增
address: spring-cloud://localhost # 新增 挂载到 Spring Cloud 注册中心
注意:
- dubbo的扫描包是指实现类所在的目录,而不是接口的目录
Dubbo Spring Cloud
基于Spring Cloud Commons
抽象实现Dubbo
服务注册与发现,应用只需增添外部化配置属性dubbo.registry.address = spring-cloud://localhost
,就能轻松地桥接到所有原生Spring Cloud
注册中心,包括:-Nacos
-Eureka
-Zookeeper
-Consul
api
模块中的接口@Service
public class TestServiceImpl implements TestService {
public String dubboTest(String message) {
return "服务员收到,over ovier";
}
}
@Service
是dubbo
的注解,别导错了
<!-- dubbo 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- api 模块 -->
<dependency>
<groupId>com.echoo.cloud.dubbo</groupId>
<artifactId>api</artifactId>
</dependency>
记得服务消费方也要把热部署依赖给去掉,不然会报错加载不到类。
dubbo: # 新增
cloud: # 新增
subscribed-services: dubbo-provider # 新增 订阅服务名
registry: # 新增
address: spring-cloud://localhost # 新增 挂载到 Spring Cloud 注册中心
protocol: # 新增 协议
name: dubbo # 新增 协议名称 dubbo
port: -1 # 新增 dubbo 协议端口( -1 表示自增,从 20880 开始)
spring:
main:
allow-bean-definition-overriding: true #新增 允许 bean 定义覆盖
...省略
@Reference
private TestService testService;
@RequestMapping("/dubboTest")
public String dubboTest() {
return testService.dubboTest("来自消费者的调用");
}
注意:这里导入
访问服务消费方的测试接口TestService
是用dubbo
的@Reference
注解
Bean
类@Getter
@Setter
public class Params implements Serializable {
private String message;
private Object object;
}
@Getter
@Setter
public class Result implements Serializable {
private Integer code;
private String description;
}
通过
Dubbo
框架传递的对象必须实现序列化接口Serializable
,否则会报错
api
模块定义一个新接口public interface TestService {
Result dubboObjectTest(Params params); // 新增 对象传递测试接口
}
@Service
public class TestServiceImpl implements TestService {
...
public Result dubboObjectTest(Params params) {
Result result = new Result();
result.setCode(200);
result.setDescription(String.format("这里是服务提供方,接收到参数[%s,%s]", params.getMessage(), params.getObject().toString()));
return result;
}
}
@RequestMapping("/dubboObjectTest")
public Result dubboTest() {
Params params = new Params();
params.setMessage("呼叫远程服务");
params.setObject("假装有数据");
return testService.dubboObjectTest(params);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。