环境搭建
zookepper环境搭建
1、在zk 根目录创建data文件夹存放 数据
2、conf下zoo_sample.cfg 修改为zoo.cfg
3、配置默认数据存储位置 dataDir=…/data
启动zk
zk服务运行 : cmd运行 bin下的zkServer.cmd
执行zk命令行: cmd bin下的zkCli.cmd
https://github.com/apache/dubbo-admin
流程
dubbo快速开始
项目构建
- gmall-interface
- order-service-consumser
- user-service-provider
服务提供者
依赖
<dependencies>
<dependency>
<groupId>com.zxy.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
用spring.xml注入
<!-- 1.指定服务名(不要重名) -->
<dubbo:application name="user-service-provider"></dubbo:application>
<!-- 2.指定注册中心位置 -->
<dubbo:registry address="zookeeper://localhost:2181"></dubbo:registry>
<!-- 或者 <dubbo:registry protocol="zookeeper" address="localhost:2181"></dubbo:registry> -->
<!-- 指定通信协议(通信协议,通信端口) -->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!-- 暴露服务 interface: 接口 ref: 真正实现的对象 -->
<dubbo:service interface="com.zxy.gmall.service.UserService" ref="userServiceImpl"></dubbo:service>
<bean id="userServiceImpl" class="com.zxy.gmall.service.impl.UserServiceImpl"></bean>
测试注册到zk中
public static void main(String[] args) throws IOException {
ClasspathXmlApplicationContext ioc = new ClasspathXmlApplicationContext("classpath:provider.xml");
ioc.start();
system.in.read();
}
服务消费者
用spring.xml注入
<context:component-scan base-package="com.zxy.gmall"></context:component-scan>
<!-- 指定服务名 -->
<dubbo:application name="order-service-consumser" ></dubbo:application>
<!-- 指定注册中心地址 -->
<dubbo:registry address="zookeeper://localhost:2181"></dubbo:registry>
<!-- 声明需要调用的远程接口,位接口生成远程服务代理 -->
<dubbo:reference id="userService" interface="com.zxy.gmall.service.UserService"></dubbo:reference>
<!-- 配置监控中心 -->
<!-- 或者 <dubbo:monitor address="localhost:7070" ></dubbo:monitor> -->
<dubbo:monitor protocol="register"></dubbo:monitor>
- 监控中心服务
测试远程调用
public static void main(String[] args) throws IOException {
ClasspathXmlApplicationContext ioc = new ClasspathXmlApplicationContext("classpath:consumer.xml");
OrderService bean = ioc.getBean(OrderService.class);
System.out.println("ioc启动完成");
bean.initOrder("1");
System.out.println("调用完成");
system.in.read();
}
springboot整合
starter
- spring2.0以下版本使用0.1.0
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
提供者
配置
server.port=8081
# 服务名
dubbo.application.name=boot-user-service-provider
# 注册中心
dubbo.registry.address=zookeeper://localhost:2181
# 服务端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 监控中心
dubbo.monitor.protocol=registry
提供服务
@com.alibaba.dubbo.config.annotation.Service
@Service
public class UserServiceImpl implements UserService {
@Override
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
return Arrays.asList(address1,address2);
}
}
消费者
配置
server.port=8081
dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://localhost:2181
dubbo.monitor.protocol=registry
消费服务
@Service
public class OrderServiceImpl implements OrderService
@Reference
UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
System.out.println("用户id:"+userId);
//查询用户收货地址
List<UserAddress> userAddressList = userService.getUserAddressList(userId);
return userAddressList;
}
}
配置加载顺序
- 01.虚拟机参数 -Ddubbo.protocol.port=20880
- 02.application.properties 中的 dubbo.protocol.port=20881
- 03.dubbo.properties 中的 dubbo.protocol.port=20883
其他配置
配置优先原则
官方介绍
- 01.消费方精确方法名
<dubbo:reference id="userService" interface="com.zxy.gmall.service.UserService">
<dubbo:method name="getUserAddressList" timeout="5000"></dubbo:method>
</dubbo:reference>
- 02.提供方精确方法名
<dubbo:service interface="com.zxy.gmall.service.UserService" ref="userServiceImpl">
<dubbo:method name="getUserAddressList" timeout="5000"></dubbo:method>
</dubbo:service>
- 03.消费方接口配置
<dubbo:reference id="userService" interface="com.zxy.gmall.service.UserService" timeout="5000"></dubbo:reference>
- 04.服务接口配置
<dubbo:service id="userService" interface="com.zxy.gmall.service.UserService" timeout="5000"></dubbo:reference>
- 05.消费方全局配置
<dubbo:consumer timeout="5000"></dubbo:consumer>
- 06.提供方全局配置
<dubbo:provider timeout="5000"></dubbo:provider>
启动检查
启动时检查注册中心是否存在
<dubbo:registry address="zookeeper://localhost:2181" check="true"></dubbo:registry>
启动时检查服务是否存在
- 全局服务
<!-- 消费者全局配置 -->
<dubbo:consumer check="false"></dubbo:consumer>
- 单个服务
<dubbo:reference id="userService" interface="com.zxy.gmall.service.UserService" check="false"></dubbo:reference>
- ckeck=“true” 启动时检查
true: 如果启是没有服务就抛出异常(在注册中心没有找到服务)
false: 启动时不检查, 如果消费者调用时没有服务在抛出异常(com.alibaba.dubbo.rpc.RpcException)
超时规则
默认1000ms超时
<dubbo:reference id="userService" interface="com.zxy.gmall.service.UserService" timeout="2000" > <!--优先级 2-->
<dubbo:method name="getUserAddressList" timeout="2000"></dubbo:method> <!--优先级 1-->
</dubbo:reference>
<dubbo:consumer timeout="2000"></dubbo:consumer><!--优先级 3-->
重试次数
<dubbo:reference id="userService" interface="com.zxy.gmall.service.UserService" >
<dubbo:method name="getUserAddressList" timeout="2000" retries="3"></dubbo:method>
</dubbo:reference>
负载均衡
在客户端指定
@Reference(loadbalance = "roundrobin") //使用轮询
容错
@Service(cluster = "failback") // 如果出现异常返回 null (failsafe)
整合 Hystrix
…
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。