记上篇学习,我们了解到了dubbo的xml配置文件配置方式。接下来我们继续介绍dubbo的其他的集中配置方式。
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
# 应用名 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"?> <!-- 添加 DUBBO SCHEMA --> <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"?> <!-- 添加 DUBBO SCHEMA --> <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的使用方式,这里就不在累述了,也是十分简单