博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Dubbo - 02入门HelloWorld

Posted on 2021-01-09 22:45  Kingdomer  阅读(106)  评论(0)    收藏  举报

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;