Dubbo - 02入门HelloWorld
(1)项目框架
(1.1)项目结构
interface模块是提供provider要实现的接口和domain类, provider模块是服务提供者, 实现interface接口的功能, consumer模块是服务消费者,调用provider提供的服务。

(1.2)POM文件
<dependencies> <dependency> <groupId>com.bearpx</groupId> <artifactId>dubbo-user-service-interface</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> // 2.7之后的版本 由org.apache.dubbo 提供 </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> // 2.6之后版本 curator 操作zookeeper 客户端; <version>2.12.0</version> </dependency> </dependencies>
(2)接口模块

(3)XML方式(Dubbo2.6.2)
(3.1)生产者Provider模块
public class UserServiceImpl implements UserService { @Override public List<User> getUser(String userId) { User u1 = new User("1","张三", "15790908877","青岛市南区"); User u2 = new User("2","溜溜", "13511223344","济南历城区"); List<User> userList = new ArrayList<User>(); userList.add(u1); userList.add(u2); List<User> list = userList.stream().filter(user -> user.getUserId().equals(userId)).collect(Collectors.toList()); return list; } }
resources/provider.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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 1.指定当前服务/应用的名字(同样的服务名字相同,不能和别的服务同名)--> <dubbo:application name="dubbo-user-service-provider" /> <!-- 2.指定注册中心的位置 --> <dubbo:registry protocol="zookeeper" address="192.168.100.86:2181" /> <!-- 3.指定通信协议(通信端口)--> <dubbo:protocol name="dubbo" port="20881" /> <!--4. 暴露服务--> <dubbo:service interface="com.bearpx.dubbo.user.api.UserService" ref="userServiceImpl" /> <bean id="userServiceImpl" class="com.bearpx.dubbo.user.api.impl.UserServiceImpl" /> </beans>
主启动程序,使用 SpringBoot
@SpringBootApplication public class UserProviderApplication { public static void main(String[] args) throws IOException { ApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml"); ((ClassPathXmlApplicationContext) ioc).start(); System.in.read(); } }
(3.2)消费者Consumer模块
@Component public class OrderServiceImpl implements OrderService { @Autowired UserService userService; @Override public List<User> initOrder(String id) { List<User> userList = userService.getUser("1"); return userList; } }
resources/consumer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.bearpx.dubbo.order.api.impl"/> <dubbo:application name="dubbo-user-service-consumer" /> <dubbo:registry protocol="zookeeper" address="192.168.100.86:2181" />
// 声明需要调用的远程服务的接口: 生成远程服务代理 <dubbo:reference id="userService" interface="com.bearpx.dubbo.user.api.UserService" /> </beans>
主启动程序,测试功能
@SpringBootApplication public class ConsumerApplication { public static void main(String[] args) throws IOException { ApplicationContext ioc = new ClassPathXmlApplicationContext("consumer.xml"); OrderService orderService = (OrderService) ioc.getBean(OrderService.class); List<User> list = orderService.initOrder("1"); System.out.println(list); // [User{userId='1', userName='张三', phone='15790908877', address='青岛市南区'}] } }
(4)注解方式(Dubbo2.6.2)
(4.1)生产者Provider
@Service // import com.alibaba.dubbo.config.annotation.Service; @Component public class UserServiceImpl implements UserService {
@EnableDubbo @SpringBootApplication public class UserProviderApplication { public static void main(String[] args) throws IOException { SpringApplication.run(UserProviderApplication.class,args); System.in.read(); } }
resource/application.properties
dubbo.application.name=dubbo-user-service-provider-anno
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.100.86:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
(4.2)消费者Consumer
@Component public class OrderServiceImpl implements OrderService { @Reference UserService userService; // 省略其他代码 }
@EnableDubbo @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
@Controller public class OrderController { @Autowired private OrderService orderService; @RequestMapping("/initOrder") @ResponseBody public List<User> initOrder(@RequestParam("uid") String uid){ List<User> list = orderService.initOrder(uid); System.out.println("uid:" + uid + "-->" + list); return list; } }
测试

(5)注解方式(Dubbo2.7.8)
(5.1)POM文件
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> // 必须引入recipes <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.8</version> </dependency>
(5.2)生产者Provider
@EnableDubbo //org.apache.dubbo.config.spring.context.annotation.EnableDubbo @SpringBootApplication public class UserProviderApplication {
Service 使用 @DubboService 注解
@DubboService @Component public class UserServiceImpl implements UserService {
(5.3)消费者Consumer
@Component public class OrderServiceImpl implements OrderService { @DubboReference UserService userService;
浙公网安备 33010602011771号