dubbo基础(三)——springboot使用dubbo框架

dubbo集成spring boot

spring boot肯定是现在用的做多的开发框架,而dubbo框架是最流行的rpc框架之一,整合springboot和dubbo的使用很有必要。本篇博客还是根据上一篇中的dubbo简单demo的简单示例来整合spring boot。(上一篇传送门:dubbo-demo)

依赖

因为是springboot项目,dubbo官方也提供了dubbo的starter。

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

这里注意下spring boot的版本和dubbo-starter的版本映射关系,这里使用的是spring boot 2.1.3版本,用的是0.2版本的dubbo依赖,而1.x版本的spring boot框架则对应0.1.x版本的dubbo starter。

这里引入了starter之后也引入了之前在上一篇中的zk客户端依赖。

这里也遇到了idea新建maven module之后的一些坑,一直没办法加载对应的类,这里提示下可以尝试查看idea的maven配置,是不是把新加入的module勾选了ignore:

boot-provider

这里也是去先构造对应的服务提供者,提供一个用户地址的简单查询服务。但是spring boot多采用注解驱动和避免了很多繁琐的xml配置,所以这里我们去将dubbo的全局配置配置在application.properties文件中,而关于服务的暴露也是用注解暴露。

dubbo应用配置
# 应用方信息
dubbo.application.name=boot-dubbo-demo
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 协议名称
dubbo.protocol.name=dubbo
# 协议端口
dubbo.protocol.port=20800

可以看到这里其实就是对应的之前普通spring项目中使用dubbo的provider.xml的标签配置。

这里要注意是在启动类上要加入@EnableDubbo注解开启spring boot对dubbo的支持。

服务的暴露

这里是用的@Service注解暴露服务,其实也是对应着dubbo-provider.xml中的dubbo:service标签,这里要注意是不要引入是spring的@Service注解。可以看到这个service注解中也有dubbo:service中对应的属性,比如这里写入的version版本信息。

import com.alibaba.dubbo.config.annotation.Service;
import javabean.UserAddress;
import org.springframework.stereotype.Component;
import service.user.UserService;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 夸克
 * @date 2019/3/18 00:15
 */
@Component
@Service(version = "boot-1.0.0")
public class UserServiceImpl implements UserService {

    @Override
    public List<UserAddress> getUserAddressList(String userId) {

        System.out.println(Thread.currentThread().getName() + " 调用到了消费者");
        final UserAddress userAddress1 = new UserAddress()
                .setUserId(1L)
                .setAddressId(1L)
                .setAddressNo("123")
                .setAddressStr("庆丰大街")
                .setUserName("小张");

        final UserAddress userAddress2  = new UserAddress()
                .setUserId(1L)
                .setAddressId(2L)
                .setAddressNo("456")
                .setAddressStr("西湖")
                .setUserName("小王");

        return new ArrayList<UserAddress>(){{
            add(userAddress1);
            add(userAddress2);
        }};
    }
}

启动provider项目,就可以在dubbo-admin上看到注册到注册中心的服务。

boot-consumer

消费者端要配置大体和服务提供者端是一样的,也是用@Refernce注解来代替对应的dubbo:refernce标签。这里也要在启动类上去加入@EnableDubbo注解。

dubbo的配置
# 应用方信息
dubbo.application.name=boot-dubbo-demo
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

# 启动端口
server.port=8081

这里的端口是8081是因为provider和consumer是两个spring bootmodule 都是启动类去启动的,这里测试在一台电脑上要是不同的端口。

引用暴露的服务
@Service
public class OrderServiceImpl implements OrderService {

    @Reference(version = "boot-1.0.0", timeout = 50000)
    private UserService userService;

    /**
     * 生成订单过程:
     *  调用远程接口 查询用户信息
     *  将用户信息去生成订单
     * @return
     */
    @Override
    public List<UserAddress> initOrder() {
        List<UserAddress> userAddressList = userService.getUserAddressList("1");
        if (null != userAddressList && userAddressList.size() > 0) {
            System.out.println("调用远程接口完成");

            Optional.of(userAddressList).ifPresent(System.out::println);
        }

        return userAddressList;
    }
}

可以看到@Reference注解中也可对应dubbo:reference标签的属性,这里设置的超时时间和对应的版本。

简单controller测试

这里去写了一个简单的controller去测试spring-boot使用dubbo这个框架:

@RestController
public class TestController {

    @Resource
    private OrderService orderService;

    @GetMapping(path = "/initOrder")
    public List<UserAddress> initOrder(@RequestParam("userId") Integer userId) {
        return orderService.initOrder();
    }
}

github地址

https://github.com/zhanglijun1217/dubbo-demo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值