基于Springboot+Dubbo+Nacos 注解方式实现微服务调用

1 项目结构​​​​​​​

|-- spring-boot-dubbo-demo (父级工程)    |-- spring-boot-dubbo-base (基础工程)    |-- spring-boot-dubbo-consumer (消费者)    |-- spring-boot-dubbo-provider (生产者)

SpringBoot版本:2.2.0

Dubbo版本:2.7.0

Nacos版本:1.1.4

2 启动Nacos注册中心

Nacos官方文档:

https://nacos.io/zh-cn/docs/quick-start.html

默认账号密码是nacos

3 搭建项目

Consumer和Provider的Maven依赖如下:​​​​​​​

<dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!-- Base依赖 -->        <dependency>            <groupId>com.sans</groupId>            <artifactId>spring-boot-dubbo-base</artifactId>            <version>0.0.1-SNAPSHOT</version>        </dependency>        <!-- Dubbo依赖 -->        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo-spring-boot-starter</artifactId>            <version>2.7.0</version>        </dependency>        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo</artifactId>            <version>2.7.0</version>        </dependency>        <!-- Nacos依赖 -->        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo-registry-nacos</artifactId>            <version>2.7.1</version>        </dependency>        <dependency>            <groupId>com.alibaba.nacos</groupId>            <artifactId>nacos-client</artifactId>            <version>1.0.0</version>        </dependency></dependencies>

Consumer配置如下:​​​​​​​

# 配置端口server:  port: 8862dubbo:  # 配置服务信息  application:    name: dubbo-consumer    # 禁用QOS同一台机器可能会有端口冲突现象    qos-enable: false    qos-accept-foreign-ip: false  # 配置注册中心  registry:    address: nacos://127.0.0.1:8848  # 设置超时时间  consumer:    timeout: 4000spring:  main:    # 解决Bean重复定义问题    allow-bean-definition-overriding: true

Provider配置如下:​​​​​​​

# 配置端口server:  port: 8861dubbo:  # 配置服务信息  application:    name: dubbo-provider    # 禁用QOS同一台机器可能会有端口冲突现象    qos-enable: false    qos-accept-foreign-ip: false  # 配置注册中心  registry:    address: nacos://127.0.0.1:8848  # 设置协议-协议由提供方指定消费方被动接受  protocol:    name: dubbo    port: 20880spring:  main:    # 解决Bean重复定义问题    allow-bean-definition-overriding: true

4 Base工程编写

编写DTO​​​​​​​

/** * RPC接口DTO * 注意这里要实现序列化接口 * @Author Sans * @CreateTime 2019/11/6 23:04 */@Datapublic class ProviderTestDTO implements Serializable {    // ID    private int id;    // 名字    private String name;    // 序号    private Integer number;}

编写Serivce​​​​​​​

/** * RPC接口 * @Author Sans * @CreateTime 2019/11/6 23:03 */public interface IProviderService {    List<ProviderTestDTO> queryList();}

编写返回结果类​​​​​​​

/** * 返回结果类 * 这里采用构建者模式构建 * 优点:1.私有化构造器访问范围小 2.参数可灵活设置便于管理 * @Author Sans * @CreateTime 2019/11/7 18:59 */@Getterpublic class ResultVO<T> implements Serializable {
    /**     * 返回码     */    private int code;    /**     * 返回信息     */    private String message;    /**     * 返回数据     */    private T data;
    /** 私有化构造器  **/    private ResultVO() {}    private ResultVO(ResultVO<T> resultVO) {        this.code = resultVO.code;        this.message = resultVO.message;        this.data = resultVO.data;    }
    /**     * Build     */    public static class Builder<T>{        private ResultVO<T> resultVO;        public Builder() {            resultVO = new ResultVO<>();        }        public Builder code(int code){            resultVO.code = code;            return this;        }        public Builder message(String message){            resultVO.message = message;            return this;        }        public Builder data(T data){            resultVO.data = data;            return this;        }        public ResultVO<T> build(){            return new ResultVO<>(resultVO);        }    }}

5 Provider工程编写

在启动类上面不要忘记加上@EnableDubbo注解​​​​​​​

@EnableDubbo //开启Dubbo的注解支持@SpringBootApplicationpublic class ProviderApplication {    public static void main(String[] args) {        SpringApplication.run(ProviderApplication.class, args);    }}

实现IProviderService接口,注意这里的Serivce引用的是dubbo的包​​​​​​​

/** * 生产者Dubbo接口实现 * @Author Sans * @CreateTime 2019/11/6 23:01 */@Servicepublic class ProviderServiceImpl implements IProviderService {    @Override    public List<ProviderTestDTO> queryList() {        // 初始化数据        ProviderTestDTO testDTO1 = new ProviderTestDTO();        testDTO1.setId(1);        testDTO1.setName("学生");        testDTO1.setNumber(100);        ProviderTestDTO testDTO2 = new ProviderTestDTO();        testDTO2.setId(2);        testDTO2.setName("教师");        testDTO2.setNumber(101);        // 组装数据        List<ProviderTestDTO> list = new ArrayList<>();        list.add(testDTO1);        list.add(testDTO2);        return list;    }}

6 Consumer工程编写

和Provider工程的启动类一样,加上@EnableDubbo注解​​​​​​​

@EnableDubbo //开启dubbo的注解支持@SpringBootApplicationpublic class ConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(ConsumerApplication.class, args);    }}

编写测试接口​​​​​​​

/** * 消费测试接口 * @Author Sans * @CreateTime 2019/11/6 23:09 */@RestController@RequestMapping("/consumer")public class ConsumerController {    // Dubbo远程调用注解    @Reference    private IProviderService providerService;    @RequestMapping(value = "/list",method = RequestMethod.GET)    public ResultVO getList(){        // 远程调用        List<ProviderTestDTO> providerTestDTOList = providerService.queryList();        return new ResultVO.Builder<>().code(200).message("success").data(providerTestDTOList).build();    }}

7 测试

启动Provider工程和Consumer工程,这个时候Nacos会有对应的服务

使用Postman访问Consumer测试接口

8 项目源码​​​​​​​

码云:https://gitee.com/liselotte/spring-boot-dubbo-demoGitHub:https://github.com/xuyulong2017/my-java-demo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值