Day42项目saas-export项目-Dubbo框架**细节
原创
©著作权归作者所有:来自51CTO博客作者翁老师的教学团队的原创作品,请联系作者获取转载授权,否则将追究法律责任
Dubbo细节(一)
- (1)启动提供方服务的两种方式:
》1 部署到tomcat启动,适合正式项目
》2 通过main函数启动,适合开发阶段
阻塞方法
public class StartUp {
public static void main(String[] args) throws IOException {
//spring初始化
ClassPathXmlApplicationContext cxt= new ClassPathXmlApplicationContext("dubbo-provider.xml");
cxt.start();
//等等你在控制台上输入一个字
System.in.read();
}
}
Dubbo细节(二)配置说明(了解)
默认在第一个工程的Service是使用dubbo的@Service
第二个工程的注入是使用dubbo的@Reference
- (1)服务提供者-包扫描配置
- (2)改成服务提供者-不使用包扫描的配置
//@Service
public class HelloServiceImpl implements IHelloWordService {
@Override
public String sayHello(String name) {
return "Hello,"+name;
}
}
<!-- <dubbo:annotation package="com.wzx.service"></dubbo:annotation>-->
<bean id="helloWordService" class="com.wzx.service.impl.HelloServiceImpl"/>
<!-- 将helloWordService对应的对象,成为可以被rpc调用-->
<dubbo:service interface="com.wzx.service.IHelloWordService" ref="helloWordService"/>
- (3)服务消费者-包扫描配置
- (4)修成服务消费者-不使用包扫描的配置
不使用包扫描的方式发布和引用服务,一个配置项
public class MyController {
//要去调用provider中的Service,要求先注入Service
//>1 复制provider工程的service接口,com.wzx.service.IHelloService
//>2 使用注入,但是不使用spring的autowire,而使用是dubbo的@Service配对的
//@Reference
@Autowired
@Qualifier("helloWordService")
IHelloWordService iHelloWordService;//去provider取对象
(dubbo:service、dubbo:reference)只能发布或者引用一个服务,如果有多个服务,这种方式就比较繁琐了。推荐使用包扫描方式
。
<!--3.扫描dubbo消费注解:@Reference-->
<!-- <dubbo:annotation package="com.wzx.controller"></dubbo:annotation>-->
<!-- 让当前去获取provider的实现类对象 必须保护相同的id-->
<dubbo:reference interface="com.wzx.service.IHelloWordService"
id="helloWordService"/>
Dubbo细节(三)协议
- (1)协议一般在服务提供者一方配置,可以指定使用的协议名称和端口号。
<dubbo:protocol name=“dubbo” port=“20881”/> - (2)推荐使用的是dubbo协议。
其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="rmi" port="1099" />
<!-- 使用dubbo协议暴露服务 -->
<dubbo:service interface="com.wzx.api.HelloService" ref="helloService" protocol="dubbo" />
<!-- 使用rmi协议暴露服务 -->
<dubbo:service interface="com.wzx.api.DemoService" ref="demoService" protocol="rmi" />
Dubbo细节(四)启动时检查
- (1)什么是启动检查
<dubbo:consumer check=“false”/>
配置在服务消费者一方(提供方没有),如果不配置默认check值为true - (2)有什么用?
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题。可以通过将check值改为false来关闭检查。
- (3)在哪里使用
建议在开发阶段将check值设置为false,在生产环境下改为true
。
Dubbo细节(五)负载均衡
- (1)负载均衡(Load Balance)
其实就是将请求分摊到多个操作单元(多个节点)上进行执行,从而共同完成工作任务。 - (2)有什么算法?
在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性Hash),缺省为random随机调用 - (3)
random, roundrobin, leastactive
- (4)配置负载均衡策略,既可以在服务提供者一方配置,也可以在服务消费者一方配置
配置在消费方
public class MyController {
@Reference(check = true,loadbalance = "random")
IHelloWordService iHelloWordService;//去provider取对象
配置在提供
@Service(interfaceClass = IHelloWordService.class,loadbalance = "random")
public class HelloServiceImpl implements IHelloWordService {