Springboot优雅整合Dubbo完成分布式服务注册案例

简介: Springboot优雅整合Dubbo完成分布式服务注册案例

说明:Springboot整合Dubbo完成分布式服务注册,笔者以调用订单信息时调用查询用户地址信息为例。


开发工具 Idea


父项目:springboot-dubbo-interface

提供者:springboot-dubbo-provider

消费者:springboot-dubbo-consumer


一、父项目:springboot-dubbo-interface


1.pom依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>


2.UserAddress.java 公共实体类【网络传输对象】


@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserAddress implements Serializable {
    private Integer id;
    private String userAddress;
    private String userId;
}


3.UserService.java/OrderService.java 两个公共接口


public interface OrderService {
  //查询订单,调用用户地址服务,返回用户地址
    public List<UserAddress> initOrder(String userId);
}
------------------------------------------------------
  public interface UserService {
    /*查询用户所有的地址*/
    public List<UserAddress> queryAllAddress(String userId);
}


二、提供者:springboot-dubbo-provider

1.pom依赖

<dependencies>
        <!--继承父项目-->
        <dependency>
            <groupId>com.wang</groupId>
            <artifactId>springboot-dubbo-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--apache dubbo-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.3</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

2.application.properties

# 1. application name
dubbo.application.name=springboot-service-provider
# 2. dubbo:registry address
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 3. dubbo:protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
### 说明: 可以新建一个dubbo.properties 把上面的配置复制进去也可以。

3.UserServiceImpl.java 服务提供实现类

import com.wang.springboot.domain.UserAddress;
import com.wang.springboot.service.UserService;
import org.apache.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List;
/**
 * @author 王一宁
 * @date 2020/3/28 17:58
 */
@Service
public class UserServiceImpl implements UserService {
    private static List<UserAddress> address = new ArrayList<UserAddress>();
    static {
        UserAddress userAddress = new UserAddress(1, "廊坊市固安县", "whsxt");
        address.add(userAddress);
    }
    /*模拟查询数据库*/
    @Override
    public List<UserAddress> queryAllAddress(String userId) {
        return address;
    }
}

4.启动类上记得加上 @EnableDubbo //启用dubbo


三、消费者:springboot-dubbo-consumer


1.pom

<dependencies>
        <!--父项目的依赖-->
        <dependency>
            <groupId>com.wang</groupId>
            <artifactId>springboot-dubbo-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--apache dubbo-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.3</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2.application.properties


# 1.appname
dubbo.application.name=springboot-service-consumer
# 2.address
dubbo.registry.address=zookeeper://127.0.0.1:2181


3.OrderServiceImpl.java 消费者实现类


import com.wang.springboot.domain.UserAddress;
import com.wang.springboot.service.OrderService;
import com.wang.springboot.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author 王一宁
 * @date 2020/3/28 11:03
 */
@Service
public class OrderServiceImpl implements OrderService {
    @Reference
    private UserService userService;
    /*查询所有的订单中调用用户查询地址的api接口*/
    @Override
    public List<UserAddress> initOrder(String userId) {
        return userService.queryAllAddress(userId);
    }
}


4.OrderController.java 这个是个web项目,用来体验结果

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @RequestMapping("/initOrder")
    public List<UserAddress> initOrder(String userId){
        return this.orderService.initOrder(userId);
    }
}

四、开启你的zookeeper、dubbo-admin


1.启动 生产者项目

2.启动 消费者项目

3.可以在bubbo的web查看服务状态


http://127.0.0.1:7001/


4.访问自己的服务


http://localhost:8080/order/initOrder?userId=wang
返回结果:
[{"id":1,"userAddress":"廊坊市固安县","userId":"whsxt"}]


目录
相关文章
|
5月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
379 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
9月前
|
存储 数据挖掘
Vsan数据恢复——Vsan分布式文件系统数据恢复案例
一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用,存储内的数据丢失。
254 30
|
12月前
|
NoSQL Java Redis
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
1207 83
|
9月前
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
819 4
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
1289 160
|
10月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
341 12
|
11月前
|
存储 Java 文件存储
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
本文介绍了如何基于Spring Boot 3和MinIO实现分布式文件存储。随着应用规模扩大,传统的单机文件存储方案难以应对大规模数据和高并发访问,分布式文件存储系统成为更好的选择。文章详细讲解了MinIO的安装、配置及与Spring Boot的整合步骤,包括Docker部署、MinIO控制台操作、Spring Boot项目中的依赖引入、配置类编写及工具类封装等内容。最后通过一个上传头像的接口示例展示了具体的开发和测试过程,强调了将API操作封装成通用工具类以提高代码复用性和可维护性的重要性。
2355 7
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
|
运维 数据挖掘 索引
服务器数据恢复—Lustre分布式文件系统服务器数据恢复案例
5台节点服务器,每台节点服务器上有一组RAID5阵列。每组RAID5阵列上有6块硬盘(其中1块硬盘设置为热备盘,其他5块硬盘为数据盘)。上层系统环境为Lustre分布式文件系统。 机房天花板漏水导致这5台节点服务器进水,每台服务器都有至少2块硬盘出现故障。每台服务器中的RAID5阵列短时间内同时掉线2块或以上数量的硬盘,导致RAID崩溃,服务器中数据无法正常读取。
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
409 3
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
3344 2
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个