springboot集成dubbo实现微服务系统

目录

1.说明

2.示例

3.总结


1.说明

dubbo官网:https://cn.dubbo.apache.org/zh-cn/

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,支持多种语言,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

2.示例

实现说明:

创建一个空项目,在空项目中创建3个模块,分别定义接口工程,生产者工程及消费者工程。并在生产者工程及消费者工程中引入接口工程。

接口工程存放表的实体类及服务接口。

生产者工程提供服务接口的实现。

消费者工程调用服务接口。

实现步骤:

①引入dubbo依赖

复制代码
        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency><!--zookerper版本一定要匹配! -->
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.8</version>
        </dependency>

②在接口工程中创建接口

复制代码
package com.example.service;

public interface PrivoderService {
    String getInfo();
}

③在生产者工程中实现接口,并进行dubbo的配置

接口实现:使用dbboservice注解,将服务的实现暴露给dubbo

复制代码
package com.example.provider.service.impl;

import com.example.service.PrivoderService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;

/**
 * @Author linaibo
 * @Date 2023/11/18 15:28
 * @Version 1.0
 */
@Service
@DubboService
public class PrividerServiceImpl implements PrivoderService {
    @Override
    public String getInfo() {
        return "执行成功";
    }
}

配置文件:

复制代码
server:
  port: 8881
dubbo:
  application:
    name: provider-service //dubbo的应用名
  registry:
    protocol: zookeeper //使用zookeeper作为服务的注册中心
    address: 127.0.0.1:2181 //zookeeper地址
  protocol:
    name: dubbo //使用dubbo协议
    port: 20885
  consumer:
    timeout: 60000 //调用接口的超时时间
    check: false //启动时不校验消费者是否已启动
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
mybatis:
  mapper-locations: classpath*:mapper/*Mapper.xml
  type-aliases-package: com.**.domain

启动类配置:添加@EnableDubbo,用于将dubbo相关的配置bean加载到spring容器

复制代码
package com.example.provider;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author linaibo
 * @Date 2023/11/18 15:32
 * @Version 1.0
 */
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

④生产者工程中调用接口

调用:使用DubboReference指定调用的服务

复制代码
package com.example.consumer.service.impl;

import com.example.consumer.service.ConsumerService;
import com.example.domain.AjaxResult;
import com.example.service.ISysConfigService;
import com.example.service.PrivoderService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

import static com.example.domain.AjaxResult.success;

/**
 * @Author linaibo
 * @Date 2023/11/18 15:56
 * @Version 1.0
 */
@Service
public class ConsumerServiceImpl implements ConsumerService {

    @DubboReference
    private PrivoderService privoderService;
    @DubboReference
    private ISysConfigService sysConfigService;

    @Override
    public String getInfo() {
        String info = privoderService.getInfo();
        return info;
    }

    @Override
    public AjaxResult getConfig(Long configId) {
        return success(sysConfigService.selectConfigById(configId));
    }
}

配置文件及启动类配置和生产者工程一致

启动zookeeper服务及生产者工程及消费者工程,就可以进行服务的调用。

3.总结

可以通过dubbo-admin进行服务的管理及查看。

dubbo.consumer.timeout:调用超时时间(毫秒),默认为 1000。debug模式下会导致调用失败,所以需要调大。

dubbo.consumer.check:为true时,开启服务启动时检查依赖的服务是否可用,默认为 true。

也就是说,生产者没有启动时,消费者无法启动,需要设置为false

参照:SpringBoot整合dubbo+zooker搭建分布式服务(超详细)_springboot+dubbo分布式项目-CSDN博客

SpringBoot项目集成Dubbo_springboot集成dubbo-CSDN博客

相关推荐
my_styles5 分钟前
docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
spring boot·redis·后端·mysql·spring cloud·docker·容器
掘金-我是哪吒7 分钟前
分布式微服务系统架构第132集:Python大模型,fastapi项目-Jeskson文档-微服务分布式系统架构
分布式·python·微服务·架构·系统架构
编程、小哥哥21 分钟前
互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
java·spring boot·redis·微服务·prometheus·面试技巧
掘金-我是哪吒2 小时前
分布式微服务系统架构第129集:redis安装部署文档
redis·分布式·微服务·架构·系统架构
caihuayuan53 小时前
生产模式下react项目报错minified react error #130的问题
java·大数据·spring boot·后端·课程设计
一只码代码的章鱼3 小时前
Spring Boot- 2 (数万字入门教程 ):数据交互篇
spring boot·后端·交互
编程、小哥哥3 小时前
Java大厂面试:从Web框架到微服务技术的场景化提问与解析
java·spring boot·微服务·面试·技术栈·数据库设计·分布式系统
化名三爷3 小时前
若依框架Consul微服务版本
微服务·consul·若依微服务·若依框架·consul微服务
编程、小哥哥5 小时前
互联网大厂Java面试场景:从缓存到容器化的技术问答
redis·docker·微服务·kubernetes·spring security·java面试·gitlab ci
苹果酱05675 小时前
React方向:react脚手架的使用
java·vue.js·spring boot·mysql·课程设计