三.注解版
此处仍以配置文件版的三个工程为例
1.provider工程
1-1 UserServiceImpl
//@Service
//@com.alibaba.dubbo.config.annotation.Service
@Component
@Service
public class UserServiceImpl implements UserService {
@Override
public User findUser() {
User user = new User();
user.setId(1);
user.setUsername("admin");
user.setPassword("123456");
user.setPhone("13812345678");
user.setAddress("江苏-南京");
return user;
}
}
1-2 配置文件
<?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://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--
配置当前提供方的应用名,用于暴露给注册中心
该名字可以随便写,但是不能重复,具有唯一性
一般情况下:使用当前的功能模块名
-->
<dubbo:application name="dubbo-provider" />
<!--
配置注册中心,此处使用Zookeeper作为注册中心
其address表示需要连接的地址,其前缀为当前的注册中心的名字
后面为注册中心的服务器的ip地址与端口号
-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!--
用dubbo协议在8888端口暴露服务
配置dubbo的协议与端口,通过指定的端口提供服务
-->
<dubbo:protocol name="dubbo" port="8888" />
<!-- 注解版 -->
<dubbo:annotation package="com.itany.dubbo.service"/>
<context:component-scan base-package="com.itany.dubbo.service.impl"/>
</beans>
2.consumer工程
2-1 UserController
@Controller
public class UserController {
// 此处调用的是提供者暴露的接口
// 而不再是由Spring提供的bean
// 因此,此处不能使用@Autowire
// 使用dubbo提供的注解@Reference
// 此处Reference导包不要出错
// com.alibaba.dubbo.config.annotation.Reference
@Reference
private UserService userService;
public void findUser(){
System.out.println("userService:"+userService);
User user = userService.findUser();
System.out.println("user:"+user);
}
}
2-2 配置文件
<?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://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<dubbo:application name="dubbo-consumer" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 注解版 -->
<dubbo:annotation package="com.itany.dubbo.controller"/>
<context:component-scan base-package="com.itany.dubbo.controller"/>
</beans>
3.测试
-
启动注册中心
- 此处使用的是Zookeeper作为注册中心
-
启动提供者
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:provider.xml"); System.out.println("ac:"+ac); // 由于提供者的服务必须一致处于启动状态 // 此处方法不能停止,模拟一个过程 new Scanner(System.in).next(); }
-
启动消费者
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:consumer.xml"); UserController userController = (UserController) ac.getBean("userController"); userController.findUser(); }