Dubbo(二)
1.相关配置
1.1包扫描
服务提供者和服务消费者都需要配置,表示扫描指定包(包括子包)下的类。
<dubbo:annotation package="对应包名(如:com.aa.service)"/>
如果不使用包扫描,也可以用如下配置来发布服务(不过不推荐):
<bean id="helloService" class="com.aa.service.impl.HelloServiceImpl" />
<dubbo:service interface="com.aa.api.HelloService" ref="helloService" />
作为服务消费者,用如下配置来引用服务:
<!-- 生成远程服务代理,可以和本地bean一样使用helloService -->
<dubbo:reference id="helloService" interface="com.aa.api.HelloService" />
上面这种方式发布和引用服务,一个配置项(dubbo:service、dubbo:reference)只能发布或者引用一个 服务,如果有多个服务,这种方式就比较繁琐了。推荐使用包扫描方式。
1.2协议
<dubbo:protocol name="dubbo" port="20880"/>
一般在服务提供者一方配置,可以指定使用的协议名称和端口号。其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。 推荐使用的是dubbo协议。
dubbo 协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机 器数远大于服务提供者机器数的情况。不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="rmi" port="1099" />
<!-- 使用dubbo协议暴露服务 -->
<dubbo:service interface="com.aa.api.HelloService" ref="helloService"
protocol="dubbo" />
<!-- 使用rmi协议暴露服务 -->
<dubbo:service interface="com.aa.api.DemoService" ref="demoService"
protocol="rmi" />
1.3负载均衡
默认为随机(ramdom)调用均衡,配置负载均衡策略,既可以在服务提供者一方配置,也可以在服务消费者一方配置,如下:
@Controller
@RequestMapping("/demo")
public class HelloController {
//在服务消费者一方配置负载均衡策略
@Reference(check = false,loadbalance = "random")
private HelloService helloService;
@RequestMapping("/hello")
@ResponseBody
public String getName(String name){
//远程调用
String result = helloService.sayHello(name);
System.out.println(result);
return result;
}
}
可以通过启动多个服务提供者来观察Dubbo负载均衡效果。
注意:因为我们是在一台机器上启动多个服务提供者,所以需要修改tomcat的端口号和Dubbo服务的
端口号来防止端口冲突。
在实际生产环境中,多个服务提供者是分别部署在不同的机器上,所以不存在端口冲突问题。