06第一章:(6)Dubbo 与 SpringBoot 整合

一、服务提供者

1、创建一个 boot-user-service-provider 的 SpringBoot 工程

2、加入 gmall-interface 依赖


<dependency>
    <groupId>com.njf.gmall</groupId>
    <artifactId>gmall-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

这里对接口进行了修改:

public interface OrderService {

    /**
     * 初始化订单
     * @param userId
     */
    List<UserAddress> initOrder(String userId);
}


public interface UserService {

    /**
     * 按照用户id返回所有的收货地址
     * @param userId
     * @return
     */
    List<UserAddress> getUserAddressList(String userId);

}

3、提供 UserService 服务


@Component
public class UserServiceImpl implements UserService {

    @Override
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
        UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
        return Arrays.asList(address1, address2);
    }
}

二、服务消费者

1、创建一个 boot-order-service-consumer 的 SpringBoot 工程

2、加入 gmall-interface 依赖


<dependency>
    <groupId>com.njf.gmall</groupId>
    <artifactId>gmall-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3、准备调用 UserService 进行消费

三、SpringBoot 整合 Dubbo

1、整合服务提供者

(1)引入 spring-boot-starter 以及 dubbo 和 curator 的依赖


<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

注意 starter 版本适配:

(2)在 application.properties 中配置提供者

dubbo.application.name=boot-order-service-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181

dubbo.protocol.name=dubbo
dubbo.protocol.port=20882

dubbo.monitor.protocol=registry

属性说明:

  • application.name 就是服务名,不能跟别的 dubbo 提供端重复
  • registry.protocol 是指定注册中心协议
  • registry.address 是注册中心的地址加端口号
  • protocol.name 是分布式固定是 dubbo,不要改。
  • base-package 注解方式要扫描的包

(3)使用 dubbo 中的 @Service 暴露服务


@Component
@Service
public class UserServiceImpl implements UserService {

    @Override
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
        UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
        return Arrays.asList(address1, address2);
    }
}

(4)开启基于注解的 Dubbo 功能


@EnableDubbo
@SpringBootApplication
public class BootUserServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootUserServiceProviderApplication.class, args);
    }

}

2、整合服务消费者

(1)引入 spring-boot-starter 以及 dubbo 和 curator 的依赖


<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

(2)在 application.properties 中配置消费者

dubbo.application.name=boot-order-service-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181

dubbo.monitor.protocol=registry

(3)使用 dubbo 中的 @Reference 注解引用服务


@Service
public class OrderServiceImpl implements OrderService {

    @Reference
    UserService userService;

    @Override
    public List<UserAddress> initOrder(String userId) {
        System.out.println("用户ID:" + userId);
        //1.查询用户的收货地址
        List<UserAddress> userAddressList = userService.getUserAddressList(userId);
        System.out.println("userAddressList = " + userAddressList);

        userAddressList.forEach(t -> System.out.println(t.getUserAddress()));
        System.out.println("调用完成!");
        return userAddressList;
    }
}

(4)开启基于注解的 Dubbo 功能


@EnableDubbo //开启基于注解的 dubbo 功能
@SpringBootApplication
public class BootOrderServiceConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
    }

}

3、提供一个 Controller 进行测试


@RestController
public class OrderController {

    @Autowired
    OrderService orderService;

    @GetMapping(value = "/initOrder")
    public List<UserAddress> initOrder(@RequestParam("uid") String uid) {
        List<UserAddress> userAddresses = orderService.initOrder(uid);
        return userAddresses;
    }
}

4、测试

5、dubbo 注解

@Service、@Reference

如果没有在配置中写 dubbo.scan.base-package,还需要使用@EnableDubbo 注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值