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 {