利用springboot+dubbo,构建分布式微服务,全程注解开发(三)

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

5.3、创建用户中心项目

在 IDEA 中,创建dianshang-user子模块,并依赖dianshang-common模块

<dependencies>
    <dependency>
        <groupId>org.project.demo</groupId>
        <artifactId>dianshang-common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

同时,创建dianshang-user-providerdianshang-user-api模块。

  • dianshang-user-api:主要对其他服务提供接口暴露
  • dianshang-user-provider:类似一个web工程,主要负责基础业务的crud,同时依赖dianshang-user-api模块
5.3.1、配置dubbo服务

dianshang-user-providerapplication.yml文件中配置dubbo服务,如下:

#用户中心服务端口
server:
  port: 8080
#数据源配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/dianshang-user"
      username: root
      password: 111111
#dubbo配置
dubbo:
  scan:
    # 包名根据自己的实际情况写
    base-packages: org.project.dianshang.user
  protocol:
    port: 20880
    name: dubbo
  registry:
    #zookeeper注册中心地址
    address: zookeeper://192.168.0.107:2181
5.3.2、编写服务暴露接口以及实现类

dianshang-user-api模块中,创建一个UserApi接口,以及返回参数对象UserVo

public interface UserApi {
    /**
     * 查询用户信息
     * @param userId
     * @return
     */
    UserVo findUserById(String userId);
}

其中UserVo,需要实现序列化,如下:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class UserVo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 用户ID
     */
    private String userId;
    /**
     * 用户中文名
     */
    private String userName;
}

dianshang-user-provider模块中,编写UserApi接口实现类,如下:

@Service(interfaceClass =UserApi.class)
@Component
public class UserProvider implements UserApi {
    @Autowired
    private UserService userService;
    @Override
    public UserVo findUserById(String userId) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.eq("user_id",userId);
        User source = userService.getOne(queryWrapper);
        if(source != null){
            UserVo vo = new UserVo();
            BeanUtils.copyProperties(source,vo);
            return vo;
        }
        return null;
    }
}

其中的注解@Service指的是org.apache.dubbo.config.annotation.Service下的注解,而不是Spring下的注解哦

接着,我们继续创建商品中心项目!

5.4、创建商品中心项目

与用户中心项目类似,在 IDEA 中,创建dianshang-platform子模块,并依赖dianshang-common模块

<dependencies>
    <dependency>
        <groupId>org.project.demo</groupId>
        <artifactId>dianshang-common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

同时,创建dianshang-platform-providerdianshang-platform-api模块。

  • dianshang-platform-api:主要对其他服务提供接口暴露
  • dianshang-platform-provider:类似一个web工程,主要负责基础业务的crud,同时依赖dianshang-platform-api模块
5.4.1、配置dubbo服务

dianshang-platform-providerapplication.yml文件中配置dubbo服务,如下:

#用户中心服务端口
server:
  port: 8081
#数据源配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/dianshang-platform"
      username: root
      password: 111111
#dubbo配置
dubbo:
  scan:
    # 包名根据自己的实际情况写
    base-packages: org.project.dianshang.platform
  protocol:
    port: 20881
    name: dubbo
  registry:
    #zookeeper注册中心地址
    address: zookeeper://192.168.0.107:2181
5.4.2、编写服务暴露接口以及实现类

dianshang-platform-api模块中,创建一个ProductApi接口,以及返回参数对象ProductVo

public interface ProductApi {
    /**
     * 通过商品ID,查询商品信息
     * @param productId
     * @return
     */
    ProductVo queryProductInfoById(String productId);
}

其中ProductVo,需要实现序列化,如下:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ProductVo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**商品ID*/
    private String productId;
    /**商品名称*/
    private String productName;
    /**商品价格*/
    private BigDecimal productPrice;
}

dianshang-platform-provider模块中,编写ProductApi接口实现类,如下:

@Service(interfaceClass = ProductApi.class)
@Component
public class ProductProvider implements ProductApi {
    @Autowired
    private ProductService productService;
    @Override
    public ProductVo queryProductInfoById(String productId) {
        //通过商品ID查询信息
        Product source = productService.getById(productId);
        if(source != null){
            ProductVo vo = new ProductVo();
            BeanUtils.copyProperties(source,vo);
            return vo;
        }
        return null;
    }
}

接着,我们继续创建订单中心项目!

5.5、创建订单中心项目

与商品中心项目类似,在 IDEA 中,创建dianshang-business子模块,并依赖dianshang-common模块

<dependencies>
    <dependency>
        <groupId>org.project.demo</groupId>
        <artifactId>dianshang-common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

同时,创建dianshang-business-providerdianshang-business-api模块。

  • dianshang-business-api:主要对其他服务提供接口暴露
  • dianshang-business-provider:类似一个web工程,主要负责基础业务的crud,同时依赖dianshang-business-api模块
5.5.1、配置dubbo服务

dianshang-business-providerapplication.yml文件中配置dubbo服务,如下:

#用户中心服务端口
server:
  port: 8082
#数据源配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/dianshang-business"
      username: root
      password: 111111
#dubbo配置
dubbo:
  scan:
    # 包名根据自己的实际情况写
    base-packages: org.project.dianshang.business
  protocol:
    port: 20882
    name: dubbo
  registry:
    #zookeeper注册中心地址
    address: zookeeper://192.168.0.107:2181
5.5.2、编写服务暴露接口以及实现类

dianshang-business-api模块中,创建一个OrderApi接口,以及返回参数对象OrderVo

public interface OrderApi {
    /**
     * 通过用户ID,查询用户订单信息
     * @param userId
     * @return
     */
    List<OrderVo> queryOrderByUserId(String userId);
}

其中OrderVo,需要实现序列化,如下:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class OrderVo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**订单ID*/
    private String orderId;
    /**订单编号*/
    private String orderNo;
    /**订单金额*/
    private BigDecimal orderPrice;
    /**下单时间*/
    private Date orderTime;
}



相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2天前
|
数据管理 物联网 开发者
现代化后端开发中的微服务架构设计与实现
在当今快速发展的软件开发领域,微服务架构已成为构建高效、可扩展和灵活的后端系统的重要方式。本文将探讨微服务架构的设计原则、实现方法以及应用场景,帮助开发者理解如何在项目中成功应用微服务。【7月更文挑战第4天】
16 2
|
2天前
|
存储 缓存 NoSQL
使用Java构建高性能的分布式缓存系统
使用Java构建高性能的分布式缓存系统
|
2天前
|
SQL 数据库 微服务
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
|
2天前
|
负载均衡 Java 开发者
Spring Cloud实战:构建分布式系统解决方案
Spring Cloud实战:构建分布式系统解决方案
|
4天前
|
设计模式 弹性计算 监控
后端开发中的微服务架构:优势、挑战与实施策略
在现代软件开发中,微服务架构已成为一种流行的设计模式,特别是在后端开发领域。该架构风格通过将应用程序分解为一组小型、松耦合的服务,旨在提升可维护性、可扩展性和敏捷性。本文深入探讨了微服务架构的关键优势,面临的主要挑战,以及成功实施微服务的策略。通过引用业界案例和最新研究,文章提供了对微服务架构综合理解的视角,并讨论了如何在不断变化的技术环境中保持其有效性。
|
3天前
|
监控 Java 微服务
使用Spring Boot构建微服务架构
使用Spring Boot构建微服务架构
|
3天前
|
消息中间件 负载均衡 Java
Java和Spring Cloud构建分布式系统
Java和Spring Cloud构建分布式系统
|
4天前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
4天前
|
关系型数据库 分布式数据库 PolarDB
**PolarDB开源指南:构建分布式数据库集群**踏上PolarDB开源之旅,了解如何从零开始搭建分布式集群
【7月更文挑战第3天】**PolarDB开源指南:构建分布式数据库集群**踏上PolarDB开源之旅,了解如何从零开始搭建分布式集群。采用存储计算分离架构,适用于大规模OLTP和OLAP。先准备硬件和软件环境,包括Linux、Docker和Git。然后,克隆源码,构建Docker镜像,部署控制节点和计算节点。使用PDCli验证集群状态,开始探索PolarDB的高性能与高可用性。在实践中深化学习,贡献于数据库技术创新。记得在安全环境下测试。
10 1
|
4天前
|
设计模式 安全 持续交付
探索微服务架构下的后端开发实践
在现代软件开发领域,微服务架构已成为一种流行的设计模式,它通过将应用程序分解为一组小的服务来促进敏捷开发和可扩展性。本文深入探讨了微服务架构的核心概念、技术选型、数据一致性挑战以及安全性考虑,旨在为后端开发人员提供一份全面的微服务开发指南。文章结合最新的研究成果和业界最佳实践,分析了微服务架构的优势和面临的挑战,并提出了相应的解决方案。读者将了解到如何在实际项目中应用微服务原则,以及如何克服实施过程中的技术和组织障碍。

热门文章

最新文章