零配置方法启动DUBBO
说明
随着java注解技术的出现,确是程序员的一大福音,之前一大堆配置文件才能完成的功能,现在只需一个简单的注解就可以搞定。DUBBO也与时俱进,提供了基于注解的方法开发应用程序。
零注解提供方代码开发
- 创建扫描类
@EnableDubbo(scanBasePackages = "com.cym")
public class AnnoBean {
}
说明: @EnableDubbo注解的作用是让dubbo到对应的类下去查找有 @Service和@Reference注解的类,其中@Service用于提供方暴露服务,@Reference用于消费方订阅服务信息
- 新增dubbo.properties文件,此文件用于存放注册中心信息,dubbo提供方工程名称等信息。
dubbo.application.name=dubbo_provider
dubbo.application.owner=world
dubbo.registry.address=zookeeper://127.0.0.1:2181
- 用spring加载AnnoBean,当此类加载时就会自动的到 对应的包下去找满足条件的类。
public class AnnProvider {
public static void main(String[] args) throws IOException {
new AnnotationConfigApplicationContext(AnnoBean.class);
System.in.read();
}
}
- 运行结果
到此,我们成功的完成了零配置DUBBO的提供方搭建
零注解消费方代码开发
- 新建扫描类
@EnableDubbo(scanBasePackages = "com.cym")
public class AnnoBean {
}
- 测试调用提供方服务
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AnnoBean.class)
public class AnnoTest {
@Reference(check = false)
UserService userService;
@Test
public void test1() {
System.out.println(userService.queryUser("chenyuemao"));
}
}
说明:
- @Reference 注解就是表示从提供方订阅服务信息,里面的 check = false 表示消费方启动时不校验是否服务提供方已经启动。
- 运行结果如下
到此,我们成功的完成了零配置DUBBO的消费方搭建,并成功的从服务的提供方取到了值
直连提供者
- Dubbo 中点对点的直连方式,在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获取列表
<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />
只订阅不注册
- 为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行。可以让服务提供者开发方,只订阅服务(开发的服务可能依赖其它服务),而不注册正在开发的服务,通过直连测试正在开发的服务。
- 禁用注册配置
<dubbo:registry address="127.0.0.1:9090" register="false" />
或者
<dubbo:registry address="127.0.0.1:9090?register=false" />
服务分组
- 当一个服务有多个不同的实现时,可以为这个服务进行分组,在零配置情况下,可以用@Service(group = “groupImpl”),其中的group = "groupImpl"就表示分组。
@Service(group = "groupImpl")
public class GroupImpl implements Group {
@Override
public String doSomething(String s) {
System.out.println("===========GroupImpl.doSomething===========");
return "===========GroupImpl.doSomething===========";
}
}
而在消费端调用时,也要在 @Reference注解中加入group配置
@Reference(check = false, group = "groupImpl")
Group group;