Properties配置方式:
DUBBO 在读取配置的时候会先读取 XML文件中的配置,如果没找到就会默认去读取resources目录下的 dubbo.properties 文件。而 dubbo.properties 的配置方式与 XML配置方式一样,只不过是换了种写法而已。要换成 dubbo.properties 配置,你只需把 spring-provider.xml 里关于 application、registry、protocol 里的配置注释掉,然后加上对应的 dubbo.properties 文件即可。上面例子的 spring-provider.xml 换成 properties 文件的写法是这样的:
- # 应用名
- dubbo.application.name=dubbodemo-provider
- # 注册中心地址
- dubbo.registry.address=zookeeper://localhost:2181
- # 调用协议地址
- dubbo.protocol.name=dubbo
- dubbo.protocol.port=28080
spring-consumer.xml 换成 properties 文件写法是这样的:
- # 应用名
- dubbo.application.name = dubbodemo-consumer
- # 注册中心地址
- dubbo.registry.address = zookeeper://localhost:2181
- # 调用协议地址
- dubbo.protocol.name = dubbo
- dubbo.protocol.port = 28080
此时 spring-provider.xml 和 spring-consumer.xml 文件内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
-
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo
- http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-
- <dubbo:service timeout="3000" interface="com.chanshuyi.service.IUserService" ref="userService"/>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
-
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo
- http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-
- <dubbo:reference id="userService" interface="com.chanshuyi.service.IUserService"/>
- </beans>
注意,如果你即配置了 XML 又配置了 properties 的内容,那么 DUBBO 读取时将直接读取 XML 中的配置,忽略 properties 里的配置。
一般情况下 properties 都是用来配置一些公共的信息,比如可能一个应用需要调用多个注册中心的服务,这时候它们的 application.name、dubbo.protocol.name等都是相同的,那么你可以用 properties 来配置这些公共信息。其他情况,还是建议用 XML 配置方式。
annotation配置方式
:
annotation 配置方式其实是在 XML 配置方式上,将暴露服务和调用服务与 Spring 深度结合起来。
Provider方配置:
将<dubbo:service> 节点换成 <dubbo:annotation> 节点:
<dubbo:annotation package="com.lwz.service.impl" />
其中 package 表示要扫描的包。之后在实现类里加上注解 @Service(version ="1.0.0") :
- package com.lwz.service.impl;
-
- import com.lwz.service.IUserService;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.alibaba.dubbo.config.annotation.Service;
-
- @Service(version = "1.0.0")
- public class UserServiceImpl implements IUserService {
-
- @Override
- public boolean login(String username, String password) {
- ……
- }
- }
注意,dubbo更新版本以后,这个版本信息version已经可以没有了,
@Service 注解是 alibaba.dubbo 中的 Service 注解。
Consumer方配置:
将<dubbo:reference> 节点换成 <dubbo:annotation> 节点:
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<
dubbo:annotation
package
="com.chanshuyi"
/>
- @Component
- public class UserServiceConsumer {
-
- private static Logger logger = LoggerFactory.getLogger(UserServiceConsumer.class);
-
- @Reference(version="1.0.0")
- static IUserService userService;
-
- public static void main(String args[]) {
- ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
- logger.info("执行结果:" + userService.login("hello", "hello"));
- }
- }
之后启动 provider服务,运行 UserServiceConsumer.main() 方法测试即可获得结果。
还有一种Dubbo API的使用方式,这里就不在累述了,也是十分简单