-
两个机器传输数据,如何传输Java对象
-
Serializable
-
dubbo内部已经将序列化和反序列化的过程内部封装了,我们主需要在定义pojo类时实现Serializable接口即可
-
一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块.
-
-
注册中心挂了,服务是否可以正常访问
-
可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心.
-
当服务提供者地址发生变化时,注册中心会通知服务消费者.
-
-
服务消费者在调用服务提供者的是否发生了阻塞,等待的情形,这个时候,服务消费者会一直等待下去.
-
在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩.
-
dubbo利用超时机制来解决这个问题设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
-
使用timeout属性配置超时时间,默认1000,单位毫秒.
@Service(timeout = 1000,retries = 2)@Reference(timeout = 1000)
-
如果服务的消费方和调用方都设置了超时时间,建议配置在服务提供方
4.Dubbo高级特性-重试
-
设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
-
如果出现网络抖动,则这一次请求就会失败
-
dubbo提供了重试机制来避免类似问题的发生
-
通过retries属性来设置重试次数,默认为两次.//一共请求三次
5.Dubbo高级特性-多版本
-
灰度发布 : 当出现新功能时,会让一部分用户先使用新功能,用户反馈没有问题时,再将所有用户迁移至新的功能.
-
dubbo中使用version属性来设置和调用统一接口的不同版本.
设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
如果出现网络抖动,则这一次请求就会失败
dubbo提供了重试机制来避免类似问题的发生
通过retries属性来设置重试次数,默认为两次.//一共请求三次
-
灰度发布 : 当出现新功能时,会让一部分用户先使用新功能,用户反馈没有问题时,再将所有用户迁移至新的功能.
-
dubbo中使用version属性来设置和调用统一接口的不同版本.
服务提供方
@Service(timeout = 3000,retries = 0,version = "v1.0") //or @Service(timeout = 3000,retries = 0,version = "v2.0")
服务消费方
@Reference(version = "v2.0")6.Dubbo高级特性-负载均衡
6.1 负载均衡策略-Random
-
按权重随机,默认值,按权重设置随机概率.
@Service(weight = 100)
@Reference(loadbalance = "random") //在AbstractLoadBalance的实现类中进行查找6.2 负载均衡策略-RoundRobin
-
按权重轮询
@Reference(loadbalance = "roundrobin") //在AbstractLoadBalance的实现类中进行查找6.3 负载均衡策略-LeastActive
-
最少活跃调用次数,相同活跃数的随机(询问服务者集群处理最后一次请求所花费的时间,选择花费时间最少的那个)
-
一致性Hash,相同参数的请求总是发送到统一提供者.
-
失败重试.默认值.当出现失败,重试其他服务器,默认重试2次,使用retries配置,一般用于读操作.
@Reference(cluster = "failover") //在Cluster的实现类中去找7.2 集群容错模式-Failfast Cluster
-
快速失败,只发起一次调用,失败立即报错,通常用于写操作.
-
失败安全,出现异常时,直接忽略,返回一个空结果
-
失败自动恢复,后台记录失败请求,定时重发.
-
并行调用多个服务器,只要一个成功即返回
-
广播调用所有提供者,逐个调用,任意一台报错则报错
表示消费方对该服务的方法调用都直接返回null值,不乏其远程调用.用来屏蔽不重要服务不可用时对调用方的影响
@Reference(mock = "force:return null" ) //不再去调用远程服务了8.2 mock=fail:return null
表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常.用来容忍不重要服务不稳定时对调用方的影响.
9. SpringBoot整合Dubbo,demo 9.1 interface-api-
将service接口和entity放入到公共接口模块,公用的依赖也放入公共模块的pom当中
-
service接口和pojo类就不用看了,都是最简单的.啊...entity用的lombok的@Data注解
POM
9.2 my-springboot-user-service(provider)org.springframework.boot spring-boot-starterorg.projectlombok lombokorg.springframework.boot spring-boot-starter-webcom.alibaba.boot dubbo-spring-boot-starter0.2.0
-
我这里的provider也对外提供了服务
UserServiceImpl
@Service //spring
@com.alibaba.dubbo.config.annotation.Service(timeout = 3000,retries = 2,weight = 10) //alibaba dubbo
public class UserServiceImpl implements UserService {
@Override
public User selectUserById(int id) {
System.out.println("权重为2的被访问");
User user = new User();
user.setId(1);
user.setName("wuweinan");
user.setAge(23);
return user;
}
}
-
@Service //Spring 注入IOC容器
-
@com.alibaba.dubbo.config.annotation.Service(timeout = 3000,retries = 2,weight = 10) //alibaba dubbo 对外提供服务
Application
@SpringBootApplication
@EnableDubbo
public class MySpringbootUserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringbootUserServiceApplication.class, args);
}
}
application.yml
server:
port: 8080
dubbo:
application:
name: dubbo-user
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20880
POM
9.3 my-meeting-consumer(consumer)com.nanoswarm my-interface-api0.0.1-SNAPSHOT
MeetingServcieImpl
@Service
public class MeetingServiceImpl implements MeetingService {
@Reference(loadbalance = "random")
private UserService userService;
@Override
public MeetingPublish selectMeetingByMeetingCode(String meetingCode) {
MeetingPublish m = new MeetingPublish();
m.setId(1);
m.setMeetingCode(meetingCode);
m.setName("this is the meetingName");
m.setUid(2);
//TODO dubbo远程调用
User user = userService.selectUserById(1);
System.out.println(user);
return m;
}
}
Application
@EnableDubbo
@SpringBootApplication
public class MyMeetingConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MyMeetingConsumerApplication.class, args);
}
}
application.yml
server:
port: 8081
dubbo:
application:
name: dubbo-meeting
registry:
address: zookeeper://localhost:2181
POM
com.nanoswarm my-interface-api0.0.1-SNAPSHOT



